mirror of
https://github.com/soybeanjs/soybean-admin.git
synced 2025-09-17 09:16:37 +08:00
70 lines
1.6 KiB
TypeScript
70 lines
1.6 KiB
TypeScript
/* eslint-disable */
|
|
/* prettier-ignore */
|
|
// biome-ignore lint: disable
|
|
// Generated by elegant-router
|
|
// Read more: https://github.com/soybeanjs/elegant-router
|
|
|
|
import type { RouteRecordRaw } from 'vue-router';
|
|
import type {
|
|
AutoRouterRedirect,
|
|
AutoRouterRoute,
|
|
AutoRouterSingleView,
|
|
RawRouteComponent,
|
|
RouteFileKey,
|
|
RouteLayoutKey
|
|
} from '@elegant-router/types';
|
|
|
|
export function transformToVueRoutes(
|
|
routes: AutoRouterRoute[],
|
|
layouts: Record<RouteLayoutKey, RawRouteComponent>,
|
|
views: Record<RouteFileKey, RawRouteComponent>
|
|
) {
|
|
const { redirects, groupedRoutes } = getFormattedRoutes(routes);
|
|
|
|
const vueRoutes: RouteRecordRaw[] = [...redirects];
|
|
|
|
groupedRoutes.forEach((items, layout) => {
|
|
const layoutRoute: RouteRecordRaw = {
|
|
path: `/${layout}-layout`,
|
|
component: layouts[layout],
|
|
children: items.map(item => {
|
|
const { layout: _, component, ...rest } = item;
|
|
|
|
return {
|
|
component: views[component],
|
|
...rest
|
|
};
|
|
})
|
|
};
|
|
|
|
vueRoutes.push(layoutRoute);
|
|
});
|
|
|
|
return vueRoutes;
|
|
}
|
|
|
|
function getFormattedRoutes(routes: AutoRouterRoute[]) {
|
|
const groupedRoutes = new Map<RouteLayoutKey, AutoRouterSingleView[]>();
|
|
const redirects: AutoRouterRedirect[] = [];
|
|
|
|
routes.forEach(route => {
|
|
if (isAutoRouterRedirect(route)) {
|
|
redirects.push(route);
|
|
return;
|
|
}
|
|
|
|
const items = groupedRoutes.get(route.layout) || [];
|
|
items.push(route);
|
|
groupedRoutes.set(route.layout, items);
|
|
});
|
|
|
|
return {
|
|
redirects,
|
|
groupedRoutes
|
|
};
|
|
}
|
|
|
|
function isAutoRouterRedirect(route: AutoRouterRoute): route is AutoRouterRedirect {
|
|
return 'redirect' in route;
|
|
}
|