ToB企服应用市场:ToB评测及商务社交产业平台
标题:
vue绕过rules自定义编写动态校验
[打印本页]
作者:
怀念夏天
时间:
2024-12-15 14:13
标题:
vue绕过rules自定义编写动态校验
本日犯了个低级错误,虽然走了许多弯路,但这个过程还是值得记录一下
例子如下,
有两个输入框:
第一个是
套餐选择
下拉框,可以下拉选择三个内容
第二个要根据上面的
套餐选择
三个选项来决定怎么显示,使用v-if(第一个下拉框的值来做条件显示)
(1)
假如
套餐选择
选招牌冰淇淋,第二个输入框就是招牌冰淇淋下拉框,
就以下拉框的情势显示口味
(2)
假如
套餐选择
选小吃,第二个输入框就是小吃输入框,
就让客户自己填写什么小吃
(2)
假如
套餐选择
选冷饮,第二个输入框就是冷饮输入框,
就让客户自己填写什么冷饮
然后无论第一个
套餐选择
选哪个选项,都要对第二个框进行非空、长度规则等校验,剩下的两个没选的就不做校验,这里其实v-if取了第一个下拉框的值来对第二个输入框做条件显示的时间,别的两个就不会显示,即不走rules,但我没把第二个输入框的规则写在rules里面,自己做了一个验证规则
具体逻辑就是在确定按钮提交表单时,调取this.validateForm()方法去校验一下第一下选的是哪个选项,再决定去校验背面的哪个输入框
焦点校验代码:
详细代码:
<!--第一个下拉框-->
<el-form-item label="套餐选择" prop="setMealType">
<el-select v-model="form.setMealType" placeholder="请选择变更类型" size="small" clearable>
<el-option label="招牌冰淇淋" value="1"></el-option>
<el-option label="小吃" value="2"></el-option>
<el-option label="冷饮" value="3"></el-option>
</el-select>
</el-form-item>
<!-- 第二个输入框(1号)-->
<el-form-item label="招牌冰淇淋" prop="newVehicleColour" v-if="form.setMealType === '1'">
<el-select v-model="form.newVehicleColour" placeholder="请选择冰淇淋口味" filterable clearable size="small">
<el-option label="香草冰淇淋" value="1"></el-option>
<el-option label="牛奶红枣" value="2"></el-option>
<el-option label="薄荷香芋" value="3"></el-option>
</el-select>
<div>
<span v-if="errors.newVehicleColour" class="err">口味不能为空!</span>
</div>
</el-form-item>
<!-- 第二个输入框(2号)-->
<el-form-item label="小吃" prop="newMotornumber" v-if="form.setMealType === '2'">
<el-input v-model="form.newMotornumber" placeholder="请输入小吃" maxlength="30" ></el-input>
<span v-if="errors.newMotornumber" class="err">小吃不能为空!</span>
</el-form-item>
<!-- 第二个输入框(3号)-->
<el-form-item label="冷饮" prop="newBatteryNum" v-else-if="form.setMealType === '3'">
<el-input v-model="form.newBatteryNum" placeholder="请输入冷饮" maxlength="30" />
<span v-if="errors.newBatteryNum" class="err">冷饮不能为空!</span>
</el-form-item>
复制代码
data和rules:(data声明errors , rules仅对第一个输入框校验)
data() {
return {
// 遮罩层
loading: true,
//表单参数
form: {},
// 错误信息
errors: {},
// 表单校验
rules: {
changeType: [{
required: true,
message: "请选择套餐类型",
trigger: "blur"
}],
}
};
},
复制代码
表单重置
将this.errors置空)
// 表单重置
reset() {
this.form = {
id: null,
...
...
createBy: null,
createTime: null,
updateBy: null,
updateTime: null,
remark: null
};
this.errors = {};
this.resetForm("form");
},
复制代码
校验规则:
// 自定义校验方法
validateField(field) {
this.errors[field] = '';
if (!this.form[field]) {
this.errors[field] = `${field} 不能为空!`;
}
},
// 校验所有字段
validateForm() {
this.errors = {};
if (this.form.changeType === '1') {
this.validateField('newVehicleColour');
} else if (this.form.changeType === '2') {
this.validateField('newMotornumber');
} else if (this.form.changeType === '3') {
this.validateField('newBatteryNum');
}
// 检查是否有错误
for (const key in this.errors) {
if (this.errors[key]) {
// this.$message.error(this.errors[key]);
return false;
}
}
return true;
},
复制代码
重置按钮:
/** 重置按钮操作 */
resetQuery() {
this.errors = {};
this.resetForm("queryForm");
this.handleQuery();
},
复制代码
表单提交按钮:
/** 提交按钮 */
submitForm() {
if (this.validateForm()) {
// 表单验证通过
console.log('表单验证通过', this.form);
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.id != null) {
update(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
add(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
// 这里可以添加提交表单的逻辑
} else {
// 表单验证失败
console.log('规则验证失败', this.errors);
}
},
复制代码
自定义提示语样式
<style>.err {
color: red;
font-size: 12px;
}
</style>
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4