refactor: route Module structural transformation

This commit is contained in:
vben
2020-11-09 01:08:43 +08:00
parent dc42d434f0
commit 9b61e82d74
9 changed files with 57 additions and 60 deletions

View File

@@ -48,12 +48,12 @@ export function transformRouteToMenu(routeModList: AppRouteModule[]) {
const cloneRouteModList = cloneDeep(routeModList);
const routeList: AppRouteRecordRaw[] = [];
cloneRouteModList.forEach((item) => {
const { layout, routes } = item;
const { layout, routes, children } = item;
if (layout) {
layout.children = routes;
layout.children = routes || children;
routeList.push(layout);
} else {
routeList.push(...routes);
routes && routeList.push(...routes);
}
});
return treeMap(routeList, {

View File

@@ -8,6 +8,7 @@ import { toRaw } from 'vue';
import { PAGE_LAYOUT_COMPONENT } from '/@/router/constant';
// import { isDevMode } from '/@/utils/env';
import dynamicImport from './dynamicImport';
import { omit } from 'lodash-es';
let currentTo: RouteLocationNormalized | null = null;
@@ -23,8 +24,16 @@ export function setCurrentTo(to: RouteLocationNormalized) {
export function genRouteModule(moduleList: AppRouteModule[]) {
const ret: AppRouteRecordRaw[] = [];
for (const routeMod of moduleList) {
const routes = routeMod.routes as any;
const layout = routeMod.layout;
let routes = [];
let layout: AppRouteRecordRaw | undefined;
if (Reflect.has(routeMod, 'routes')) {
routes = routeMod.routes as any;
layout = routeMod.layout;
} else if (Reflect.has(routeMod, 'path')) {
layout = omit(routeMod, 'children') as any;
routes = routeMod.children || [];
}
const router = createRouter({ routes, history: createWebHashHistory() });
const flatList = (toRaw(router.getRoutes()).filter(
@@ -45,7 +54,8 @@ export function genRouteModule(moduleList: AppRouteModule[]) {
// 动态引入
// TODO 错误写法
function asyncImportRoute(routes: AppRouteRecordRaw[]) {
function asyncImportRoute(routes: AppRouteRecordRaw[] | undefined) {
if (!routes) return;
routes.forEach((item) => {
const { component } = item;
const { children } = item;
@@ -60,10 +70,14 @@ function asyncImportRoute(routes: AppRouteRecordRaw[]) {
// 将后台对象转成路由对象
export function transformObjToRoute(routeList: AppRouteModule[]) {
routeList.forEach((route) => {
asyncImportRoute(route.routes);
asyncImportRoute(Reflect.has(route, 'routes') ? route.routes : route.children || []);
if (route.layout) {
route.layout.component =
route.layout.component === 'PAGE_LAYOUT' ? PAGE_LAYOUT_COMPONENT : '';
} else {
route.component = route.component === 'PAGE_LAYOUT' ? PAGE_LAYOUT_COMPONENT : '';
const _layout = omit(route, 'children') as any;
route.layout = _layout;
}
});
return routeList;