递归重组企业微信(wecom)组织架构&el-cascader回显

const allotDeparment = ( departments, parentDepartmentsList, usersObj, parentId, deparmentsNames ) => { const otherD = [] // 现将每组的人员推入对应的部门 if (usersObj[parentId]) { parentDepartmentsList.push(...usersObj[parentId]) } // 循环遍历部门,进行重构 departments.forEach(deparmentInfo => { if (deparmentInfo.parentid === parentId) { parentDepartmentsList.push({ label: deparmentInfo.name, value: deparmentInfo.id, parentid: deparmentInfo.parentid, children: [] }) } else { otherD.push(deparmentInfo) } }) if (otherD.length > 0) { // 递归获取下一级的数据 parentDepartmentsList.forEach(parentD => { if (parentD.children) { allotDeparment(otherD, parentD.children, usersObj, parentD.value) } }) } }

调用

allotDeparment(departments, personList, departmentUsersObj, 0)

改良:

const departmentUsersObj = {} // eslint-disable-next-line no-unused-expressions persondata.data?.userlist?.forEach(element => { // 将所有人员按照部门id进行重新分配 if (element.department?.length > 0) { element.department.forEach(d => { if (departmentUsersObj[d]) { departmentUsersObj[d].push({ label: element.name, value: element.userid }) } else { departmentUsersObj[d] = [] departmentUsersObj[d].push({ label: element.name, value: element.userid }) } }) } }) const reconstructDepartmentsData = (departmensList, departmentUsersObj) => { const personList = [] // 最终要返回的结果 const rootParentId = 0 // 初始化开始层级为0,定义全局层级 const allotDeparment = (departments, parentDepartmentsList, usersObj, parentId) => { const otherD = [] // 现将每组的人员推入对应的部门 if (usersObj[parentId]) { parentDepartmentsList.push(...usersObj[parentId]) } // 循环遍历部门,进行重构 departments.forEach(deparmentInfo => { if (deparmentInfo.parentid === parentId) { parentDepartmentsList.push({ label: deparmentInfo.name, value: deparmentInfo.id, parentid: deparmentInfo.parentid, children: [] }) } else { otherD.push(deparmentInfo) } }) if (otherD.length > 0) { // 递归获取下一级的数据 parentDepartmentsList.forEach(parentD => { if (parentD.children) { allotDeparment(otherD, parentD.children, usersObj, parentD.value) } }) } } allotDeparment(departmensList, personList, departmentUsersObj, rootParentId) return personList }

调用

const personList = reconstructDepartmentsData(departments, departmentUsersObj)
const getAuthorArrById = (authorId, departmentUsersTree) => { // 闭包进行递归操作 const preResultarr = [] // 在找到目标后,递归时操作的数组 let resultArr = [] // 最终结果的数组 let depth = 0 // 初始化开始层级为0,定义全局层级 // 定义递归函数 function childrenEach (childrenData, depthN) { // 处理当前层级的所有组 for (var j = 0; j < childrenData.length; j++) { // 每次只处理一个层级中的一个数据。 depth = depthN // 将执行的层级赋值 到 全局层级 preResultarr[depthN] = childrenData[j].value // 将第一级的id留下 if (childrenData[j].value === authorId) { resultArr = preResultarr.slice(0, depthN + 1) // 将目前匹配的数组,截断并保存到结果数组, // 第一次找到就直接结束循环,然后退出 break } else { if (childrenData[j].children) { depth++ childrenEach(childrenData[j].children, depth) } } } return resultArr } return childrenEach(departmentUsersTree, depth) }

回显调用

const userArrSelected = getAuthorArrById('xxx', personList)

__EOF__

本文作者CoderI
本文链接https://www.cnblogs.com/CoderI/p/16369567.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   CoderI  阅读(137)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示