組織架構樹形資料,且存在一個人員在多公司/或部門計數重複問題
// 統計組織架構內人員數量
const countNodesProperty = (treeItemData, propertyName, propertyValue) => {
let count = 0
const userArr = []
const traverse = nodes => {
nodes.forEach(node => {
if (node[propertyName] === propertyValue) {
// 當前公司/部門內無此人員時,再計數。解決人員在多公司/部門時計數重複問題
if (!userArr.find(item => item.id === node.id)) {
count++
}
userArr.push(node)
}
if (node.childList && node.childList.length) {
traverse(node.childList)
}
})
}
traverse([{ ...treeItemData }])
return count
}
// 操作樹形資料
const handleTreeData() {
// 組織架構樹形資料
const treeData= [
{
id: '1',
name: '總公司',
type: '1', // 1 公司, 2 部門,3 人員
parentId: '0',
childList: [
{
id: '2',
name: '上海公司',
type: '1',
parentId: '1',
childList: [
{
id: '2-1',
name: '部門1',
type: '2',
parentId: '2',
childList: [
id: '2-1-1',
name: '張三',
type: '3',
parentId: '2-1',
]
},
{
id: '2-2',
name: '部門2',
type: '2',
parentId: '2',
childList: [
id: '2-1-1',
name: '張三',
type: '3',
parentId: '2-2',
]
},
]
}
]
}
]
const handeData = data => {
data.forEach(item => {
if (item.type !== 3) {
item.count = countNodesProperty(item, 'type', 3)
}
if (item.childList && item.childList.length) {
handeData(item.childList)
}
})
}
handeData(treeData)
}