el-form+el-tab实现提交时,精准定位到报错tab页

214 阅读1分钟

前面el-form和el-tab结合的代码,就不赘叙述了,以下为提交时的处理逻辑:
先创建一个对象,key值为需要校验的字段,value值为需要校验字段对应的tab页,以为设置invalid,foundErrorProp两个参数用于下面的判断,具体实现看代码

 handleSubmit() {
      this.$refs.form.validate((valid) => {
        if (valid) {
         xxx
        } else {
          const errMap = {
            'reportProtect': 'reportInfo',
            'reportPhoneRule': 'reportInfo',
            'reportExplain': 'reportInfo',
            'intervalTime': 'bandLookInfo',
            'bandLookProtect': 'bandLookInfo',
            'commissionExplain': 'distributionInformation'
          }
          let invalid = false
          let foundErrorProp
          //this.$refs.form.fields单个form-item的参数都在这里面
          this.$refs.form.fields.forEach((field) => {
          //有未填的必填项且在当前页的情况下,就把invalid,不用跳去其他tab页
            if (field.validateState === 'error' && errMap[field.prop] === this.activeName) {
              invalid = true
            }
            //找到报错的prop,即是form-item的prop
            if (field.validateState === 'error' && !foundErrorProp) {
              foundErrorProp = field.prop
            }
          })
          //报错不在当前页,且能定位到是需要填的必填项的时候再去切换页面
          if (!invalid && foundErrorProp) {
            this.activeName = errMap[foundErrorProp]
          }
          this.invalid = invalid
        }
      })
    },