feat(projects): 新增项目、执行、任务等功能
This commit is contained in:
@@ -95,31 +95,78 @@ function replaceWithStaticObjectContextDomainRoute(routes: Api.Route.MenuRoute[]
|
||||
return;
|
||||
}
|
||||
|
||||
const wrappedDomainRoute = cloneStaticRouteAsMenuRoute(staticDomainRoute, `object-context:${config.domainKey}`);
|
||||
const entryRouteIndex = normalizedRoutes.findIndex(route => route.id === entryRoute.id);
|
||||
const domainRouteIds = new Set(domainTopLevelRoutes.map(route => route.id));
|
||||
// Create a map of backend routes by name for quick lookup
|
||||
const backendRouteMap = new Map<string, Api.Route.MenuRoute>();
|
||||
domainTopLevelRoutes.forEach(route => {
|
||||
if (route.name) {
|
||||
backendRouteMap.set(String(route.name), route);
|
||||
}
|
||||
});
|
||||
|
||||
if (entryRoute.meta) {
|
||||
const nextMeta: RouteMeta = {
|
||||
title: wrappedDomainRoute.meta?.title || config.domainKey,
|
||||
...(wrappedDomainRoute.meta || {})
|
||||
// Clone static route but preserve backend route's meta for children
|
||||
// 待重构:拆 helper 以降低复杂度,暂以 disable 注释临时放行
|
||||
// eslint-disable-next-line complexity
|
||||
function cloneStaticRoutePreservingBackendMeta(route: ElegantConstRoute, idPrefix: string): Api.Route.MenuRoute {
|
||||
const backendRoute = route.name ? backendRouteMap.get(String(route.name)) : undefined;
|
||||
const { children: _children, ...routeWithoutChildren } = route;
|
||||
const baseRoute: Api.Route.MenuRoute = {
|
||||
...routeWithoutChildren,
|
||||
id: `${idPrefix}:${String(route.name || route.path)}`
|
||||
};
|
||||
|
||||
if (entryRoute.meta.icon) {
|
||||
nextMeta.icon = entryRoute.meta.icon;
|
||||
// If there's a backend route, preserve its meta
|
||||
if (backendRoute?.meta) {
|
||||
baseRoute.meta = {
|
||||
...baseRoute.meta,
|
||||
title: backendRoute.meta.title || baseRoute.meta?.title || String(route.name || route.path),
|
||||
icon: backendRoute.meta.icon || baseRoute.meta?.icon,
|
||||
localIcon: backendRoute.meta.localIcon || baseRoute.meta?.localIcon,
|
||||
order:
|
||||
backendRoute.meta.order !== undefined && backendRoute.meta.order !== null
|
||||
? backendRoute.meta.order
|
||||
: baseRoute.meta?.order,
|
||||
keepAlive:
|
||||
backendRoute.meta.keepAlive !== undefined && backendRoute.meta.keepAlive !== null
|
||||
? backendRoute.meta.keepAlive
|
||||
: baseRoute.meta?.keepAlive,
|
||||
i18nKey: backendRoute.meta.i18nKey || baseRoute.meta?.i18nKey
|
||||
};
|
||||
}
|
||||
|
||||
if (entryRoute.meta.localIcon) {
|
||||
nextMeta.localIcon = entryRoute.meta.localIcon;
|
||||
// Recursively process children
|
||||
if (route.children?.length) {
|
||||
baseRoute.children = route.children.map(child => cloneStaticRoutePreservingBackendMeta(child, idPrefix));
|
||||
}
|
||||
|
||||
if (entryRoute.meta.order !== undefined) {
|
||||
nextMeta.order = entryRoute.meta.order;
|
||||
}
|
||||
|
||||
wrappedDomainRoute.meta = nextMeta;
|
||||
return baseRoute;
|
||||
}
|
||||
|
||||
const wrappedDomainRoute = cloneStaticRoutePreservingBackendMeta(
|
||||
staticDomainRoute,
|
||||
`object-context:${config.domainKey}`
|
||||
);
|
||||
|
||||
// Merge entry route's meta to domain route
|
||||
if (entryRoute.meta) {
|
||||
wrappedDomainRoute.meta = {
|
||||
...wrappedDomainRoute.meta,
|
||||
title: entryRoute.meta.title || wrappedDomainRoute.meta?.title || config.domainKey,
|
||||
icon: entryRoute.meta.icon || wrappedDomainRoute.meta?.icon,
|
||||
localIcon: entryRoute.meta.localIcon || wrappedDomainRoute.meta?.localIcon,
|
||||
order:
|
||||
entryRoute.meta.order !== undefined && entryRoute.meta.order !== null
|
||||
? entryRoute.meta.order
|
||||
: wrappedDomainRoute.meta?.order,
|
||||
keepAlive:
|
||||
entryRoute.meta.keepAlive !== undefined && entryRoute.meta.keepAlive !== null
|
||||
? entryRoute.meta.keepAlive
|
||||
: wrappedDomainRoute.meta?.keepAlive
|
||||
};
|
||||
}
|
||||
|
||||
const entryRouteIndex = normalizedRoutes.findIndex(route => route.id === entryRoute.id);
|
||||
const domainRouteIds = new Set(domainTopLevelRoutes.map(route => route.id));
|
||||
|
||||
normalizedRoutes = normalizedRoutes.filter(route => !domainRouteIds.has(route.id));
|
||||
normalizedRoutes.splice(entryRouteIndex < 0 ? normalizedRoutes.length : entryRouteIndex, 0, wrappedDomainRoute);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user