element-ui自制樹形穿梭框

1、需求

由于業務特殊需求,想要element穿梭框功能,數據是二級樹形結構,選中左邊數據穿梭到右邊后,左邊數據不變。多次選中左邊相同數據進行穿梭操作,右邊數據會多次增加相同的數據。右邊數據穿梭回左邊時,右邊數據會減少,左邊數據仍然保持不變。總的來說就是左邊數據一直保持不變,右邊數據會隨著穿梭操作增加或減少,相同數據可以多次添加。(這個需求太特殊了,沒辦法用組件tree-transfer實現,于是自制了樹形穿梭框,記錄一下)

2、上代碼

 <template><el-dialog title="數據選擇" :visible.sync="TransferTreeBoxShow"  width="1500px"  :before-close="handleClose"><div class="TransferTreeBox"><div class="leftSelect"><!-- 左側待選內容 --><div class="SelectBox"><div class="boxTitle">X軸待選 </div><div class="boxCenter"><el-treeref="beforeTree":data="fromData":props="defaultProps"show-checkbox:filter-node-method="beforeFilterNode":accordion="true"node-key="id"/></div></div><!-- 中間穿梭按鈕 --><div class="transferBtn"><div class="pickBtn" @click="towardsRight">&gt;&gt;</div><div class="pickBtn" @click="towardsLeft">&lt;&lt;</div></div><!-- 右側已選內容 --><div class="SelectBox"><div class="boxTitle">X軸已選</div><div class="boxCenter"><el-treeref="afterTree":data="fromData2":props="defaultProps"show-checkbox:filter-node-method="afterFilterNode"node-key="id"/></div></div></div></div>
