1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
| <template> <el-tree id="tree" v-loading="treeDataLoading" node-key="id" :data="treeData" :default-expand-all="defaultExpandAll" :expand-on-click-node="false" style="height: 100%;" /> </template>
<script> export default { name: 'TreeDbl', props: { defaultExpandAll: { type: Boolean, default: false } }, data() { return { treeData: [], treeDataLoading: false, resData: [ { id: '1', label: '动物', parentId: '' }, { id: '2', label: '狗', parentId: '1' }, { id: '3', label: '哈士奇', parentId: '2' }, { id: '4', label: '柯基', parentId: '2' }, { id: '6', label: '猫', parentId: '1' }, { id: '7', label: '植物', parentId: '' } ] } }, created() { this.getTree() }, methods: { dblClickItem(e) { if (e.target.nodeName === 'SPAN') { console.log(e.target.innerText) } },
getTree() { this.treeDataLoading = true new Promise(resovle => { const tree = this.resData this.treeData = this.transfromData(tree) resovle() }) .catch(() => {}) .finally(() => { this.treeDataLoading = false }) }, transfromData(data, params = {}) { const cData = JSON.parse(JSON.stringify(data)) const map = {} const tData = [] const attr = { id: 'id', parentId: 'parentId' } const arg = Object.assign({}, attr, params) cData.forEach(item => (map[item[arg.id]] = item)) cData.forEach(child => { const mapItem = map[child[arg.parentId]] if (mapItem) { if (!mapItem.children) mapItem.children = [] mapItem.children.push(child) } else { tData.push(child) } }) return tData } } } </script>
|