refactor(projects): 单独路由逻辑重构、路由转换函数优化

This commit is contained in:
Soybean
2022-01-06 02:00:42 +08:00
parent c804b21ceb
commit b36a62b150
45 changed files with 4976 additions and 330 deletions

51
src/utils/router/menu.ts Normal file
View File

@@ -0,0 +1,51 @@
import type { GlobalMenuOption } from '@/interface';
import { iconifyRender } from '../common';
/** 路由不转换菜单 */
function hideInMenu(route: AuthRoute.Route) {
return Boolean(route.meta.hide);
}
/** 给菜单添加可选属性 */
function addPartialProps(menuItem: GlobalMenuOption, icon?: string, children?: GlobalMenuOption[]) {
const item = { ...menuItem };
if (icon) {
Object.assign(item, { icon: iconifyRender(icon) });
}
if (children) {
Object.assign(item, { children });
}
return item;
}
/**
* 将权限路由转换成菜单
* @param routes - 路由
*/
export function transformAuthRouteToMenu(routes: AuthRoute.Route[]) {
const globalMenu: GlobalMenuOption[] = [];
routes.forEach(route => {
const { name, path, meta } = route;
const routeName = name as string;
let menuChildren: GlobalMenuOption[] | undefined;
if (route.children) {
menuChildren = transformAuthRouteToMenu(route.children);
}
const menuItem: GlobalMenuOption = addPartialProps(
{
key: routeName,
label: meta.title,
routeName,
routePath: path
},
meta?.icon,
menuChildren
);
if (!hideInMenu(route)) {
globalMenu.push(menuItem);
}
});
return globalMenu;
}