@@ -10,9 +10,112 @@ Searchable Tree.
1010
1111``` html
1212<template >
13-
13+ <div >
14+ <a-input-search style =" margin-bottom : 8px " placeholder =" Search" @change =" onChange" />
15+ <a-tree
16+ @expand =" onExpand"
17+ :expandedKeys =" expandedKeys"
18+ :autoExpandParent =" autoExpandParent"
19+ :treeNodes =" gData"
20+ >
21+ <template slot =" title" slot-scope =" {key}" >
22+ <span v-if =" key.indexOf(searchValue) > -1" >
23+ {{key.substr(0, key.indexOf(searchValue))}}
24+ <span style =" color : #f50 " >{{searchValue}}</span >
25+ {{key.substr(key.indexOf(searchValue) + searchValue.length)}}
26+ </span >
27+ <span v-else >{{key}}</span >
28+ </template >
29+ </a-tree >
30+ </div >
1431</template >
32+
1533<script >
34+ const x = 3
35+ const y = 2
36+ const z = 1
37+ const gData = []
38+
39+ const generateData = (_level , _preKey , _tns ) => {
40+ const preKey = _preKey || ' 0'
41+ const tns = _tns || gData
1642
43+ const children = []
44+ for (let i = 0 ; i < x; i++ ) {
45+ const key = ` ${ preKey} -${ i} `
46+ tns .push ({ key, scopedSlots: { title: ' title' }})
47+ if (i < y) {
48+ children .push (key)
49+ }
50+ }
51+ if (_level < 0 ) {
52+ return tns
53+ }
54+ const level = _level - 1
55+ children .forEach ((key , index ) => {
56+ tns[index].children = []
57+ return generateData (level, key, tns[index].children )
58+ })
59+ }
60+ generateData (z)
61+
62+ const dataList = []
63+ const generateList = (data ) => {
64+ for (let i = 0 ; i < data .length ; i++ ) {
65+ const node = data[i]
66+ const key = node .key
67+ dataList .push ({ key, title: key })
68+ if (node .children ) {
69+ generateList (node .children , node .key )
70+ }
71+ }
72+ }
73+ generateList (gData)
74+
75+ const getParentKey = (key , tree ) => {
76+ let parentKey
77+ for (let i = 0 ; i < tree .length ; i++ ) {
78+ const node = tree[i]
79+ if (node .children ) {
80+ if (node .children .some (item => item .key === key)) {
81+ parentKey = node .key
82+ } else if (getParentKey (key, node .children )) {
83+ parentKey = getParentKey (key, node .children )
84+ }
85+ }
86+ }
87+ return parentKey
88+ }
89+ export default {
90+ data () {
91+ return {
92+ expandedKeys: [],
93+ searchValue: ' ' ,
94+ autoExpandParent: true ,
95+ gData,
96+ }
97+ },
98+ methods: {
99+ onExpand (expandedKeys ) {
100+ this .expandedKeys = expandedKeys
101+ this .autoExpandParent = false
102+ },
103+ onChange (e ) {
104+ const value = e .target .value
105+ const expandedKeys = dataList .map ((item ) => {
106+ if (item .key .indexOf (value) > - 1 ) {
107+ return getParentKey (item .key , gData)
108+ }
109+ return null
110+ }).filter ((item , i , self ) => item && self .indexOf (item) === i)
111+ Object .assign (this , {
112+ expandedKeys,
113+ searchValue: value,
114+ autoExpandParent: true ,
115+ })
116+ },
117+ },
118+ }
17119 </script >
120+
18121```
0 commit comments