前面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
}
})
},