解决表单提交时校验结束时间格式无效问题

您提供的代码中,起始时间和结束时间的校验逻辑是正确的。但在提交表单时,校验结束时间的格式无效。

问题原因:

在提交表单时,会触发表单的所有校验规则,包括结束时间的校验规则。如果结束时间的格式无效,即无法转换为有效的日期对象,就会触发校验失败。

解决方法:

在提交表单之前,先手动触发一次结束时间的校验。可以使用this.$refs.form.validateField('incomePeriodDateEnd')来手动触发结束时间的校验。这样在提交表单时,就会先进行结束时间的校验,如果格式无效,则会提示错误信息。

完整代码示例:

checkStartTime(rule, value, callback) {
  if (!this.form.incomePeriodDateStart) {
    callback(new Error('请输入起始时间'));
  } else {
    const startDate = new Date(this.form.incomePeriodDateStart);
    if (isNaN(startDate.getTime())) {
      callback(new Error('起始时间不能大于结束时间'));
    } else {
      this.form.incomePeriodDateEnd = '';
      callback();
    }
  }
},
checkEndTime(rule, value, callback) {
  if (!this.form.incomePeriodDateStart && !this.form.incomePeriodDateEnd) {
    callback(new Error('请输入结束时间'));
  } else {
    const startDate = new Date(this.form.incomePeriodDateStart);
    const endDate = new Date(this.form.incomePeriodDateEnd);
    if (isNaN(endDate.getTime())) {
      callback(new Error('结束时间格式无效'));
    } else if (endDate < startDate) {
      this.form.incomePeriodDateEnd = '';
      callback(new Error('结束时间不能小于起始时间'));
    } else {
      callback();
    }
  }
},
submitForm() {
  this.$refs.form.validateField('incomePeriodDateEnd', (errorMsg) => {
    if (!errorMsg) {
      // 结束时间格式校验通过
      // 提交表单
      // ...
    }
  });
}

submitForm方法中,先手动触发结束时间的校验,然后根据校验结果决定是否提交表单。如果结束时间的格式校验通过,则可以继续执行提交表单的逻辑。


原文地址: https://www.cveoy.top/t/topic/pmkX 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录