Vue element ui 多层嵌套表单验证

1.html

<el-form  ref="expenseApplyForm" :model="expenseApplyData" :rules="expenseApplyRules" label-width="160px">
    <el-form-item label="单号" prop="">
        <el-input v-model="expenseApplyData.orderId" :disabled="true" placeholder="系统自动生成"></el-input>
    </el-form-item>
    <el-form-item label="项目号" prop="projectId">
        <el-input v-model="expenseApplyData.projectId" placeholder="请填入项目号"></el-input>
    </el-form-item>
    <el-form-item label="报销人" prop="expenseAccount">
        <el-input v-model="expenseApplyData.expenseAccount" placeholder="请选择报销人"></el-input>
    </el-form-item>
    <div v-for="(item,index) in expenseApplyData.expenseDetailList " >
        <el-tag type="info" style="margin-left: 160px;margin-bottom: 2px">报销明细{{index+1}}</el-tag>
        <el-link type="primary" v-if="expenseApplyData.expenseDetailList.length > 1" style="float: right;margin-right:19%;" @click="deleteExpenseDetail(index)">删除</el-link>
        <el-form-item label="费用事由" >
            <el-select v-model="item.costsDetails" placeholder="请选择" :class="prefix + '-select'">
                <el-option label="交通费" value="交通费"></el-option>
                <el-option label="差旅费" value="差旅费"></el-option>
                <el-option label="招待费" value="招待费"></el-option>
                <el-option label="住宿费" value="住宿费"></el-option>
                <el-option label="团建费" value="团建费"></el-option>
                <el-option label="通讯费" value="通讯费"></el-option>
                <el-option label="活动经费" value="活动经费"></el-option>
                <el-option label="培训费" value="培训费"></el-option>
                <el-option label="办公耗材采购费" value="办公耗材采购费"></el-option>
                <el-option label="维修服务费" value="维修服务费"></el-option>
                <el-option label="其他" value="其他"></el-option>
            </el-select>
        </el-form-item><!--@change="countTotalMoney(index)"-->
        <el-form-item label="报销金额" :prop="`expenseDetailList[${index}].expenseMoney`" :rules="expenseApplyRules.expenseMoney" >
            <el-input v-model="item.expenseMoney"  placeholder="请填入报销金额"></el-input>
        </el-form-item>
        <el-form-item label="费用说明" prop="">
            <el-input v-model="item.costsAxplain" placeholder="请填入费用说明"></el-input>
        </el-form-item>
        <el-form-item label="费用归属" prop="">
            <el-input v-model="item.costOfBelonging" placeholder="请选择费用归属"></el-input>
        </el-form-item>
        <el-form-item label="附件上传" prop="" style="width:30%;">
            <el-upload
                class=""
                action="#"
                :before-upload="beforeLogoUpload"
                :http-request="uploadFile"
                :on-remove="handleRemove"
                :file-list="item.fileList"
            >
                <el-button size="small" type="primary">点击上传</el-button>
            </el-upload>
        </el-form-item>
        <el-divider v-if="index != expenseApplyData.expenseDetailList.length -1"></el-divider>
    </div>

    <el-form-item label="" prop="">
        <el-button type="primary"  @click="addExpenseDetail()" style="width: 100%;">添加报销明细</el-button>
    </el-form-item>

    <el-form-item label="总报销金额" prop="totalMoney">
        <el-input v-model="expenseApplyData.totalMoney" :readonly="true"></el-input>
    </el-form-item>
</el-form>

2.script

export default {
    data() {
        let checkExpenseMoney = (rule, value, callback) => {
            debugger;
            if (!value) {
                return callback(new Error('报销金额不能为空!'));
            }
            setTimeout(() => {
                if (!/^[0-9]+(.[0-9]{1,2})?$/.test(value) ||  !(value-0)>0) {
                    return callback(new Error('报销金额必须大于0且最多两位小数!'));
                }
                callback();
            }, 500);
        };
        return {
            prefix:'workflowApply',
            dialogFormVisible:false,
            workflowApplyData:{
                programId:''
            },
            expenseApplyData:{
                orderId:'',
                projectId:'',
                expenseAccount:'',
                expenseDetailList:[
                    {
                        costsDetails:'',
                        expenseMoney:'',
                        costsAxplain:'',
                        costOfBelonging:'',
                        fileList: []//{name: '', url: ''}
                    }
                ],
                // costsDetails:'',
                // expenseMoney:'',
                // costsAxplain:'',
                // costOfBelonging:'',
                // fileList: []//{name: '', url: ''}
                totalMoney:''
            },
            programList:[],
            expenseApplyRules:{
                projectId: [
                    { required: true, message: "项目号不能为空", trigger: "blur" }
                ],
                expenseAccount: [
                    { required: true, message: "报销人不能为空", trigger: "blur" }
                ],
                costsDetails: [
                    { required: true, message: "费用事由不能为空", trigger: "blur" }
                ],
                expenseMoney: [
                    { required: true,validator: checkExpenseMoney, trigger: "blur" }
                ],
                totalMoney: [
                    { required: true, message: "报销总金额不能为空", trigger: "blur" }
                ]
            },
            status:{
                loading:false
            }
        };
    },
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Element UI 中,如果你想要在嵌套数组,并且能够动态增加或删除数组项,你可以使用 `el-form`、`el-form-item` 和 `el-input` 等组件来实现。 以下是一个示例代码片段,展示了如何在 Element UI嵌套数组,并实现动态增减数组项的功能: ```html <template> <el-form :model="formData" ref="form" label-width="100px"> <el-form-item v-for="(item, index) in formData.items" :key="index"> <el-input v-model="item.value" :placeholder="item.label"></el-input> <el-button @click="removeItem(index)" type="danger" icon="el-icon-delete"></el-button> </el-form-item> <el-button @click="addItem" type="primary">添加项</el-button> </el-form> </template> <script> export default { data() { return { formData: { items: [ { label: 'Label 1', value: '' }, { label: 'Label 2', value: '' }, ], }, }; }, methods: { addItem() { this.formData.items.push({ label: '', value: '' }); }, removeItem(index) { this.formData.items.splice(index, 1); }, }, }; </script> ``` 在上面的代码中,我们使用 `v-for` 指令来遍历 `formData.items` 数组,该数组包含了中的嵌套项。对于每个数组项,我们使用 `el-input` 组件来显示输入框,并使用 `v-model` 指令实现数据绑定。 我们还使用了一个删除按钮,当点击按钮时,调用 `removeItem` 方法来删除对应的数组项。 最后,我们添加了一个“添加项”按钮,点击该按钮时,调用 `addItem` 方法来动态添加新的数组项。 通过这种方式,你可以在 Element UI嵌套数组,并实现动态增减数组项的功能。你可以根据实际需求,使用其他 Element UI 组件来代替 `el-input`,以实现不同的元素类型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值