image-20230104123514646

elemt-plus树形控件展示如上所示,示例代码如下:

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
<template>
<el-tree
:data="data"
show-checkbox
node-key="id"
:default-expanded-keys="[2, 3]"
:default-checked-keys="[5]"
:props="defaultProps"
/>
</template>

<script lang="ts" setup>
const defaultProps = {
children: 'children',
label: 'label',
}
const data = [
{
id: 1,
label: 'Level one 1',
children: [
{
id: 4,
label: 'Level two 1-1',
children: [
{
id: 9,
label: 'Level three 1-1-1',
},
{
id: 10,
label: 'Level three 1-1-2',
},
],
},
],
},
{
id: 2,
label: 'Level one 2',
children: [
{
id: 5,
label: 'Level two 2-1',
},
{
id: 6,
label: 'Level two 2-2',
},
],
},
{
id: 3,
label: 'Level one 3',
children: [
{
id: 7,
label: 'Level two 3-1',
},
{
id: 8,
label: 'Level two 3-2',
},
],
},
]
</script>

image-20230104123514646

要实现的应用展示如上所示,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 <!-- 树形控件 
data:为要展示的数据
default-expand-all:默认全部展开
default-checked-keys:默认选中的key
props:展示的数据
-->
<template #default>
<!-- 树形控件 -->
<el-tree
ref="tree"
:data="menuArr"
show-checkbox
node-key="id"
default-expand-all
:default-checked-keys="selectArr"
:props="defaultProps"
/>
</template>

其中menuArr数据展示如下:

image-20230104123514646

其中menuArr数据获取以及过滤选中数据定义props代码如下:

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
//分配权限按钮的回调
//已有的职位的数据
const setPermisstion = async (row: RoleData) => {
//抽屉显示出来
drawer.value = true
//收集当前要分类权限的职位的数据
Object.assign(RoleParams, row)
//根据职位获取权限的数据
let result: MenuResponseData = await reqAllMenuList(RoleParams.id as number)
if (result.code == 200) {
menuArr.value = result.data
console.log('menuArr.value', menuArr.value)
selectArr.value = filterSelectArr(menuArr.value, [])
}
}
//树形控件的测试数据
const defaultProps = {
children: 'children',
label: 'name',
}

const filterSelectArr = (allData: any, initArr: any) => {
allData.forEach((item: any) => {
if (item.select && item.level == 4) {
initArr.push(item.id)
}
if (item.children && item.children.length > 0) {
filterSelectArr(item.children, initArr)
}
})

return initArr
}