diff --git a/backend-fastapi/core/menu/service.py b/backend-fastapi/core/menu/service.py index 5903f91..a0d36fa 100644 --- a/backend-fastapi/core/menu/service.py +++ b/backend-fastapi/core/menu/service.py @@ -17,11 +17,12 @@ from core.menu.schema import MenuCreate, MenuUpdate menu_cache = CacheManager(prefix="menu:") # 缓存key -AI_AGENT_ADMIN_MENU_CACHE_VERSION = "v13" +AI_AGENT_ADMIN_MENU_CACHE_VERSION = "v16" MENU_TREE_CACHE_KEY = f"tree:ai_agent_admin:{AI_AGENT_ADMIN_MENU_CACHE_VERSION}" USER_ROUTE_CACHE_PREFIX = f"user_route:ai_agent_admin:{AI_AGENT_ADMIN_MENU_CACHE_VERSION}:" AI_AGENT_ADMIN_MENU_NAMES = { + "AccountSettings", "ControlCenter", "AIPlatform", "AIAgent", @@ -33,29 +34,116 @@ AI_AGENT_ADMIN_MENU_NAMES = { "SystemManagement", "SystemPermission", "UserManagement", + "SystemDept", "SystemMenu", + "SystemPost", + "SystemDict", + "SystemFileManager", "SystemRole", + "SystemConfigManager", + "UIConfigManager", "Message", "MessageList", "AnnouncementList", "AnnouncementManage", } +AI_AGENT_ADMIN_VISIBLE_MENU_NAMES = { + "ControlCenter", + "AIPlatform", + "AIAgent", + "AIModelConfig", + "AIWorkflow", + "AIWorkflowRuns", + "CodexAgentChat", + "KnowledgeBase", + "SystemManagement", + "SystemPermission", + "UserManagement", + "SystemDept", + "SystemMenu", + "SystemPost", + "SystemDict", + "SystemFileManager", + "SystemRole", + "SystemConfigManager", + "UIConfigManager", + "Message", + "MessageList", + "AnnouncementList", + "AnnouncementManage", +} + +AI_AGENT_ADMIN_SYSTEM_CHILD_MENU_NAMES = { + "SystemPermission", + "UserManagement", + "SystemDept", + "SystemMenu", + "SystemPost", + "SystemDict", + "SystemFileManager", + "SystemRole", + "UIConfigManager", +} + +AI_AGENT_ADMIN_MENU_OVERRIDES = { + "SystemConfigManager": { + "component": "/_core/system-config/index", + "path": "/system-config", + "title": "系统配置", + }, + "SystemDict": { + "component": "/_core/dict/index", + "path": "/system/dict", + }, + "SystemFileManager": { + "component": "/_core/file-manager/index", + "path": "/system/file-manager", + }, + "UIConfigManager": { + "component": "/_core/ui-config/index", + "path": "/system/ui-config", + }, +} + def _filter_ai_agent_admin_menus(menus: List[Menu]) -> List[Menu]: """Keep only the lightweight admin and AI modules for this product.""" filtered = [menu for menu in menus if menu.name in AI_AGENT_ADMIN_MENU_NAMES] for menu in filtered: _normalize_ai_agent_admin_menu(menu) + _normalize_ai_agent_admin_parentage(filtered) return filtered def _normalize_ai_agent_admin_menu(menu: Menu) -> None: """Keep the retained control center on the original configurable dashboard.""" + overrides = AI_AGENT_ADMIN_MENU_OVERRIDES.get(menu.name) + if overrides: + for key, value in overrides.items(): + setattr(menu, key, value) if menu.name == "ControlCenter": menu.path = "/page-render/main_home" menu.component = "/_core/page-render/index" menu.query = {"pageCode": "main_home"} + if menu.name in AI_AGENT_ADMIN_VISIBLE_MENU_NAMES: + menu.hideInMenu = False + + +def _normalize_ai_agent_admin_parentage(menus: List[Menu]) -> None: + """Attach retained system children back to the lightweight system catalog.""" + retained_ids = {menu.id for menu in menus} + system_menu = next( + (menu for menu in menus if menu.name == "SystemManagement"), + None, + ) + for menu in menus: + if not menu.parent_id or menu.parent_id in retained_ids: + continue + if system_menu and menu.name in AI_AGENT_ADMIN_SYSTEM_CHILD_MENU_NAMES: + menu.parent_id = system_menu.id + else: + menu.parent_id = None class MenuService(BaseService[Menu, MenuCreate, MenuUpdate]): diff --git a/backend-fastapi/core/role/service.py b/backend-fastapi/core/role/service.py index 47dfbb5..6149ef9 100644 --- a/backend-fastapi/core/role/service.py +++ b/backend-fastapi/core/role/service.py @@ -17,12 +17,14 @@ from core.role.schema import RoleCreate, RoleUpdate def _filter_ai_agent_admin_role_menus(menus: List[Any]) -> List[Any]: from core.menu.service import ( AI_AGENT_ADMIN_MENU_NAMES, + _normalize_ai_agent_admin_parentage, _normalize_ai_agent_admin_menu, ) filtered = [menu for menu in menus if menu.name in AI_AGENT_ADMIN_MENU_NAMES] for menu in filtered: _normalize_ai_agent_admin_menu(menu) + _normalize_ai_agent_admin_parentage(filtered) return filtered diff --git a/web/apps/web-ele/src/router/access.ts b/web/apps/web-ele/src/router/access.ts index c2938f6..6a514a4 100644 --- a/web/apps/web-ele/src/router/access.ts +++ b/web/apps/web-ele/src/router/access.ts @@ -171,16 +171,21 @@ function filterAvailableRoutes< async function generateAccess(options: GenerateMenuAndRoutesOptions) { const pageMap: ComponentRecordType = import.meta.glob([ + '../views/_core/account-settings/index.vue', '../views/_core/agent-chat/**/*.vue', '../views/_core/announcement/index.vue', '../views/_core/announcement/list.vue', '../views/_core/authentication/login.vue', + '../views/_core/dept/index.vue', + '../views/_core/dict/index.vue', '../views/_core/fallback/**/*.vue', + '../views/_core/file-manager/index.vue', '../views/_core/file-preview/index.vue', '../views/_core/menu/index.vue', '../views/_core/message/index.vue', '../views/_core/page-render/index.vue', '../views/_core/permission/index.vue', + '../views/_core/post/index.vue', '../views/_core/role/index.vue', '../views/_core/system-config/index.vue', '../views/_core/ui-config/index.vue', diff --git a/web/apps/web-ele/src/router/light-menu.ts b/web/apps/web-ele/src/router/light-menu.ts index b4877cd..a13b7cd 100644 --- a/web/apps/web-ele/src/router/light-menu.ts +++ b/web/apps/web-ele/src/router/light-menu.ts @@ -1,4 +1,5 @@ export const LIGHT_MENU_NAMES = new Set([ + 'AccountSettings', 'ControlCenter', 'AIAgent', 'AIKnowledgeDetail', @@ -13,12 +14,18 @@ export const LIGHT_MENU_NAMES = new Set([ 'MessageCenter', 'MessageList', 'KnowledgeBase', + 'SystemDept', + 'SystemDict', + 'SystemFileManager', 'SystemManagement', 'SystemConfig', + 'SystemConfigManager', 'SystemMenu', 'SystemPermission', + 'SystemPost', 'SystemRole', 'UIConfig', + 'UIConfigManager', 'UserManagement', ]); @@ -35,12 +42,20 @@ const LIGHT_ROUTE_PATH_PREFIXES = [ '/message/announcement', '/message/announcement-list', '/page-render/main_home', + '/core/ui-config', + '/system-config', + '/system/dept', + '/system/dict', + '/system/file-manager', + '/system/post', '/system/config', '/system/menu', '/system/new-permission', '/system/role', '/system/ui-config', '/system/user', + '/tool/dict', + '/user-center', ]; export function isLightMenuName(name?: string) {