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
英文地址,請注明出處:http://en.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 …