Files
ai-agent-admin/web/apps/web-ele/src/router/light-menu.ts
T

83 lines
1.8 KiB
TypeScript

export const LIGHT_MENU_NAMES = new Set([
'AIAgent',
'AIKnowledgeDetail',
'AIModelConfig',
'AIPlatform',
'AIWorkflow',
'AIWorkflowRuns',
'AnnouncementList',
'AnnouncementManage',
'KnowledgeBase',
'SystemManagement',
'SystemMenu',
'SystemPermission',
'SystemRole',
'UserManagement',
]);
const LIGHT_ROUTE_PATH_PREFIXES = [
'/ai-platform/agent',
'/ai-platform/knowledge',
'/ai-platform/knowledge-base',
'/ai-platform/model',
'/ai-platform/workflow',
'/ai-platform/workflow-runs',
'/message/announcement',
'/system/menu',
'/system/new-permission',
'/system/role',
'/system/user',
];
export function isLightMenuName(name?: string) {
return !name || LIGHT_MENU_NAMES.has(name);
}
function normalizePath(path?: string) {
if (!path) return '';
return path.split('?')[0]?.replace(/\/$/, '') || '';
}
export function isLightTabRoute(route: {
fullPath?: string;
matched?: Array<{ name?: unknown; path?: string }>;
name?: unknown;
path?: string;
}) {
if (typeof route.name === 'string' && LIGHT_MENU_NAMES.has(route.name)) {
return true;
}
if (
route.matched?.some(
(item) =>
typeof item.name === 'string' && LIGHT_MENU_NAMES.has(item.name),
)
) {
return true;
}
const path = normalizePath(route.fullPath || route.path);
return LIGHT_ROUTE_PATH_PREFIXES.some(
(prefix) => path === prefix || path.startsWith(`${prefix}/`),
);
}
export function filterLightMenuTree<
T extends { children?: T[]; name?: string },
>(routes: T[]): T[] {
return routes
.map((route) => {
const children = route.children
? filterLightMenuTree(route.children)
: undefined;
if (!isLightMenuName(route.name) && !children?.length) {
return undefined;
}
return children ? { ...route, children } : route;
})
.filter(Boolean) as T[];
}