Vue + Element UI 实现选框联动进而动态控制选框必填

目录

一. 需求描述

二. 解决思路

三. 代码实现

四. 效果展示


一. 需求描述

如下图所示,新增人员页面,有字段"Leader DS"和"Leader DS名称"。

现在我要在字段"Leader DS"和"Leader DS名称"字段下方再添加一个新的字段叫"TL OR生效日",并根据以下情况来判断是否必填。

情况一:若"Leader DS"和"Leader DS名称"字段值均不为空,则新增字段"TL OR生效日"设置为必填,并默认填充当前日期;

情况二:若"Leader DS"和"Leader DS名称"字段值为空,则新增字段"TL OR生效日"设置为非必填,并不再默认填充日期值;

二. 解决思路

既然我们使用了Vue + Element UI的框架,相对来讲就比较容易了;

首先第一步:编写"TL OR生效日"字段的 Vue 代码;

注解使用Element UI的组件库,组建的使用方法如下所示

// el-form 表单标签(表单容器)
// ref="xxx": 注册表单引用,用于通过 this.$refs.xxx 访问表单方法(如验证提交)
// :model="xxx": 绑定表单数据对象(Vue 的 xxx 数据)
// :rules="xxx": 绑定表单验证规则对象(这里绑定的规则通常是恒定不改变的,必填就是必填,非必填就是非必填)
<el-form ref="xxx" :model="xxx" :rules="xxx" label-width="200px">// 行标签(行容器)// 作用:创建一行布局容器(基于 24 分栏的栅格系统),通常放在表单标签内部,一张表单会有很多行数据,每一对 el-row 标签就是一行   <el-row>    <!--列标签(列容器),有行就会有列,列标签必须写在行标签的内部!!!--><!--:span="xxx"标识当前列占用的行宽度比例,上面说到了一行分为24等比例--><!--所以如果希望一行有四列,则:span="6";如果希望三列,则:span="8",平分24即可,也可不平分,一列 :span="16",另一列 :span="8"--><el-col :span="xxx"><!--表单项容器,item 内部就是我们来定义各种组件的地方,例如input组件,button组件等--><!--:label="xxx" 就是当前列的标签名称--><!--prop="xxx" 指定验证规则对应的字段名(需与 personnelRules 中的键匹配)--><!--通常表单:rules="xxx"定义的是一个对象,对象内部就是一个个具体的字段校验规则--><!--假设:rules="AAA",内部定义了aaa,bbb,ccc三个字段校验,则当前prop="AAA.ccc"--><el-form-item :label="xxx" prop="xxx"><!--v-model绑定值,如果表单z上为:model="person",内部有多个属性如name,age...--><!--则当前输入框是什么值,就绑定对应的值--><el-input v-model="person.xxx" /></el-form-item></el-col></el-row>
</el-form>

其次第二步:编写字段必填校验规则;

必填校验的方法常用的有以下两种

第一种:也是上面提到的,写在统一的父表单校验规则对象中,然后使用对象.属性校验的方式将校验规则绑定到对应的字段;如下代码所示

