feat: restore lightweight admin modules

This commit is contained in:
2026-06-21 22:40:17 +08:00
parent 81ce2c4f0a
commit 288d71cca7
4 changed files with 111 additions and 1 deletions
+89 -1
View File
@@ -17,11 +17,12 @@ from core.menu.schema import MenuCreate, MenuUpdate
menu_cache = CacheManager(prefix="menu:") menu_cache = CacheManager(prefix="menu:")
# 缓存key # 缓存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}" 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}:" USER_ROUTE_CACHE_PREFIX = f"user_route:ai_agent_admin:{AI_AGENT_ADMIN_MENU_CACHE_VERSION}:"
AI_AGENT_ADMIN_MENU_NAMES = { AI_AGENT_ADMIN_MENU_NAMES = {
"AccountSettings",
"ControlCenter", "ControlCenter",
"AIPlatform", "AIPlatform",
"AIAgent", "AIAgent",
@@ -33,29 +34,116 @@ AI_AGENT_ADMIN_MENU_NAMES = {
"SystemManagement", "SystemManagement",
"SystemPermission", "SystemPermission",
"UserManagement", "UserManagement",
"SystemDept",
"SystemMenu", "SystemMenu",
"SystemPost",
"SystemDict",
"SystemFileManager",
"SystemRole", "SystemRole",
"SystemConfigManager",
"UIConfigManager",
"Message", "Message",
"MessageList", "MessageList",
"AnnouncementList", "AnnouncementList",
"AnnouncementManage", "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]: def _filter_ai_agent_admin_menus(menus: List[Menu]) -> List[Menu]:
"""Keep only the lightweight admin and AI modules for this product.""" """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] filtered = [menu for menu in menus if menu.name in AI_AGENT_ADMIN_MENU_NAMES]
for menu in filtered: for menu in filtered:
_normalize_ai_agent_admin_menu(menu) _normalize_ai_agent_admin_menu(menu)
_normalize_ai_agent_admin_parentage(filtered)
return filtered return filtered
def _normalize_ai_agent_admin_menu(menu: Menu) -> None: def _normalize_ai_agent_admin_menu(menu: Menu) -> None:
"""Keep the retained control center on the original configurable dashboard.""" """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": if menu.name == "ControlCenter":
menu.path = "/page-render/main_home" menu.path = "/page-render/main_home"
menu.component = "/_core/page-render/index" menu.component = "/_core/page-render/index"
menu.query = {"pageCode": "main_home"} 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]): class MenuService(BaseService[Menu, MenuCreate, MenuUpdate]):
+2
View File
@@ -17,12 +17,14 @@ from core.role.schema import RoleCreate, RoleUpdate
def _filter_ai_agent_admin_role_menus(menus: List[Any]) -> List[Any]: def _filter_ai_agent_admin_role_menus(menus: List[Any]) -> List[Any]:
from core.menu.service import ( from core.menu.service import (
AI_AGENT_ADMIN_MENU_NAMES, AI_AGENT_ADMIN_MENU_NAMES,
_normalize_ai_agent_admin_parentage,
_normalize_ai_agent_admin_menu, _normalize_ai_agent_admin_menu,
) )
filtered = [menu for menu in menus if menu.name in AI_AGENT_ADMIN_MENU_NAMES] filtered = [menu for menu in menus if menu.name in AI_AGENT_ADMIN_MENU_NAMES]
for menu in filtered: for menu in filtered:
_normalize_ai_agent_admin_menu(menu) _normalize_ai_agent_admin_menu(menu)
_normalize_ai_agent_admin_parentage(filtered)
return filtered return filtered
+5
View File
@@ -171,16 +171,21 @@ function filterAvailableRoutes<
async function generateAccess(options: GenerateMenuAndRoutesOptions) { async function generateAccess(options: GenerateMenuAndRoutesOptions) {
const pageMap: ComponentRecordType = import.meta.glob([ const pageMap: ComponentRecordType = import.meta.glob([
'../views/_core/account-settings/index.vue',
'../views/_core/agent-chat/**/*.vue', '../views/_core/agent-chat/**/*.vue',
'../views/_core/announcement/index.vue', '../views/_core/announcement/index.vue',
'../views/_core/announcement/list.vue', '../views/_core/announcement/list.vue',
'../views/_core/authentication/login.vue', '../views/_core/authentication/login.vue',
'../views/_core/dept/index.vue',
'../views/_core/dict/index.vue',
'../views/_core/fallback/**/*.vue', '../views/_core/fallback/**/*.vue',
'../views/_core/file-manager/index.vue',
'../views/_core/file-preview/index.vue', '../views/_core/file-preview/index.vue',
'../views/_core/menu/index.vue', '../views/_core/menu/index.vue',
'../views/_core/message/index.vue', '../views/_core/message/index.vue',
'../views/_core/page-render/index.vue', '../views/_core/page-render/index.vue',
'../views/_core/permission/index.vue', '../views/_core/permission/index.vue',
'../views/_core/post/index.vue',
'../views/_core/role/index.vue', '../views/_core/role/index.vue',
'../views/_core/system-config/index.vue', '../views/_core/system-config/index.vue',
'../views/_core/ui-config/index.vue', '../views/_core/ui-config/index.vue',
+15
View File
@@ -1,4 +1,5 @@
export const LIGHT_MENU_NAMES = new Set([ export const LIGHT_MENU_NAMES = new Set([
'AccountSettings',
'ControlCenter', 'ControlCenter',
'AIAgent', 'AIAgent',
'AIKnowledgeDetail', 'AIKnowledgeDetail',
@@ -13,12 +14,18 @@ export const LIGHT_MENU_NAMES = new Set([
'MessageCenter', 'MessageCenter',
'MessageList', 'MessageList',
'KnowledgeBase', 'KnowledgeBase',
'SystemDept',
'SystemDict',
'SystemFileManager',
'SystemManagement', 'SystemManagement',
'SystemConfig', 'SystemConfig',
'SystemConfigManager',
'SystemMenu', 'SystemMenu',
'SystemPermission', 'SystemPermission',
'SystemPost',
'SystemRole', 'SystemRole',
'UIConfig', 'UIConfig',
'UIConfigManager',
'UserManagement', 'UserManagement',
]); ]);
@@ -35,12 +42,20 @@ const LIGHT_ROUTE_PATH_PREFIXES = [
'/message/announcement', '/message/announcement',
'/message/announcement-list', '/message/announcement-list',
'/page-render/main_home', '/page-render/main_home',
'/core/ui-config',
'/system-config',
'/system/dept',
'/system/dict',
'/system/file-manager',
'/system/post',
'/system/config', '/system/config',
'/system/menu', '/system/menu',
'/system/new-permission', '/system/new-permission',
'/system/role', '/system/role',
'/system/ui-config', '/system/ui-config',
'/system/user', '/system/user',
'/tool/dict',
'/user-center',
]; ];
export function isLightMenuName(name?: string) { export function isLightMenuName(name?: string) {