diff --git a/src/App.vue b/src/App.vue index 39041f6..f396465 100644 --- a/src/App.vue +++ b/src/App.vue @@ -16,8 +16,9 @@ export default { item => item.rights === "duojiSystem" ) ) { - let authList = this.translateDataToTree( - e.data.userInfo.permissionList + let authList = this.$utils.translateDataToTree( + e.data.userInfo.permissionList, + 'duojiSystem' ); e.data.userInfo.permissionList = this.$utils.treeToArray( authList diff --git a/src/utils/index.js b/src/utils/index.js index b1f2c05..c5b37e7 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -240,5 +240,34 @@ export default { newArr.push(item); }); return newArr; + }, + translateDataToTree(data, key) { + let parents = data.filter(value => value.parentId === 0); + let children = data.filter(value => value.parentId !== 0); + let translator = (parents, children) => { + parents && + parents.forEach(parent => { + children && + children.forEach((current, index) => { + if (current.parentId === parent.id) { + // 深拷贝 + let temp = JSON.parse( + JSON.stringify(children) + ); + // 减少递归时节点数 + temp.splice(index, 1); + // 加入父节点的children + parent.children && parent.children.length + ? parent.children.push(current) + : (parent.children = [current]); + // 将匹配的子节点作为下一次的父节点开始滚雪球 + translator([current], temp); + } + }); + }); + }; + translator(parents, children); + parents = parents.filter(item => item.rights === key); + return parents && parents.length && parents[0].children; } }