vue绕过rules自定义编写动态校验

news/2024/12/16 3:57:09/

今天犯了个低级错误,虽然走了很多弯路,但这个过程还是值得记录一下

例子如下,有两个输入框:

第一个是套餐选择下拉框,可以下拉选择三个内容

第二个要根据上面的套餐选择三个选项来决定怎么显示,使用v-if(第一个下拉框的值来做条件显示)

(1)如果套餐选择招牌冰淇淋,第二个输入框就是招牌冰淇淋下拉框,

就以下拉框的形式显示口味

(2)如果套餐选择小吃,第二个输入框就是小吃输入框,

就让客户自己填写什么小吃

(2)如果套餐选择冷饮,第二个输入框就是冷饮输入框,

就让客户自己填写什么冷饮

然后无论第一个套餐选择选哪个选项,都要对第二个框进行非空、长度规则等校验,剩下的两个没选的就不做校验,这里其实v-if取了第一个下拉框的值来对第二个输入框做条件显示的时候,另外两个就不会显示,即不走rules,但我没把第二个输入框的规则写在rules里面,自己做了一个验证规则

具体逻辑就是在确定按钮提交表单时,调取this.validateForm()方法去校验一下第一下选的是哪个选项,再决定去校验后面的哪个输入框

核心校验代码: 

 

详细代码: 

javascript"><!--第一个下拉框-->
<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仅对第一个输入框校验)

javascript">data() {return {// 遮罩层loading: true,//表单参数form: {},// 错误信息errors: {},// 表单校验rules: {changeType: [{required: true,message: "请选择套餐类型",trigger: "blur"}],}};},

表单重置:(将this.errors置空)

javascript"> // 表单重置reset() {this.form = {id: null,......createBy: null,createTime: null,updateBy: null,updateTime: null,remark: null};this.errors = {};this.resetForm("form");},

校验规则:

javascript">// 自定义校验方法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;},

重置按钮:

javascript"> /** 重置按钮操作 */resetQuery() {this.errors = {};this.resetForm("queryForm");this.handleQuery();},

表单提交按钮:

javascript"> /** 提交按钮 */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);}},

自定义提示语样式

javascript"><style>.err {color: red;font-size: 12px;
}
</style>


http://www.ppmy.cn/news/1555486.html

相关文章

el-table实现多行合并、选择(解决合并导致的半选问题)、删除操作

背景 有个页面有这个需求&#xff0c;多行合并、编辑、删除、多选、header添加筛选条件 主要解决问题 表格多行合并解决合并导致的单选、多选和状态为半选的问题删除统一行数header筛选 没法给图&#xff0c;直接给代码 代码 <template><div><el-tableref…

Vue实训---6-完成用户退出操作

完成用户退出操作 1.在src\stores\index.js中添加退出登录方法 setToken(newToken) { this.token newToken; }, import { defineStore } from "pinia"; import { ref, computed, reactive } from "vue";// 你可以认为 state 是 store 的数据 (…

IDEA懒人必备插件:自动生成单元测试,太爽了!

今天来介绍一款工具Squaretest&#xff0c;它是一款自动生成单元测试的插件&#xff0c;会用到它也是因为最近公司上了代码质量管控的指标&#xff0c;会考评各个项目的单元测试覆盖率&#xff0c;以及sonar扫描出来的各种问题。 很多老项目老代码&#xff0c;或者着急交付的项…

【Linux基础】基本开发工具的使用

目录 一、编译器——gcc/g的使用 gcc/g的安装 gcc的安装&#xff1a; g的安装&#xff1a; gcc/g的基本使用 gcc的使用 g的使用 动态链接与静态链接 程序的翻译过程 1. 一个C/C程序的构建过程&#xff0c;程序从源代码到可执行文件必须经历四个阶段 2. 理解选项的含…

PostgreSQL JSON/JSONB 查询与操作指南

PostgreSQL 提供了强大的 JSON 和 JSONB 数据类型及相关操作&#xff0c;适用于存储和查询半结构化数据。本文将详细介绍其常用操作。 1. 基础操作 1.1 JSON 属性访问 ->: 返回 JSON 对象中的值&#xff0c;结果为 JSON 格式。 SELECT {"a": {"b": 1…

如何在服务器上安装 Maven

1. 安装Java Development Kit (JDK) 由于Maven依赖于Java运行环境&#xff0c;因此首先需要确保系统中已经安装了合适的JDK版本。 通过以下命令检查Java版本&#xff0c; java -version如果未安装JDK可以参考如何在服务器上安装 Java OpenJDK相关文档来安装特定版本的JDK。 …

HOW - PPT 制作系列(四)- 实践和技巧

目录 一、神器与技巧二、色彩的搭配三、图片的处理四、形状与图标五、字体的处理六、图表的制作七、总结/制作思维八、如何精简 ppt 内容我们 PPT 制作系列在之前已经介绍过: HOW - PPT 制作系列(一)- 一页ppt里要注意什么HOW - PPT 制作系列(二)- 三大技能HOW - PPT 制作…