tab切换前,如果有逻辑要处理,不满足条件不允许切,就用before-leave
<el-tabs type="border-card" :before-leave="confirmLeave">
如果需要表单校验,要用async和await搭配使用,不然校验触发的不及时
如果return false还是切换了,就使用return reject()
// tab切换前判断
async confirmLeave(active) {
if (active === '1') {
await this.$refs.annualAssetDetail.$refs.costForm.validate(valid => {
let arr = this.$refs.annualAssetDetail.costForm.tableData
if (valid) {
if (arr.length) {
arr.forEach(item => {
if (item.clearId == 0) item.id = ''
})
return true
} else {
this.$message.warning('请先填写明细数据!')
return reject()
}
} else {
for (var i = 0; i < arr.length; i++) {
if (!arr[i].Code) {
this.$message.warning(`明细数据第${i + 1}行的xx分类未填写!`)
break
} else if (!arr[i].remark) {
this.$message.warning(`明细数据第${i + 1}行的xx说明未填写!`)
break
} else {
this.$message.warning(`明细数据第${i + 1}行的配置数量未填写!`)
}
break
}
}
this.formItemVerify(this.$refs.annualAssetDetail.$refs.costForm)
return reject()
}
})
} else {
this.$refs.annualAssetDetail.costForm.tableDat=[]
}
},