</el-dialog></template><script>
export default {data () {return {TransferTreeBoxShow:false,defaultProps: {children: "children",label: "label"},beforeKeyarr: [],afterKeyarr: [],fromData2:[],fromData: [{"id": "1","pid": "0","label": "一級","children": [{"id": "1-1","pid": "1","label": "1-1級","children": []},{"id": "1-2","pid": "1","label": "1-2級","children": []},{"id": "1-3","pid": "1","label": "1-3級","children": []},{"id": "1-4","pid": "1","label": "1-4級","children": []},{"id": "1-5","pid": "1","label": "1-5級","children": []}]},{"id": "2","pid": "0","label": "二級","children": [{"id": "2-1","pid": "2","label": "2-1級","children": []},{"id": "2-2","pid": "2","label": "2-2級","children": []},{"id": "2-3","pid": "2","label": "2-3級","children": []}]},{"id": "3","pid": "0","label": "三級","children": [{"id": "3-1","pid": "3","label": "3-1級","children": []},{"id": "3-2","pid": "3","label": "3-2級","children": []},{"id": "3-3","pid": "3","label": "3-3級","children": []},{"id": "3-4","pid": "3","label": "3-4級","children": []},{"id": "3-5","pid": "3","label": "3-5級","children": []},{"id": "3-6","pid": "3","label": "3-6級","children": []},{"id": "3-7","pid": "3","label": "3-7級","children": []}]}]};},methods: {handleClose(done) {this.$confirm("確認關閉?").then((_) => {done();}).catch((_) => { });},// 點擊向右穿梭towardsRight(){let currentBeforeKeyarr = this.$refs.beforeTree.getCheckedNodes(true);for(var i=0;i<currentBeforeKeyarr.length;i++){for(var j=0;j<this.fromData.length;j++){var children=this.fromData[j].children;if(children.length>0){if(children.includes(currentBeforeKeyarr[i])){var father=this.fromData[j];var index=-1;for(var k=0;k<this.fromData2.length;k++){if(father.id==this.fromData2[k].id){index=k;break;}}if(index!=-1){var childrenOld=this.fromData2[index].children;var child={id:Math.random(),label:currentBeforeKeyarr[i].label,pid:currentBeforeKeyarr[i].pid,children:[]} childrenOld.push(child);var newChildren=[];newChildren=newChildren.concat(childrenOld)this.fromData2[index].children=newChildren;}else{var newFather={id:father.id,label:father.label,pid:father.pid,children:[]}    newFather.children.push(currentBeforeKeyarr[i]);this.fromData2.push(newFather);}break;}                   }}}},// 點擊向左穿梭towardsLeft(){this.afterKeyarr = this.$refs.afterTree.getCheckedNodes(true);for(var i=0;i<this.afterKeyarr.length;i++){for(var j=0;j<this.fromData2.length;j++){var children=this.fromData2[j].children;for(var k=0;k<children.length;k++){if(this.afterKeyarr[i].id==children[k].id){children.splice(k, 1);k--;break;}}if(children.length==0){this.fromData2.splice(j, 1);j--;}}}},// 過濾beforeFilterNode(value, data) {if (!value) {return true;}return value.indexOf(data.id) < 0;},afterFilterNode(value, data){if (!value) {return false;}return value.indexOf(data.value) !== -1;},}
};
</script><style lang="scss" scoped>.TransferTreeBox  .SelectBox{border: 1px solid #ccc;height: 100%;width: 40%;color: #fff;position: relative;
}
.TransferTreeBox  .SelectBox        .boxTitle{background: #a0cfff;height: 30px;line-height: 30px;text-align: center;border-bottom: 1px solid #ccc;}.TransferTreeBox  .SelectBox       .boxCenter{height: 100%;width: 100%;max-height: 508px;overflow-y: scroll;}.TransferTreeBox .transferBtn{position: relative;display: flex;flex-direction: column;align-items: center;justify-content: center;width: 20%;}.TransferTreeBox .transferBtn  .pickBtn{height: 30px;width: 50px;background: #a0cfff;color: #fff;font-weight: 700;font-size: 20px;border-radius: 5px;margin-top: 10px;text-align: center;line-height: 30px;cursor: pointer;}/deep/.TransferTreeBox .boxTitle {color: #77F7FF;background-color: #021F99; /* 深藍背景 */
}/deep/.TransferTreeBox .SelectBox .boxTitle {color: #77F7FF;/* background-color: #021F99; 深藍背景 */background-color: rgba(0, 0, 0, 0); /*透明背景 */
}
/deep/.TransferTreeBox .el-tree-node__content{color: #77F7FF;background-color: #021F99; /* 深藍背景 */
}
/deep/.TransferTreeBox .el-tree__empty-block{color: #77F7FF;background-color: #021F99; /* 深藍背景 */
}
/deep/.TransferTreeBox .el-tree__empty-text{color: #5378F5;
}.TransferTreeBox {height: 600px;color: #FFFFFF !important;font-size: 20px;width: 100%;display: flex;flex-wrap: wrap;
}/deep/ .el-dialog {background: transparent;background-image: url("../../assets/boardback.png");background-size: cover;
}
/deep/ .el-dialog__title {color: #fff;
}
/deep/ .el-dialog__headerbtn .el-dialog__close {color: #fff;
}
.rightSelect{width: 48%;height: 90%;display: flex;flex-wrap: wrap;margin-left:3%;
}
.leftSelect{width: 48%;height: 90%;display: flex;flex-wrap: wrap;
}.TransferTreeBox .Correlation-bottom{margin-top:2%;width: 100%;height: 10%;margin-left: 44%;
}</style>

3、效果圖

![在這里插入圖片描述](https://i-blog.csdnimg.cn/direct/a5bd057007dd4b68847a27c8dac2cfa0.png

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

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

相關文章

WPS宏開發手冊——Excel實戰

目錄 系列文章5、Excel實戰使用for循環給10*10的表格填充行列之和使用for循環將10*10表格中的偶數值提取到另一個sheet頁使用for循環給寫一個99乘法表按市場成員名稱分類&#xff08;即市場成員A、B、C...&#xff09;&#xff0c;統計月內不同時間段表1和表2的乘積之和&#x…

計算機網絡-TCP的流量控制

內容來源&#xff1a;小林coding 本文是對小林coding的TPC流量控制的精簡總結 什么是流量控制 發送方不能無腦的發數據給接收方&#xff0c;要考慮接收方處理能力 如果一直無腦的發數據給對方&#xff0c;但對方處理不過來&#xff0c;那么就會導致觸發重發機制 從而導致網…

Spring Boot 七種事務傳播行為只有 REQUIRES_NEW 和 NESTED 支持部分回滾的分析

Spring Boot 七種事務傳播行為支持部分回滾的分析 支持部分回滾的傳播行為 REQUIRES_NEW&#xff1a;始終開啟新事務&#xff0c;獨立于外部事務&#xff0c;失敗時僅自身回滾。NESTED&#xff1a;在當前事務中創建保存點&#xff08;Savepoint&#xff09;&#xff0c;可局部…

突破反爬困境:SDK開發,瀏覽器模塊(七)

聲明 本文所討論的內容及技術均純屬學術交流與技術研究目的&#xff0c;旨在探討和總結互聯網數據流動、前后端技術架構及安全防御中的技術演進。文中提及的各類技術手段和策略均僅供技術人員在合法與合規的前提下進行研究、學習與防御測試之用。 作者不支持亦不鼓勵任何未經授…

C++數據排序( 附源碼 )

一.冒泡排序 原理:自左向右依次遍歷,若相鄰兩數順序錯誤,則交換兩數. 這樣,每一輪結束后,最大/最小的數就會到最后. Code: #include <iostream> #include <cstdio> using namespace std; const int N1e51; int n,a[N],in; void PrintArray(int a[],int n){for…

I2C 讀寫 AT24C02

根據AT24C02的 Datasheet 可知AT24C02有2K bit&#xff0c;即256B&#xff0c;分為32頁,每頁8個字節&#xff0c;結合數據手冊和原理圖可以得知&#xff0c;板載AT24C02的讀地址為0xA2&#xff0c;寫地址為0xA3&#xff1a; #define AT24C02_ADDR_WRITE 0xA2 #define AT24C02_…

K8S學習之基礎七十四:部署在線書店bookinfo

部署在線書店bookinfo 在線書店-bookinfo 該應用由四個單獨的微服務構成&#xff0c;這個應用模仿在線書店的一個分類&#xff0c;顯示一本書的信息&#xff0c;頁面上會顯示一本書的描述&#xff0c;書籍的細節&#xff08;ISBN、頁數等&#xff09;&#xff0c;以及關于這本…

Linux 查找文本中控制字符所在的行

參考資料 ASCIIコード表 目錄 一. 業務背景二. 遇到的問題三. 分析3.1 url編碼的前置知識3.2 出現控制字符的transactionid分析3.3 16進制分析 四. 從文本中查找控制字符所在的行五. 控制字符一覽 一. 業務背景 ?在項目中&#xff0c;業務請求對應著下URL http://www.test.…

python將pdf文件轉為圖片,如果pdf文件包含多頁,將轉化的多個圖片通過垂直或者水平合并成一張圖片

要將PDF文件轉換為圖片&#xff0c;并將多頁PDF垂直合并成一張圖片&#xff0c;可以使用PyMuPDF&#xff08;也稱為fitz&#xff09;庫來讀取PDF文件&#xff0c;并使用Pillow庫來處理和合并圖片。以下是一個示例代碼&#xff0c;展示了如何實現這個功能&#xff1a; 首先&…

HarmonyOS 基礎組件和基礎布局的介紹

1. HarmonyOS 基礎組件 1.1 Text 文本組件 Text(this.message)//文本內容.width(200).height(50).margin({ top: 20, left: 20 }).fontSize(30)//字體大小.maxLines(1)// 最大行數.textOverflow({ overflow: TextOverflow.Ellipsis })// 超出顯示....fontColor(Color.Black).…

FrameWork基礎案例解析(四)

文章目錄 單獨拉取framework開機與開機動畫橫屏Android.mk語法單獨編譯SDKmake 忽略warning單獨修改和編譯Camera2單獨編譯Launcher3Android Studio 導入、修改、編譯Settings導入 Android Studio 導入、修改、編譯Launcher3android 開機默認進入指定Launcher植入自己的apk到系…

基于vscode(GDB)調試ros2節點

一、環境準備 必備vscode插件 1&#xff09;Docker Docker - Visual Studio Marketplace 2&#xff09;Dev Containers Dev Containers - Visual Studio Marketplace 3&#xff09;GDB GDB Debug - Visual Studio Marketplace 二、進去docker鏡像 1&#xff09;docker安…

基于springboot的考研成績查詢系統(源碼+lw+部署文檔+講解),源碼可白嫖!

摘要 這些年隨著Internet的迅速發展&#xff0c;我們國家和世界都已經進入了互聯網大數據時代&#xff0c;計算機網絡已經成為了整個社會以及經濟發展的巨大動能&#xff0c;考研成績查詢管理事務現在已經成為社會關注的重要內容&#xff0c;因此運用互聯網技術來提高考研成績…

C++:算術運算符

程序員Amin &#x1f648;作者簡介&#xff1a;練習時長兩年半&#xff0c;全棧up主 &#x1f649;個人主頁&#xff1a;程序員Amin &#x1f64a; P? ?S : 點贊是免費的&#xff0c;卻可以讓寫博客的作者開心好久好久&#x1f60e; &#x1f4da;系列專欄&#xff1a;Java全…

PyQt6實例_A股日數據維護工具_使用

目錄 前置&#xff1a; 下載預備更新的數據 使用工具更新 用工具下載未復權、前復權、權息數據 在PostgreSQL添加兩個數據表 工具&視頻 前置&#xff1a; 1 本系列將以 “PyQt6實例_A股日數據維護工具” 開頭放置在“PyQt6實例”專欄 2 日數據可在“數據庫”專欄&…

REST 方法

FUNCTION ZFM_INTERFACE_LOG. *"---------------------------------------------------------------------- *"*"本地接口&#xff1a; *" IMPORTING *" REFERENCE(IV_DSTART) TYPE EDI_UPDDAT *"---------------------------------------…

QT 中的元對象系統(五):QMetaObject::invokeMethod的使用和實現原理

目錄 1.簡介 2.原理概述 3.實現分析 3.1.通過方法名調用方法的實現分析 3.2.通過可調用對象調用方法的實現分析 4.使用場景 5.總結 1.簡介 QMetaObject::invokeMethod 是 Qt 框架中的一個靜態方法&#xff0c;用于在運行時調用對象的成員函數。這個方法提供了一種動態調…

Unity3D開發AI桌面精靈/寵物系列 【三】 語音識別 ASR 技術、語音轉文本多平臺 - 支持科大訊飛、百度等 C# 開發

Unity3D 交互式AI桌面寵物開發系列【三】ASR 語音識別 該系列主要介紹怎么制作AI桌面寵物的流程&#xff0c;我會從項目開始創建初期到最終可以和AI寵物進行交互為止&#xff0c;項目已經開發完成&#xff0c;我會仔細梳理一下流程&#xff0c;分步講解。 這篇文章主要講有關于…

Java 狀態模式 詳解

狀態模式詳解 一、狀態模式概述 狀態模式(State Pattern)是一種行為型設計模式&#xff0c;它允許一個對象在其內部狀態改變時改變它的行為&#xff0c;使對象看起來似乎修改了它的類。 核心特點 狀態封裝&#xff1a;將每個狀態的行為封裝到獨立的類中狀態轉換&#xff1a…

Nginx 配置 HTTPS 與 WSS 完整指南

Nginx 配置 HTTPS 與 WSS 完整指南 本教程將手把手教你如何為網站配置 HTTPS 加密訪問&#xff0c;并通過反向代理實現安全的 WebSocket&#xff08;WSS&#xff09;通信。以 https://www.zhegepai.cn 域名為例&#xff0c;完整流程約需 30 分鐘完成。 一、前置準備 1.1 域名…