return {formRules:{userName: { required: true, message: this.$t('common.required') }, // 用户名email: [{ required: true, message: this.$t('common.required') }, { validator: validateEmail }], // 邮箱tlOrEffectDate: { required: true, message: this.$t('common.required') }, // TL OR生效......}
}

第二种: 在 Vue 的 data 或 computed 中定义规则,这种通常使用函数,函数返回值为必填属性了如下代码所示

computed: {tlOrEffectDateRule() {// 代码逻辑,各种计算,得出字段必填属性return ......}
}

最后第三步:将字段必填校验规则绑定在 Vue 代码字段上;

这一步是最简单的,完成第一步或第二步,只需要将定义好的属性或函数绑定到对应的字段即可;如下代码所示

// 第一种方案绑定字段属性
<el-form-item :label="TL OR生效日" :rules="formRules.tlOrEffectDate" prop="tlOrEffectDate"><el-date-pickerv-model="personnel.tlOrEffectDate" />
</el-form-item>// 第二种方案绑定字段属性
<el-form-item :label="TL OR生效日" :rules="tlOrEffectDateRule" prop="tlOrEffectDate"><el-date-pickerv-model="personnel.tlOrEffectDate" />
</el-form-item>

三. 代码实现

<!-- LeaderDS-->
<el-row><el-col v-if="this.personnel.personTypeId === 'DS'" :span="12"><el-form-item  :label="$t('personnel.newstaff.tlManager')" prop="tlManager"><code-searchv-model="personnel.tlManager"show-code:show-name="false"code-type="Person":other-conditions="{leaderDS: '1',personTypeId:'DS'}"@change="refFillManager('', ...arguments)"/></el-form-item></el-col><el-col v-if="this.personnel.personTypeId === 'DS'" :span="12"><el-form-item :label="$t('personnel.newstaff.tlManagerName')" prop="tlManager"><code-searchref="tlManagerName"v-model="personnel.tlManager"code-type="Person":other-conditions="{leaderDS: '1',personTypeId: 'DS'}"@change="refFillManager('', ...arguments)"/></el-form-item></el-col>
</el-row>
// 编写要新增的字段 TL OR生效日 值
<!-- TL OR生效日 -->
<el-row><el-col :span="12" v-if="this.personnel.personTypeId === 'DS'"><el-form-item :label="$t('personnel.newstaff.tlOrEffectDate')" :rules="tlOrEffectDateRules" prop="tlOrEffectDate"><el-date-pickerv-model="personnel.tlOrEffectDate"value-format="yyyy-MM-dd"type="date":placeholder="$t('personnel.newstaff.optiondate')" /></el-form-item></el-col>
</el-row>// 初始化定义一个存储表单所有元素值的对象
const newstaffperson = {// 这里定义页面上的所有字段值,为了美观简洁,只展示上面代码中相关的字段值,其余字段省略....tlManager: '', //  TL经理tlOrEffectDate: null, // TL OR生效日
}
// 在 vue 的 return 方法中,调用调用深拷贝方法,创建另外一个独立的新的数据备份,防止响应式数据被意外修改
return {personnel: _.cloneDeep(newstaffperson),
}// 在 Vue 的 data 或 computed 中定义规则,因为我们要新增的字段,必填不是固定的,而是随着其其他字段动态控制是否必填
computed: {// 定义 tlOrEffectDateRules 函数,采用动态函数计算属性的方法为其设置必填属性,将函数绑定到添加的字段"TL OR生效日"的属性:rules上tlOrEffectDateRules() {const isRequired = this.personnel.tlManager !== null && this.personnel.tlManager.trim() !== '';return isRequired? { required: true, message: this.$t('common.required') } // tlManager 值不为空,必填,显示星号: {}; // tlManager 值为空,非必填,返回空数组.表示:无校验规则 => 不显示星号}
},

四. 效果展示

 OK,编写完毕代码,我们进入页面

情况一测试:如下图,我选择任意一个Leader DS,然后可以看到我添加的新字段"TL OR生效日"已经出现了星号必填;

现在我手动删除日期,可以看到已经报出必填校验了

 

情况二测试:如下图,我将刚才选择的"Leader DS"赋值为空值,可以看到,新添加的字段"TL OR生效日"必填星号样式也没有出现,也没有提示我们该字段必填,这就实现了根据"Leader DS"是否为空动态控制"TL OR生效日"字段是否必填。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/88547.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/88547.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高通SG882G平台(移远),Ubuntu22编译:1、下载代码

不要使用Ubuntu24&#xff0c;不稳定。 docker听着美好&#xff0c;其实也有问题。比如你给别人的时候&#xff0c;虚拟机直接给过去&#xff0c;马上就能用。 安装工具 sudo apt-get install -y \ diffstat xmlstarlet texinfo chrpath gcc-aarch64-linux-gnu libarchive-d…

Android音视频探索之旅 | C++层使用OpenGL ES实现视频渲染

一.前言 在学习音视频的过程中&#xff0c;实现视频渲染是非常常见的&#xff0c;而渲染的方式也挺多&#xff0c;可以使用Java层的OpenGL ES进行图形渲染&#xff0c;也可以使用Ffmpeg来显示&#xff0c;还有就是通过C层的OpenGL ES来进行渲染。OpenGL ES是OpenGL三维图形API…

公链的主要特征有哪些?

公链&#xff08;公共区块链&#xff09;是指对所有人开放、无需授权即可参与的区块链&#xff0c;其主要特征包括&#xff1a;- 开放性&#xff1a;任何人都可以自由加入网络&#xff0c;参与节点运行、数据验证或交易&#xff0c;无需经过中心化机构的审核。- 去中心化&#…

博途多重背景、参数实例--(二)

引用官方技术支持&#xff1a; 《《 博图&#xff0c;怎么把DINT类型转换成TIME&#xff0c;就是MCGS触摸屏上设置时间&#xff0c;PLC里的定时器TIME 》》 我们把上面的实现&#xff0c;封装成FC,FB块&#xff08;FB程序内调用定时器指令时的选项不…

单片机基础

什么是嵌入式系统&#xff1f; 嵌入式系统通常指的是专门为某种功能设计的微型计算机系统&#xff0c;比如智能手表、家电控制板、汽车ECU等。 什么是嵌入式系统的IO&#xff1f; IO&#xff08;Input/Output&#xff0c;输入/输出&#xff09;就是嵌入式系统与外部世界“交…

全连接神经网络(MLP)原理与PyTorch实现详解

一、全连接神经网络概述全连接神经网络(Fully Connected Neural Network)&#xff0c;也称为多层感知机(Multi-Layer Perceptron, MLP)&#xff0c;是深度学习中最基础的神经网络结构之一。它由多个全连接层组成&#xff0c;每一层的神经元与下一层的所有神经元相连接。1.1 神经…

推荐系统-数据分割、性能验证

推荐系统基础概念前言 作者根据开源项目 gorse 的每一步提交&#xff0c; 系统性学习推荐系统架构组成以及gorse中使用的推荐算法的实现。 通过参考算法文档以及代码实现&#xff0c;作者对gorse的学习过程以及进度 与 博客发布的时间线保持一致数据集分割原因 推荐系统的根本任…

从电商新手到单日变现5000+,我是如何做到闲鱼爆单的

很多人想做项目赚钱&#xff0c;却总是迈不出第一步。今天给大家分享一个可以从电商小白到成功跑通项目&#xff0c;实现单日GMV 5000的项目。今天将分享从选品、内容制作、销售服务的全过程实战经验。1&#xff1a;闲鱼实战&#xff0c;强执行力01实操前的准备执行力就是你的动…

vue3实现pdf文件预览 - vue-pdf-embed

参考地址&#xff1a;https://juejin.cn/post/7105933034771185701 这个参考文章的代码直接可以复制使用&#xff0c;样式也是给到的&#xff0c;但是实现的是一页一页的显示pdf内容&#xff0c;我的需求是要全部展示出来&#xff0c;页码切换时是做一个滚动定位操作。 思路&am…

【AI论文】OmniPart:基于语义解耦与结构连贯性的部件感知三维生成

摘要&#xff1a;创建具有显式、可编辑部件结构的三维资产&#xff0c;对于推动交互式应用的发展至关重要。然而&#xff0c;大多数生成方法仅能生成整体式形状&#xff0c;限制了其实际应用价值。我们提出OmniPart——一种新型的部件感知三维物体生成框架&#xff0c;旨在实现…

Pandas-数据查看与质量检查

Pandas-数据查看与质量检查一、数据查看&#xff1a;快速掌握数据概况1. 整体概览&#xff1a;shape与info()2. 数值特征预览&#xff1a;describe()3. 随机抽样&#xff1a;head()与sample()二、数据质量检查&#xff1a;识别与处理问题1. 缺失值检查与处理处理策略&#xff1…

类和对象拓展——日期类

一.前言通过前面对类和对象的学习&#xff0c;现在我们可以开始实践日期类的代码编写。在实际操作过程中&#xff0c;我会补充之前文章中未提及的相关知识点。二.正文 1. 日期类代码实现我们先来看看要实现什么功能吧&#xff0c;把他放在Date.h中#pragma once #include<ios…

大模型KV缓存量化误差补偿机制:提升推理效率的关键技术

大模型KV缓存量化误差补偿机制&#xff1a;提升推理效率的关键技术摘要 随着大型语言模型&#xff08;LLM&#xff09;参数规模突破千亿级别&#xff0c;推理过程中的显存占用与计算延迟成为制约其实际部署的核心瓶颈。KV缓存&#xff08;Key-Value Cache&#xff09;作为Trans…

QT跨平台应用程序开发框架(6)—— 常用显示类控件

目录 一&#xff0c;Label 1.1 主要属性 1.2 文本格式 1.3 设置图片 1.4 其它常用属性 1.5 设置伙伴 二&#xff0c;LCD Number 2.1 主要属性 2.2 实现倒计时 ​2.3 两个问题 三&#xff0c;ProgressBar 3.1 主要属性 3.2 进度条按时间增长 3.3 改变样式 3.4 一个问题 四&#…

LINUX文件系统权限,命令解释器alias,文件查看和查找

1、文件査看:查看/etc/passwd文件的第5行[rootserver ~]# head -5 /etc/passwd | tail -1 #先找到前5行&#xff0c;用管道符过滤&#xff0c;显示倒数第一行2、文件查找(1)在当前目录及子目录中&#xff0c;查找大写字母开头的txt文件[rootserver ~]# find / -name "[…

AI图像修复工具CodeFormer实测:马赛克去除与画质增强效果评测

大家好&#xff01;平时看图片或视频&#xff0c;是不是特别烦人脸被马赛克遮住的地方&#xff1f;比如老照片模糊、视频关键部分被打码&#xff0c;看着很不舒服。今天给大家分享一款超好用的去马赛克神器——CodeFormer&#xff0c;完全免费&#xff0c;新手也能轻松搞定&…

知识宇宙-思考篇:AI大模型如何重塑软件开发流程?

名人说&#xff1a;博观而约取&#xff0c;厚积而薄发。——苏轼《稼说送张琥》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录AI大模型重塑软件开发&#xff1a;从码农到AI编程伙伴的华丽转身一、AI大模型的编程&…

Rocky Linux上使用NVM安装Node.js 18

问题描述 Rocky Linux 9 默认 yum 安装的 Node.js 版本是16&#xff0c;vite启动报错&#xff1a;TypeError: crypto$2.getRandomValues is not a function &#xff0c;需安装更高版本的 Node.js 使用nvm安装Node.js的好处 多版本管理&#xff0c;NVM 允许你安装多个不同版本的…

JVM 中“对象存活判定方法”全面解析

1. 前言 在 Java 开发过程中&#xff0c;我们常常听到“垃圾回收”&#xff08;Garbage Collection, GC&#xff09;这一术语。JVM 通过垃圾回收机制自动管理内存&#xff0c;极大地简化了程序员的内存控制负担。然而&#xff0c;GC 究竟是如何判断哪些对象该回收、哪些应保留…

苹果公司高ROE分析

公司通过增加负债提升净资产收益率&#xff08;ROE&#xff09;的核心机制在于财务杠杆效应和资本结构优化&#xff0c;以下从原理、操作路径、风险边界及苹果案例四维度展开分析&#xff1a;名称解释&#xff1a; ROIC(投入资本回报率)&#xff1a;ROICNOPATInvested Capital …