|
|
|
@ -114,19 +114,23 @@ export function configureDynamicParamsMenu(menu: Menu, params: RouteParams) { |
|
|
|
/** |
|
|
|
* 对后端返回的menus和前端路由进行对比然后组成新的菜单,目前只针对两级菜单,通用的多级菜单需要进行修改 |
|
|
|
*/ |
|
|
|
export function transformMenu(menus: string[]): Menu[] { |
|
|
|
export function transformMenu(menus: any[]): Menu[] { |
|
|
|
// 如果没有菜单数据,按照管理员来处理
|
|
|
|
if(menus.length == 0){ |
|
|
|
return [] |
|
|
|
} |
|
|
|
// const menuArray = flattenTree(menus)
|
|
|
|
let menuList: Menu[] = [] |
|
|
|
appMenuList.forEach(item => { |
|
|
|
let element: Menu = {path: item.path, name: item.name, component: 'LAYOUT', redirect: item.redirect, meta: item.meta} |
|
|
|
let children: Menu[] = [] |
|
|
|
item.children?.forEach(menu => { |
|
|
|
|
|
|
|
// 这里只考虑二级菜单,没有做
|
|
|
|
if(menus.includes(menu.path)){ |
|
|
|
children.push(cloneDeep(menu)) |
|
|
|
} |
|
|
|
|
|
|
|
}) |
|
|
|
if(children.length){ |
|
|
|
element.children = children |
|
|
|
@ -134,4 +138,32 @@ export function transformMenu(menus: string[]): Menu[] { |
|
|
|
} |
|
|
|
}) |
|
|
|
return menuList |
|
|
|
} |
|
|
|
|
|
|
|
function flattenSingleNode(root: Menu): string[] { |
|
|
|
const stack: Menu[] = [root]; |
|
|
|
const result: string[] = []; |
|
|
|
while (stack.length) { |
|
|
|
const node = stack.pop()!; |
|
|
|
result.push(node.path); |
|
|
|
if (node.children) { |
|
|
|
// 从右向左压栈,保证从左到右遍历
|
|
|
|
for (let i = node.children.length - 1; i >= 0; i--) { |
|
|
|
stack.push(node.children[i]); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
return result; |
|
|
|
} |
|
|
|
|
|
|
|
function flattenTree(nodes: Menu | Menu[]): string[] { |
|
|
|
if (Array.isArray(nodes)) { |
|
|
|
let result: string[] = []; |
|
|
|
nodes.forEach(node => { |
|
|
|
result = result.concat(flattenSingleNode(node)); |
|
|
|
}); |
|
|
|
return result; |
|
|
|
} else { |
|
|
|
return flattenSingleNode(nodes); |
|
|
|
} |
|
|
|
} |