elementui的el-form动态添加相同的表单时的校验

需求说明

后台可以添加多个角色进行不同的分佣规则。现在要对每一个表格都进行填写的校验。
在这里插入图片描述

eg:
在这里插入图片描述

直接上代码

template部分

// template部分
<el-button type="primary" @click="addRole">添加角色</el-button>
<el-form
    ref="roleForm"
    :model="roleForm"
    label-width="150px"
    v-if="roleForm.officerRoleParams.length > 0"
>
    <el-row  v-for="(item, index) in roleForm.officerRoleParams" :key="index">
        <el-form-item
            label="角色名称"
            :prop="'officerRoleParams.' + index + '.roleId'"
            :rules="{
                required: true,
                message: '角色名称不能为空',
                trigger: 'blur',
            }"
        >
            <el-select
                v-model="item.roleId"
                filterable
                placeholder="请选择"
            >
                <el-option
                    v-for="item in roleList"
                    :key="item.id"
                    :label="item.name"
                    :value="item.id"
                >
                </el-option>
            </el-select>
            <el-button
                type="primary"
                @click="delRole(index)"
                style="margin-left: 20px"
                >删除角色</el-button
            >
        </el-form-item>
        <el-form-item
            label="一级首单"
            :prop="'officerRoleParams.' + index + '.firstCommission'"
            :rules="{
                required: true,
                message: '一级首单不能为空',
                trigger: 'blur',
            }"
        >
            <el-input
                type="text"
                v-model="item.firstCommission"
                maxlength="4"
                oninput="value=value.replace(/\D|^0/g,'')"
            ></el-input>
        </el-form-item>
        <el-form-item
            label="一级非首单"
            :prop="'officerRoleParams.' + index + '.otherCommission'"
            :rules="{
                required: true,
                message: '一级非首单不能为空',
                trigger: 'blur',
            }"
        >
            <el-input
                type="text"
                v-model="item.otherCommission"
                maxlength="4"
                oninput="value=value.replace(/\D|^0/g,'')"
            ></el-input>
        </el-form-item>
        <el-form-item
            label="二级首单"
            :prop="'officerRoleParams.' + index + '.friFirstCommission'"
            :rules="{
                required: true,
                message: '二级首单不能为空',
                trigger: 'blur',
            }"
        >
            <el-input
                type="text"
                v-model="item.friFirstCommission"
                maxlength="4"
                oninput="value=value.replace(/\D|^0/g,'')"
            ></el-input>
        </el-form-item>
        <el-form-item
            label="二级非首单"
            :prop="'officerRoleParams.' + index + '.friOtherCommission'"
            :rules="{
                required: true,
                message: '二级非首单不能为空',
                trigger: 'blur',
            }"
        >
            <el-input
                type="text"
                v-model="item.friOtherCommission"
                maxlength="4"
                oninput="value=value.replace(/\D|^0/g,'')"
            ></el-input>
        </el-form-item>
        <el-form-item
            label="一级返佣单数"
            :prop="'officerRoleParams.' + index + '.level1Limit'"
            :rules="{
                required: true,
                message: '一级返佣单数不能为空',
                trigger: 'blur',
            }"
        >
            <el-input
                type="text"
                v-model="item.level1Limit"
                maxlength="4"
                oninput="value=value.replace(/\D|^0/g,'')"
            ></el-input>
        </el-form-item>
        <el-form-item
            label="二级返佣单数"
            :prop="'officerRoleParams.' + index + '.level2Limit'"
            :rules="{
                required: true,
                message: '二级返佣单数不能为空',
                trigger: 'blur',
            }"
        >
            <el-input
                type="text"
                v-model="item.level2Limit"
                maxlength="4"
                oninput="value=value.replace(/\D|^0/g,'')"
            ></el-input>
        </el-form-item>
    </el-row>
</el-form>

script部分

// data
roleForm: {
    officerRoleParams: [],
},
roleList: ['默认','车行'], // 添加角色名称
// methods
// 删除角色
delRole(index) {
    this.roleForm.officerRoleParams.splice(index,1);
    console.log(index);
},
// 添加角色
addRole() {
    let roleItem = {
        firstCommission: "",
        friFirstCommission: "",
        friOtherCommission: "",
        level1Limit: "",
        level2Limit: "",
        otherCommission: "",
        roleId: "",
    };
    this.roleForm.officerRoleParams.push(roleItem);
},

说明

校验部分直接调用 this.$refs[“roleForm”].validate(); 这种方式返回的是一个promise,详情见elementui官方文档。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用el-form-item循环表单校验,可以考虑以下方法。首先,确保在el-form中绑定的是正确的form数据,如引用所示。然后,在循环遍历表单项的候,需要在每个el-form-item上设置唯一的prop值,用于校验规则的匹配。接着,可以在data中定义一个rules对象,用于存储不同prop值对应的校验规则。这样,就可以根据不同的业务需求,动态地改变校验规则。最后,在el-form-item中使用v-if或v-show指令来显示或隐藏错误提示信息,根据表单项的校验状态来判断是否显示校验错误信息。通过以上方法,可以实现el-form-item循环表单校验的功能,避免了在循环遍历表单无法正确校验的问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [VUEel-form包含循环遍利的数据校验](https://blog.csdn.net/weixin_43691818/article/details/121923444)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [vue elementui el-form rules动态验证的实例代码详解](https://download.csdn.net/download/weixin_38670297/12941851)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值