久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合

站長資訊網
最全最豐富的資訊網站

聊聊Ant Design Vue中怎么實現省市穿梭框

本篇文章帶大家了解一下利用Ant Design Vue實現省市穿梭框的方法,希望對大家有所幫助!

聊聊Ant Design Vue中怎么實現省市穿梭框

樹形穿梭框

官方樹穿梭框如下,左右是樹結構,右邊是列表。

本質上是有兩套數據源,tree 使用的是樹狀數據源,transfer 使用的是列表數據源,將多維的樹狀數據源轉為一維的,就是列表數據了。

具體使用可以查看官方文檔之 帶搜索框的穿梭框(https://antdv.com/components/transfer-cn/)

聊聊Ant Design Vue中怎么實現省市穿梭框

城市穿梭框

改造穿梭框的原因:

  • targetKeys只需要城市數據,不需要省份數據

  • 源穿梭框中,子節點和父節點沒有關聯選中關系,需要處理,畢竟省市級是需要聯動的

  • 目標穿梭框,也要支持樹狀結構

主要實現功能點:

  • 樹形結構數據處理:關鍵詞過濾;已選數據禁用狀態;

  • 實現父節點和節點的關聯選中

  • 穿梭框右側僅展示城市數據,不顯示省份數據

  • 選中城市數據:帶省級信息返回,滿足接口要求,即返回樹狀結構

聊聊Ant Design Vue中怎么實現省市穿梭框

改造的本質:基于transfer的二次改造,主要是對數據的處理,組件基本沒啥改變

組件參數和事件

自定義參數:考慮對外暴露的參數,參數的作用,屬性等 自定義事件:考慮暴露出去的回調事件

// 自定義參數 export default {   props: {     dataSource: {       // 數據源       type: Array,       default: () => [],     },     targetKey: {       // 右側框數據的 key 集合       type: Array,       default: () => [],     },   }, };  // handleChange回調函數:treeData-左側樹結構數據,toArray-右側樹結構數據,targetKeys-選中城市key集合 this.$emit("handleChange", this.treeData, toArray, this.targetKeys);

穿梭框處理

<template>   <!-- 穿梭框組件,數據源為列表形式 -->   <a-transfer     class="mcd-transfer"     ref="singleTreeTransfer"     show-search     :locale="localeConfig"     :titles="['所有城市', '已選城市']"     :data-source="transferDataSource"     :target-keys="targetKeys"     :render="(item) => item.label"     :show-select-all="true"     @change="handleTransferChange"     @search="handleTransferSearch"   >     <template       slot="children"       slot-scope="{         props: { direction, selectedKeys },         on: { itemSelect, itemSelectAll },       }"     >       <!-- 左邊源數據框:樹形控件 -->       <a-tree         v-if="direction === 'left'"         class="mcd-tree"         blockNode         checkable         :checked-keys="[...selectedKeys, ...targetKeys]"         :expanded-keys="expandedKeys"         :tree-data="treeData"         @expand="handleTreeExpanded"         @check="           (_, props) => {             handleTreeChecked(               _,               props,               [...selectedKeys, ...targetKeys],               itemSelect,               itemSelectAll             );           }         "         @select="           (_, props) => {             handleTreeChecked(               _,               props,               [...selectedKeys, ...targetKeys],               itemSelect,               itemSelectAll             );           }         "       />     </template>   </a-transfer> </template>

數據源處理

  • 穿梭框數據處理(transferDataSource):多維數據轉為一維數據

  • 樹數據處理(treeData):數據源過濾處理,數據禁止操作處理

// 數據源示例 const dataSource = [   {     pid: "0",     key: "1000",     label: "黑龍江省",     title: "黑龍江省",     children: [       {         pid: "1000",         key: "1028",         label: "大興安嶺地區",         title: "大興安嶺地區",       },     ],   }, ];  // ant-transfer穿梭框數據源 transferDataSource() {   // 穿梭框數據源   let transferDataSource = [];   // 穿梭框數據轉換,多維轉為一維   function flatten(list = []) {     list.forEach((item) => {       transferDataSource.push(item);       // 子數據處理       if (item.children && item.children.length) {         flatten(item.children);       }     });   }   if (this.dataSource && this.dataSource.length) {     flatten(JSON.parse(JSON.stringify(this.dataSource)));   }   return transferDataSource; }  // ant-tree樹數據源 treeData() {   // 樹形控件數據源   const validate = (node, map) => {     // 數據過濾處理 includes     return node.title.includes(this.keyword);   };   const result = filterTree(     this.dataSource,     this.targetKeys,     validate,     this.keyword   );   return result; }  // 樹形結構數據過濾 const filterTree = (tree = [], targetKeys = [], validate = () => {}) => {   if (!tree.length) {     return [];   }   const result = [];   for (let item of tree) {     if (item.children && item.children.length) {       let node = {         ...item,         children: [],         disabled: targetKeys.includes(item.key), // 禁用屬性       };       // 子級處理       for (let o of item.children) {         if (!validate.apply(null, [o, targetKeys])) continue;         node.children.push({ ...o, disabled: targetKeys.includes(o.key) });       }       if (node.children.length) {         result.push(node);       }     }   }   return result; };

穿梭框事件處理

  • change 事件,回調數據(handleTransferChange)

  • search 搜索事件(handleTransferSearch)

// 穿梭框:change事件 handleTransferChange(targetKeys, direction, moveKeys) {   // 過濾:避免頭部操作欄“全選”將省級key選中至右邊   this.targetKeys = targetKeys.filter((o) => !this.pidKeys.includes(o));   // 選中城市數據:帶省級信息返回,滿足接口要求   const validate = (node, map) => {     return map.includes(node.key) && node.title.includes(this.keyword);   };   let toArray = filterTree(this.dataSource, this.targetKeys, validate);   // handleChange回調函數:treeData-左側樹結構數據,toArray-右側樹結構數據,targetKeys-選中城市key集合   this.$emit("handleChange", this.treeData, toArray, this.targetKeys); },  // 穿梭框:搜索事件 handleTransferSearch(dir, value) {   if (dir === "left") {     this.keyword = value;   } },

樹事件

  • change 事件,處理父節點和子節點的聯動關系(handleTreeChecked)

  • expand 事件:樹的展開和收縮(handleTreeExpanded)

// 樹形控件:change事件 handleTreeChecked(keys, e, checkedKeys, itemSelect, itemSelectAll) {   const {     eventKey,     checked,     dataRef: { children },   } = e.node;   if (this.pidKeys && this.pidKeys.includes(eventKey)) {     // 父節點選中:將所有子節點也選中     let childKeys = children ? children.map((item) => item.key) : [];     if (childKeys.length) itemSelectAll(childKeys, !checked);   }   itemSelect(eventKey, !isChecked(checkedKeys, eventKey)); // 子節點選中 }, // 樹形控件:expand事件 handleTreeExpanded(expandedKeys) {   this.expandedKeys = expandedKeys; },

清除事件

重新打開時,需要還原組件狀態,例如滾動條位置,搜索框關鍵字等

handleReset() {   this.keyword = "";   this.$nextTick(() => {     // 搜索框關鍵字清除     const ele = this.$refs.singleTreeTransfer.$el.getElementsByClassName(       "anticon-close-circle"     );     if (ele && ele.length) {       ele[0] && ele[0].click();       ele[1] && ele[1].click();     }     // 滾動條回到頂部     if (this.$el.querySelector(".mcd-tree")) {       this.$el.querySelector(".mcd-tree").scrollTop = 0;     }     // 展開數據還原     this.expandedKeys = [];   }); }

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
国产精品极品在线观看| 精品72久久久久中文字幕| 亚洲日本网址| 视频在线不卡免费观看| 国产一区二区三区成人欧美日韩在线观看| 国产精品一区二区三区www| 69堂精品视频在线播放| 亚洲精品乱码| 日本欧美大码aⅴ在线播放| 少妇精品久久久一区二区| 日韩欧美高清一区二区三区| 日本不卡一区二区| 国产精品一区二区美女视频免费看| 久久激五月天综合精品| 国产精品成人**免费视频| 精品视频亚洲| 日韩精品诱惑一区?区三区| 欧美一级精品| 久久国产成人| 日本精品另类| 久久精品国产999大香线蕉| 日韩综合在线| 久久在线免费| 黄色亚洲在线| 婷婷精品在线| 国产成人精品一区二区三区视频 | 日韩欧美视频专区| 精品中文字幕一区二区三区av| 国产一级一区二区| 日韩欧美高清一区二区三区| 国产精品观看| 欧洲av不卡| 亚洲制服少妇| 国产毛片一区二区三区| 日韩电影免费网站| 日韩精选在线| 成人影视亚洲图片在线| 国产综合欧美| 日韩激情一二三区| 高清日韩欧美| 日韩网站在线| 国产精品日韩精品中文字幕| 91看片一区| 中文字幕日本一区二区| 精品国内亚洲2022精品成人| 伊人久久大香线蕉av超碰演员| 亚洲免费毛片| 精品亚洲a∨一区二区三区18| 亚洲国产日韩欧美在线| 欧美一区在线观看视频| 91精品推荐| 欧美日韩99| 99视频精品全部免费在线视频| 日本中文字幕不卡| 久久天堂成人| 一区二区三区视频免费观看| 777久久精品| 婷婷亚洲综合| 国产精品调教| 欧美日韩激情| 国产精品久一| 五月婷婷亚洲| 久久久久观看| 亚洲男女自偷自拍| 精品成人18| 日韩黄色大片| 国产精品一区二区三区www | 久久久精品久久久久久96| 日本成人在线一区| 极品日韩av| 日韩激情中文字幕| 国产99久久久国产精品成人免费| 日本少妇一区二区| 激情欧美日韩一区| 日韩精选在线| 日本 国产 欧美色综合| 日韩精品专区| 欧美精品影院| 不卡在线一区二区| 精品视频高潮| 日本欧美一区二区| 1024精品久久久久久久久| 麻豆国产精品777777在线| 亚洲毛片一区| 一级欧洲+日本+国产| www.51av欧美视频| 国产精品成人3p一区二区三区| 日韩中文字幕不卡| 久久久天天操| 精品中文在线| 欧美一区二区三区久久精品| 久久av一区二区三区| 999久久久91| 美女av在线免费看| 国产精品香蕉| 欧美天堂在线| 亚洲精品极品| 在线一区欧美| 日本强好片久久久久久aaa| 一区二区亚洲视频| 91精品观看| 99热精品久久| 四虎884aa成人精品最新| 久久亚洲国产精品尤物| 亚洲三级观看| 亚洲综合国产| 国产视频一区三区| 婷婷亚洲综合| 亚洲综合电影| 人在线成免费视频| 精品国产18久久久久久二百| 欧美精品福利| 国产欧美日韩视频在线| 婷婷综合成人| 日韩精品一区第一页| 欧美精品一线| 久久精品影视| 国产精品亚洲综合久久| 天堂av在线| 国产精品毛片久久| 婷婷精品在线| 手机精品视频在线观看| 亚洲经典在线| 日韩中文字幕一区二区三区| 另类亚洲自拍| 蜜臀91精品一区二区三区| av不卡在线看| 日韩影院在线观看| 深夜日韩欧美| 日本精品久久| 免费精品视频最新在线| 亚洲综合婷婷| 欧美日韩第一| 免费观看久久久4p| 日本在线视频一区二区| 日韩欧美中文字幕电影| 国产美女精品视频免费播放软件| 国产精品美女午夜爽爽| 老司机免费视频一区二区三区| 久久影视三级福利片| 荡女精品导航| 在线人成日本视频| 亚洲网站视频| 视频一区二区国产| 日韩一区精品| 日韩国产一二三区| 国产精品白丝久久av网站| 久久男人av| 国产精品xxx| se01亚洲视频 | 成人免费一区| 久久精品高清| 日韩视频一区| 日本高清久久| 久久久国产精品网站| 亚洲人成在线网站| 日韩午夜一区| 久久久久黄色| 激情欧美一区二区三区| 免费视频一区二区| 欧美片第1页综合| 日本美女一区| 免费欧美在线视频| 国产一精品一av一免费爽爽| 电影91久久久| 六月天综合网| 国产精品一区二区三区美女 | 久久人人88| 亚洲精品四区| 国产一区福利| 国产女优一区| 久久精品超碰| 久久九九国产| 日韩一区中文| av综合电影网站| 蜜桃免费网站一区二区三区| 日本国产欧美| 色老板在线视频一区二区| 亚洲精品人人| 日韩一区二区在线免费| 婷婷综合福利| 九色porny丨国产首页在线| 免费国产亚洲视频| 国产精品久久观看| 水蜜桃久久夜色精品一区的特点| 美女尤物国产一区| 欧美精品黄色| 精品国产三区在线| 免费日韩精品中文字幕视频在线| 国产精品sm| 黄色精品视频| 亚洲精品1区| 久久av电影| 国产毛片久久| 久久av偷拍| 蜜桃久久精品一区二区| 国产成人77亚洲精品www| 噜噜噜久久亚洲精品国产品小说| 国产一区二区三区四区| 亚洲影视一区|