基本数据:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
const treeData = [
{ id: '1', parentId: '0', name: 'KK总部', orderNumber: 0.0, hasChild: true, enabled: true },
{ id: '11', parentId: '1', name: '财务', orderNumber: 0.0, hasChild: true, enabled: true },
{ id: '12', parentId: '11', name: '财务0-1', orderNumber: 0.0, hasChild: false, enabled: true },
{ id: '13', parentId: '11', name: '财务0-2', orderNumber: 0.0, hasChild: false, enabled: true },
{ id: '3', parentId: '1', name: '销售部', orderNumber: 0.0, hasChild: false, enabled: true },
{ id: '4', parentId: '1', name: '客服部', orderNumber: 0.0, hasChild: false, enabled: true },
{ id: '5', parentId: '1', name: '行政部', orderNumber: 0.0, hasChild: false, enabled: true },
{ id: '2', parentId: '0', name: 'KK总部1', orderNumber: 0.0, hasChild: true, enabled: true },
{ id: '7', parentId: '2', name: '财务1', orderNumber: 0.0, hasChild: false, enabled: true },
{ id: '8', parentId: '2', name: '销售部1', orderNumber: 0.0, hasChild: false, enabled: true },
{ id: '9', parentId: '2', name: '客服部1', orderNumber: 0.0, hasChild: false, enabled: true },
{ id: '10', parentId: '2', name: '行政部1', orderNumber: 0.0, hasChild: false, enabled: true },
{ id: '14', parentId: '0', name: '外部的部门', orderNumber: 0.0, hasChild: false, enabled: true },
]

处理数据:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// 找出根节点
const rootTreeData = treeData.filter(item => {
return item.parentId === '0';
})

// 找出根节点后循环添加children
rootTreeData.forEach((root: any) => {
pushChildren(root.id, root)
})

// 处理子节点,判断是否有children,有的话就递归添加children
const pushChildren = (id: string, root: { children: any, hasChild: boolean }) => {
treeData.forEach((item: any) => {
if (root.hasChild && item.parentId === id) {
if (!root.children) {
root.children = [];
}
root.children.push(item)
pushChildren(item.id, item)
}
})
}

最终的数据结构:
数据结构
最终效果