-- ============================================================ -- 应用管理 / 应用上传 菜单修复与初始化(幂等,可重复执行) -- ------------------------------------------------------------ -- 说明: -- 本项目使用 vue3-element-admin,后端动态菜单约定: -- - 目录(type='C')的 component 必须是 'Layout'(顶层目录必须有 Layout 壳), -- 否则 transformRoutes 不会包裹 Layout,点击进入页面会白屏/一直 loading。 -- - 菜单(type='M')的 component 才是页面路径,如 'app-manager/upload-package/index'。 -- -- 本脚本: -- 1. 修正「应用管理」目录 (route_path=/app-manager) 的 component = 'Layout'(关键修复白屏)。 -- 2. 确保「应用上传」菜单存在且 component 指向正确页面。 -- 3. 授权给 ADMIN 角色 (role_id=2,如不同请改)。 -- ============================================================ -- 1. 修正「应用管理」目录(无论是否已存在,都强制 component='Layout') INSERT INTO sys_menu (parent_id, tree_path, name, type, route_name, route_path, component, perm, always_show, keep_alive, visible, sort, icon, redirect, create_time, update_time, params) SELECT 0, '0', '应用管理', 'C', '', '/app-manager', 'Layout', NULL, 1, NULL, 1, 3, 'box', '/app-manager/upload-package', now(), now(), NULL FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE route_path = '/app-manager' AND type = 'C'); -- 把已存在但 component 不是 Layout 的「应用管理」目录修正为 Layout(关键) UPDATE sys_menu SET component = 'Layout', always_show = 1, redirect = '/app-manager/upload-package', update_time = now() WHERE route_path = '/app-manager' AND type = 'C' AND component <> 'Layout'; -- 2. 确保「应用上传」菜单存在(挂在应用管理目录下) SET @parent_id = (SELECT id FROM sys_menu WHERE route_path = '/app-manager' AND type = 'C' LIMIT 1); INSERT INTO sys_menu (parent_id, tree_path, name, type, route_name, route_path, component, perm, always_show, keep_alive, visible, sort, icon, redirect, create_time, update_time, params) SELECT @parent_id, CONCAT('0,', @parent_id), '应用上传', 'M', 'UploadPackage', 'upload-package', 'app-manager/upload-package/index', NULL, NULL, 1, 1, 1, 'upload', NULL, now(), now(), NULL FROM DUAL WHERE @parent_id IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE component = 'app-manager/upload-package/index'); -- 3. 授权给 ADMIN 角色(role_id=2,如实际不同请修改) SET @menu_id = (SELECT id FROM sys_menu WHERE component = 'app-manager/upload-package/index' LIMIT 1); INSERT IGNORE INTO sys_role_menu (role_id, menu_id) SELECT 2, @menu_id FROM DUAL WHERE @menu_id IS NOT NULL;