js 統計樹形組織架構人員數量

hong_li發表於2024-11-14

組織架構樹形資料,且存在一個人員在多公司/或部門計數重複問題

// 統計組織架構內人員數量
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)
}

相關文章