export const LIGHT_MENU_NAMES = new Set([ 'AccountSettings', 'AIAgent', 'AIAgentEditor', 'AgentChat', 'AIKnowledgeDetail', 'AIKnowledgeLegacyDetailRedirect', 'AIKnowledgeLegacyRedirect', 'AIModelConfig', 'AIPlatform', 'AIWorkflow', 'AIWorkflowEditor', 'AIWorkflowRuns', 'AnnouncementList', 'AnnouncementManage', 'CodexAgentChat', 'Message', 'MessageCenter', 'MessageList', 'KnowledgeBase', 'SystemManagement', 'SystemMenu', 'SystemPermission', 'SystemRole', 'PageRenderMainHome', 'SubAppAIAgentEditor', 'SubAppAgentChat', 'SubAppAIKnowledgeDetail', 'SubAppAIKnowledgeLegacyDetailRedirect', 'SubAppAIKnowledgeLegacyRedirect', 'SubAppAIModelConfig', 'SubAppAIWorkflowEditor', 'SubAppAIWorkflowRuns', 'UserManagement', 'userCenter', 'userSettings', ]); 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', '/agent-chat', '/message/list', '/message/announcement', '/message/announcement-list', '/page-render/main_home', '/system/menu', '/system/new-permission', '/system/role', '/system/user', '/user-center', ]; 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[]; }