el-form循环el-form-item多个类型input并进行动态验证

<el-form
            ref="ruleForm"
            :model="ruleForm"
            :rules="rules"
            hide-required-asterisk
            :label-position="labelPosition"
            label-width="70px"
          >
            <el-form-item
              v-for="(labelItem, indexs) in ruleForm.formList"
              :key="indexs"
              :label="title == '修改类型名称' ? '类型名称' : labelItem.name"
              :prop="'formList.' + indexs + '.value'"
              :rules="[ 
                {
                  required: labelItem.must,
                  message: '请输入' + labelItem.name,
                  trigger: ['blur'],
                },
                {
                  validator:
                    labelItem.type == 3
                      ? checkPhone
                      : labelItem.type == 4
                      ? checkEmil
                      :labelItem.type == 5
                      ? checkNum
                      : '',
                  trigger: ['blur'],
                },
              ]"
            >
              <el-input
                v-if="labelItem.type != 2"
                class="label-input"
                :type="
                  labelItem.type == 3 || labelItem.type == 5 ? 'number' : 'text'
                "
                :placeholder="
                  title == '修改类型名称'
                    ? '请输入类型名称'
                    : '请输入' + labelItem.name
                "
                v-model="labelItem.value"
                autocomplete="off"
              >
              </el-input>
              <el-date-picker
                v-if="labelItem.type == 2"
                style="width: 100%"
                v-model="labelItem.value"
                type="datetime"
                format="yyyy-MM-dd HH:mm:ss"
                value-format="yyyy-MM-dd HH:mm:ss"
                placeholder="选择到期时间"
                default-time="12:00:00"
              >
              </el-date-picker>
            </el-form-item>
          </el-form>
           <div slot="footer" class="dialog-footer">
            <el-button
              class="btn"
              type="primary"
              @click="submitForm('ruleForm', index, item)">提交</el-button>
            <el-button class="btn" @click="closeForm('ruleForm', index, item)">取消</el-button>
          </div>
data(){
    return{
        title:'添加卡片',
        ruleForm: {
            name: "",
            tagClassifyId: "",
            id: null,
            formList: [
                {
                    "disable": true,
                    "name": "卡片名称",
                    "must": true,
                    "id": "",
                    "type": 1,
                    "value": "12"
                },
                {
                    "disable": false,
                    "name": "电话",
                    "must": true,
                    "id": "",
                    "type": 1,
                    "value": ""
                },
                {
                    "disable": false,
                    "name": "邮箱",
                    "must": false,
                    "id": "",
                    "type": 1,
                    "value": ""
                }
            ],
          },
    }

},
methods: {
    checkPhone(rule, value, callback) {
      if (!value || vaildPhone(value)) return callback();
      return callback(new Error("请输入正确的格式"));
    },
    checkEmil(rule, value, callback) {
      if (!value || validMailbox(value)) return callback();
      return callback(new Error("请输入正确的格式"));
    },
    checkNum(rule, value, callback){
      if(!value || validNum(value)) return callback();
      return callback(new Error("请输入正确的格式"));
    },
    submitForm(ruleForm, index, item) {
      this.$refs[ruleForm][index].validate(async (valid) => {
        if (valid) {
            createLabel({
              tagClassifyId: item.id,
              formList: item.filedType,
            }).then((res) => {
              if (res.code == 0) {
                this.$modal.msgSuccess("添加成功");
                item.addFlag = false;
                this.getTagListByName(this.labelVal);
              } else {
                this.$modal.msgWarning("添加失败");
              }
            });
            Object.assign(this.$data.ruleForm, this.$options.data().ruleForm);
        }
      });
    },
    closeForm(ruleForm, index, item) {
      this.$refs[ruleForm][index].resetFields();
      item.addFlag = false;
    },

}

当一个el-form-item多个el-input的表单校验时,可以使用数组的方式为每个el-input设置不同的校验规则。下面是一个示例: ```html <template> <el-form ref="form" :model="formData" :rules="formRules" label-width="100px"> <el-form-item label="用户名" prop="username"> <el-input v-model="formData.username"></el-input> </el-form-item> <el-form-item label="密码" prop="password"> <el-input v-model="formData.password" type="password"></el-input> </el-form-item> <el-form-item> <el-button type="primary" @click="submitForm">提交</el-button> </el-form-item> </el-form> </template> <script> export default { data() { return { formData: { username: '', password: '' }, formRules: { username: [ { required: true, message: '请输入用户名', trigger: 'blur' }, { min: 3, max: 10, message: '用户名长度在 3 到 10 个字符', trigger: 'blur' } ], password: [ { required: true, message: '请输入密码', trigger: 'blur' }, { min: 6, max: 20, message: '密码长度在 6 到 20 个字符', trigger: 'blur' } ] } }; }, methods: { submitForm() { this.$refs.form.validate(valid => { if (valid) { // 表单校验通过,执行提交操作 // ... } else { // 表单校验不通过,显示错误信息 return false; } }); } } }; </script> ``` 在上面的示例中,我们为每个el-input设置了不同的校验规则。通过在formRules对象中为每个字段设置一个数组,数组中的每个对象表示一个校验规则。每个校验规则对象包含了校验规则的配置,例如required、min、max等,以及对应的错误提示信息和触发校验的事件。在submitForm方法中,我们使用this.$refs.form.validate方法来触发表单校验,并根据校验结果执行相应的操作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值