基于vue+View UI的組織機構選擇

1、效果
在這里插入圖片描述
在這里插入圖片描述
1、代碼

<template><Button type="primary" @click="modal = true">點擊選擇</Button><div v-if="selectedArr.length > 0"><p>已選擇項:</p><div v-for="(item, index) in selectedArr" :key="index">{{ item.title }}</div></div><Modal width="600" v-model="modal" title="請選擇" @on-ok="ok" @on-cancel="cancel"><div class="tr-modal"><div class="org-tree"><div class="title"><span>組織機構</span><Input v-model="keyOrg" @on-change="onInput" placeholder="請輸入"></Input></div><Treeref="tree"class="tree-main"@on-check-change="onCheckChange":data="data"show-checkboxcheck-directlymultiple></Tree></div><div class="to-right"><Icon type="ios-arrow-forward" size="30" color="#1890ff" /></div><div class="select-con"><div class="title"><span>已選擇項</span></div><div class="to-right"><ul class="select-ul"><liv-for="(item, index) in selectedArr":key="index"@mouseenter="item.ishover = true"@mouseleave="item.ishover = false"@click="onDelete(index, item)"><span>{{ item.title }}</span><Icon v-if="item.ishover" type="md-close" size="20" color="#1890ff" /></li></ul></div></div></div></Modal>
</template>
<script>
export default {data() {return {modal: false,selectedArr: [],data: [{industryName: '農業、林業',node: 1,children: [{industryName: '農產品基地項目(含藥材基地)',children: [],id: '01--001',title: '01--001_農產品基地項目(含藥材基地)',industryState: '1',parentId: '01',industryCode: '01--001',},{industryName: '經濟林基地項目',children: [],id: '01--002',title: '01--002_經濟林基地項目',industryState: '1',parentId: '01',industryCode: '01--002',},],id: '01',title: '01_農業、林業',industryState: '1',parentId: null,industryCode: '01',},{industryName: '畜牧業',node: 1,children: [{industryName: '牲畜飼養;家禽飼養;其他畜牧業',children: [],id: '02--003',title: '02--003_牲畜飼養;家禽飼養;其他畜牧業',industryState: '1',parentId: '02',industryCode: '02--003',},],id: '02',title: '02_畜牧業',industryState: '1',parentId: null,industryCode: '02',},{industryName: '漁業',node: 1,children: [{industryName: '海水養殖',children: [],id: '03--004',title: '03--004_海水養殖',industryState: '1',parentId: '03',industryCode: '03--004',},{industryName: '內陸養殖',children: [],id: '03--005',title: '03--005_內陸養殖',industryState: '1',parentId: '03',industryCode: '03--005',},],id: '03',title: '03_漁業',industryState: '1',parentId: null,industryCode: '03',},],keyOrg: '',dataCp: [],}},methods: {ok() {this.$Message.info('Clicked ok')},cancel() {this.$Message.info('Clicked cancel')},onInput() {if (this.keyOrg) {let flattenTree = this.flattenTree(this.dataCp)let filterChildren = flattenTree.filter((el) => el.parentId && el.title.includes(this.keyOrg),)this.data = filterChildren} else {this.data = this.dataCp}},onDelete(index, item) {this.selectedArr.splice(index, 1)// 先扁平化let flattenTree = this.flattenTree(this.data)// 先根據parentId找到當前項的父節點let parent = flattenTree.find((el) => el.id == item.parentId)if (parent) {parent.checked = false}//   再取消勾選let checkItem = flattenTree.find((el) => el.id == item.id)checkItem.checked = false//   再還原成樹形結構this.data = this.unflattenTree(flattenTree)},onCheckChange(prev, curr) {// 選中if (curr.checked) {// 選中的節點沒有子節點(選中一個)if (curr.children.length === 0) {curr.ishover = falsethis.selectedArr.push(curr)} else {// 選中的節點有子節點(選中一個,然后勾選其子節點)curr.children.forEach((el) => {el.ishover = false})this.selectedArr.push(...curr.children)}} else {// 選中的節點沒有子節點(選中一個)if (curr.children.length === 0) {// 取消let index = this.selectedArr.findIndex((item) => item.id == curr.id)// 刪除已選項this.selectedArr.splice(index, 1)} else {curr.children.forEach((el) => {// 取消let index = this.selectedArr.findIndex((item) => item.id == el.id)// 刪除已選項this.selectedArr.splice(index, 1)})}}},// 扁平化樹形數據flattenTree(treeData) {const result = []function flatten(node) {// 創建新節點對象(淺拷貝,避免修改原對象)const newNode = { ...node }// 如果有子節點,先遞歸處理子節點if (Array.isArray(newNode.children) && newNode.children.length > 0) {// 臨時保存子節點引用const children = newNode.children// 移除children屬性(根據需求可選)delete newNode.children// 將當前節點加入結果result.push(newNode)// 遞歸處理子節點children.forEach((child) => flatten(child))} else {// 無子節點直接加入結果result.push(newNode)}}// 遍歷所有根節點treeData.forEach((root) => flatten(root))return result},// 將扁平數據還原為樹形結構unflattenTree(flatData) {// 創建ID映射字典和結果集const nodeMap = {}const roots = []// 第一遍遍歷:創建所有節點的映射flatData.forEach((node) => {nodeMap[node.id] = { ...node, children: [] }})// 第二遍遍歷:構建樹形結構flatData.forEach((node) => {const currentNode = nodeMap[node.id]if (node.parentId) {// 找到父節點并添加到其childrenconst parent = nodeMap[node.parentId]if (parent) {parent.children.push(currentNode)}} else {// 根節點roots.push(currentNode)}})return roots},},mounted() {this.dataCp = JSON.parse(JSON.stringify(this.data))},
}
</script><style lang="scss" scoped>
.tr-modal {display: flex;height: 400px;.org-tree {width: 260px;height: 100%;border: 1px solid #d9d9d9;}.to-right {display: flex;align-items: center;margin: 0 5px;cursor: pointer;}.select-con {width: 260px;border: 1px solid #d9d9d9;}.title {height: 32px;display: flex;align-items: center;border-bottom: 1px solid #d9d9d9;span {display: flex;font-size: 14px;color: #1890ff;justify-content: center;align-items: center;width: 70px;font-weight: 700;}:deep(.ivu-input-wrapper) {flex: 1;width: auto;}}.tree-main {height: calc(100% - 32px);overflow-y: auto;}.select-ul {width: 100%;li {padding: 0 5px;height: 24px;display: flex;align-items: center;font-size: 14px;justify-content: space-between;margin: 4px 0;background-color: #eee;span {width: 90%;overflow: hidden;white-space: nowrap;}}}
}
</style>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/89166.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/89166.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/89166.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

人大金倉Kingbase數據庫KSQL 常用命令指南

人大金倉Kingbase數據庫KSQL 常用命令指南 1. 連接與基本操作 1.1 連接數據庫 # 基礎語法 ksql -U 用戶名 -d 數據庫名 -h 主機名 -p 端口號 # 示例 ksql -U system -d testdb -h 127.0.0.1 -p 543211.2 執行SQL腳本 # 基礎語法 ksql -U <用戶名> -W -f <SQL腳本文…

從萌芽到領航:廣州華銳互動的 AR 奮進之路?

在 AR 技術這片充滿無限可能的領域中&#xff0c;廣州華銳互動數字科技有限公司宛如一顆耀眼的新星&#xff0c;熠熠生輝。廣州華銳互動成立于 2008 年&#xff0c;在那個 AR 技術尚處于萌芽階段、大眾認知度還較低的時期&#xff0c;廣州華銳互動便憑借著前瞻性的戰略眼光和對…

redisson看門狗實現原理

Redisson 看門狗&#xff08;Watch Dog&#xff09;機制實現原理 Redisson 的 Watch Dog 機制是分布式鎖的核心組件之一&#xff0c;用于 自動續期 鎖的過期時間&#xff0c;防止業務邏輯執行時間超過鎖的持有時間&#xff0c;導致鎖提前釋放而引發并發問題。以下是其實現原理…

C++中explicit詳解

文章目錄 1. **防止隱式類型轉換**示例1&#xff1a;沒有使用explicit示例2&#xff1a;使用explicit 2. **防止拷貝初始化**示例1&#xff1a;沒有使用explicit示例2&#xff1a;使用explicit 3. **防止隱式類型轉換的鏈式調用**示例1&#xff1a;沒有使用explicit示例2&#…

代碼部落 20250629 CSP-J復賽 模擬賽

網址&#xff1a;代碼部落 一&#xff1a; 相濡以沫 β&#xff08;代碼請自寫&#xff09; 簽到題&#xff0c;如果a[i]<a[i1] a[i]a[i1],反之&#xff0c;直接輸出No 二 共同富裕&#xff08;代碼請自寫&#xff09; 簽到題&#xff0c;用sort前綴和 如果最富有的個…

零基礎學習RabbitMQ(5)--工作模式(1)

在前面的章節中我們簡單介紹過一些RabbitMQ的工作模式&#xff0c;RabbitMQ共提供了七種工作模式進行消息傳遞&#xff0c;這里我們來詳細介紹。 1. Simple(簡單模式) P&#xff1a;生產者 C&#xff1a;消費者 特點&#xff1a;一個生產者一個消費者&#xff0c;消息只能被…

Android Liunx ffmpeg交叉編譯

本文的交叉編譯在window上安裝VMware&#xff0c;使用Ubuntu20.4進行的編譯。 一、安裝NDK&#xff1a; 1、下載解壓&#xff1a; 在NDK 下載 | Android NDK | Android Developers下載Liunx平臺的NDK。 本人下載的是android-ndk-r27c-linux.zip版本的。 解壓android-ndk-r…

極海G32R501雙向數字電源解決方案 賦能AI服務器及電源應用創新

6月26日&#xff0c;Big-Bit商務網主辦的2025中國電子熱點解決方案創新峰會在東莞召開&#xff0c;峰會以“核心智變、能效躍遷”為主題&#xff0c;聚焦光儲充、800V超充、AI服務器、BMS、智能汽車照明與汽車中小電機電控應用。 峰會期間&#xff0c;珠海極海半導體有限公司&a…

【修電腦的小記錄】連不上網

問題概述 問題表現為&#xff1a;電腦連接網絡后&#xff0c;顯示已連接但無法上網。 環境信息&#xff1a; - DNS 修改無效&#xff0c;ping 外網&#xff08;8.8.8.8&#xff09;失敗 - 嘗試重置網絡參數、多種命令無果 &#x1f50d; 排查過程 1. 執行以下命令重置網絡&a…

QT中QSS樣式表的詳細介紹

轉自個人博客 **Qt樣式表&#xff08;Qt Style Sheets&#xff0c;簡稱QSS&#xff09;**是一種類似于HTML中的CSS&#xff08;層疊樣式表&#xff09;的機制&#xff0c;用于自定義Qt應用程序的外觀。通過QSS&#xff0c;開發者可以輕松地修改控件的外觀&#xff0c;而無需更改…

Spring 依賴注入:官方推薦方式及最佳實踐

Spring 依賴注入&#xff1a;官方推薦方式及最佳實踐 你正在遭遇以下困境嗎&#xff1f; 項目變大后&#xff0c;依賴關系像一團亂麻&#xff0c;牽一發而動全身&#xff1f;單元測試難如登天&#xff0c;被迫啟動整個Spring容器&#xff1f;NullPointerException 總在運行時突…

javaweb聽課筆記day1

MySQL數據模型 關系型數據庫: 通過表來存儲數據 關系型數據庫是建立在關系模型基礎上的數據庫&#xff0c;簡單說&#xff0c;關系型數據庫是由多張能互相連接的二維表組成的數據庫 優點: 都是使用表結構&#xff0c;格式一致&#xff0c;易于維護;使用通用的SQL語言操作…

《從量子奇境到前端優化:解鎖卡西米爾效應的隱藏力量》

卡西米爾效應由荷蘭物理學家亨德里克卡西米爾于1948年提出&#xff0c;它源于量子場論中“真空不空”的奇異觀點。在傳統認知里&#xff0c;真空是一片虛無&#xff0c;但量子理論指出&#xff0c;真空中充滿了持續漲落的能量&#xff0c;即零點能。想象有兩片中性的金屬板被放…

【學習筆記】強化學習的數學原理

軟活硬整&#xff0c;納什又把RL翻出來講了一遍&#xff0c;我以為是溫故而知新&#xff0c;原來是在賣書。 不過溫故而知新還是沒啥毛病的。 PS&#xff1a;今天裝Notepad時看到的&#xff0c;我還以為現在連用個Notepad都要給天線寶寶們捐款了。 文章目錄 PART 11 overview…

深入“火星棒球數據API”:用數據解鎖棒球世界的無限可能

在棒球運動日益數據化的今天&#xff0c;高效獲取和處理海量比賽信息已成為球隊制勝、媒體解讀、球迷深入理解比賽的關鍵。“火星棒球數據API” 應運而生&#xff0c;成為連接棒球智慧與大數據技術的橋梁。本文將探討這一API的核心價值、功能亮點及其如何重塑我們體驗和分析棒球…

[附源碼+數據庫+畢業論文]基于Spring+MyBatis+MySQL+Maven+jsp實現的校園服務平臺管理系統,推薦!

摘 要 現代經濟快節奏發展以及不斷完善升級的信息化技術&#xff0c;讓傳統數據信息的管理升級為軟件存儲&#xff0c;歸納&#xff0c;集中處理數據信息的管理方式。本校園服務平臺管理系統就是在這樣的大環境下誕生&#xff0c;其可以幫助管理者在短時間內處理完畢龐大的數據…

「Java EE開發指南」如何用MyEclipse創建一個WEB項目?(三)

在本文中&#xff0c;您可以找到有關WEB項目的信息。將了解&#xff1a; Web項目結構和參數Web開發生產力工具JSP代碼完成和驗證 這些特性在MyEclipse中可用。在上文中&#xff08;點擊這里回顧>>&#xff09;&#xff0c;我們為大家介紹了Web開發效率工具、Web項目參數…

笨方法學python -練習6

程序&#xff1a; print("Mary had a little lamb.") print("Its fleece was white as {}.".format(snow)) print("And everywhere that Mary went.") print("." * 10) # what′d that do? end1 "C" end2 "h&qu…

【MySQL】Binlog文件占用空間比較大,如何清理

一、前言 在進行一次數據導入之后&#xff0c;發現服務器磁盤爆滿&#xff0c;初步判斷是數據庫產生了大量binlog所致&#xff0c;接下來進行分析處理。 二、分析 1、查看磁盤空間 通過df -h命令&#xff0c;查看磁盤空間占用情況 2、查找占用文件或目錄 通過命令&#xff1a;…

車載診斷架構 --- 非易失性存儲器(NVM)相關設置項

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 做到欲望極簡,了解自己的真實欲望,不受外在潮流的影響,不盲從,不跟風。把自己的精力全部用在自己。一是去掉多余,凡事找規律,基礎是誠信;二是…