2 回答
TA贡献2065条经验 获得超14个赞
折腾了这么久,终于弄出来了,主要问题是:当校验条件满足时,需要重新校验所有表单的合理性
<el-form :model="ruleForm" ref="form">
<div v-for="(item, index) in ruleForm.proportion" :key="index">
<el-form-item class="left label"
:label="`${item.label}:`"
:rules="rule"
:prop="'proportion.' + index + '.value'">
<el-input v-model.number="item.value"></el-input>%
</el-form-item>
</div>
</el-form>
// created初始化
this.rule = [
{ required: true, message: '请输入单量比例', trigger: 'blur' },
{ type: 'integer', min: 1, max: 100, message: '输入值必须介于1至100', trigger: 'blur' },
{ validator: this.checkSum, trigger: 'blur' },
];
// methods方法
checkSum(rule, value, callback) {
let sum = 0;
this.items.forEach((item) => {
sum += item.value;
});
if (sum !== 100) {
this.isLegal = false;
callback(new Error('比例之和必须为100%'));
} else {
this.isLegal = true;
callback();
}
},
// watch监控
isLegal() {
this.$refs.form.validate((validate) => {
this.isLegal = validate;
});
},
TA贡献1795条经验 获得超7个赞
利用validator定义自己的验证规则,伪代码如下。
[
{ 规则1... },
{ 规则2... },
{
validator: function(rule, value, callback) {
sum(this.data) === 100 ? callback() : callback(new Error("比例之和必须为100%"));
},
trigger: 'blur'
}
]
添加回答
举报