vue el-form循环校验问题?

openForm: {
        memo: "",
        student_list: [
          { student_name: "", student_phone: "", student_email: "" },
        ],
      }
     <el-form
              :disabled="basicForm.edit_status === '0'"
              ref="studentForm"
              :model="openForm"
              label-width="120px"
              :rules="rules"
              @submit.prevent="submitform"
            >
              <div
                v-for="(item, index) in openForm.student_list"
                :key="index"
                class="student__form"
              >
                <el-form-item
                  :prop="'student_list[' + index + '].student_name'"
                  :rules="rules.student_name"
                >
                  <span slot="label">
                    <span class="formStar">学员{{ index + 1 }}姓名</span>
                  </span>
                  <el-col :span="8">
                    <el-input
                      v-model="item.student_name"
                      clearable
                      placeholder="请输入您的真实姓名"
                    ></el-input>
                  </el-col>
                </el-form-item>
                <el-form-item
                  label="手机号"
                  :prop="'student_list[' + index + '].student_phone'"
                  :rules="rules.student_phone"
                >
                  <el-col :span="8">
                    <el-input
                      v-model.trim="item.student_phone"
                      clearable
                      placeholder="请输入真实有效的手机号"
                    ></el-input>
                  </el-col>
                </el-form-item>
                <el-form-item
                  label="邮箱"
                  :prop="'student_list[' + index + '].student_email'"
                  :rules="rules.student_email"
                >
                  <el-col :span="8">
                    <el-input
                      v-model.trim="item.student_email"
                      clearable
                      placeholder="请输入常用邮箱"
                    ></el-input>
                  </el-col>
                </el-form-item>
              </div>
            </el-form>
// 学员信息表单校验
      const form2 = new Promise((reslove, reject) => {
        this.$refs.studentForm.validate(async (valid) => {
          if (valid) reslove();
        });
      });

      Promise.all([form1, form2]).then(async () => { });

form表单为循环,个数不确定,如何只局部校验数组里面对象的值不为空的数据

阅读 2.1k
1 个回答

方法一:

const validateFormFields = (form, index) => {
  const fieldsToValidate = ["student_name", "student_phone", "student_email"];
  const fieldsFilled = fieldsToValidate.filter(field => form[field] !== '');
  
  if (fieldsFilled.length > 0) {
    fieldsToValidate.forEach(field => {
      if (form[field] === '' && field !== fieldsFilled[0]) {
        // 触发其他两项字段的校验
        this.$refs.studentForm.validateField(`form[${index}].${field}`);
      }
    });
  }
};

方法二:

const validateEmail = (rule, value, callback) => {
  const index = rule.field.split('[')[1].split(']')[0];
  const formItem = this.openForm.form[index];
  if (value || formItem.student_name || formItem.student_phone) {
    if (value) {
      if (detectEmail(value)) {
        // 合法的输入
        callback();
      } else {
        return callback(new Error("请输入正确的邮箱"));
      }
    } else {
      return callback(new Error("邮箱不能为空"));
    }
  } else {
    callback();
  }
};

const validatePhone = (rule, value, callback) => {
  const index = rule.field.split('[')[1].split(']')[0];
  const formItem = this.openForm.form[index];
  if (value || formItem.student_name || formItem.student_email) {
    if (value) {
      if (detectPhone(value)) {
        callback();
      } else {
        callback(new Error("请输入正确的联系方式"));
      }
    } else {
      return callback(new Error("手机号不能为空"));
    }
  } else {
    callback();
  }
};

const validName = (rule, value, callback) => {
  const index = rule.field.split('[')[1].split(']')[0];
  const formItem = this.openForm.form[index];
  if (value || formItem.student_phone || formItem.student_email) {
    if (value) {
      callback();
    } else {
      callback(new Error("请输入联系人"));
    }
  } else {
    callback();
  }
};
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题