4.3 KiB
4.3 KiB
用户管理菜单问题诊断和修复
问题1:用户管理变成按钮,子菜单消失
原因分析
后端通过以下逻辑识别父子关系:
- 通过 path 中的斜杠数量判断(2个以上斜杠=子路由)
- 通过角色配置的 menus 字段过滤路由
- 如果子路由不在 menus 中,会被过滤掉
检查步骤
-
检查数据库中的路由名称
SELECT route_id, name, path FROM sys_route WHERE route_id IN ('user_manage', 'user_list', 'user_role', 'user_permission');应该显示:
- user_manage → name = 'user-manage'
- user_list → name = 'user-manage_list'
- user_role → name = 'user-manage_role'
- user_permission → name = 'user-manage_permission'
-
检查角色配置
SELECT menus FROM sys_role WHERE role_code = 'R_SUPER';应该包含:
user-manage,user-manage_list,user-manage_role,user-manage_permission -
查看后端日志 重启后端,登录后查看控制台输出:
- "允许访问的菜单" 应该包含所有4个路由
- "路由: user-manage_list - 是否允许: true"
修复方案
如果子路由被过滤掉,说明角色配置中缺少这些路由名称。
运行以下SQL确保角色配置正确:
UPDATE sys_role
SET menus = 'device,device_list,device_group,device_monitor,device_online,device_power,screen,screen_wall,screen_control,screen_record,user-manage,user-manage_list,user-manage_role,user-manage_permission,application,application_approval,application_history,system,system_agent,system_amt,system_log,my-device,my-device_status,my-device_remote-control,my-device_power-control,my-application,my-application_apply,my-application_my-list'
WHERE role_code = 'R_SUPER';
问题2:某些菜单点击要全屏
原因
某些路由的 meta 配置中可能设置了 multiTab: false 或其他全屏相关配置。
检查方法
查看路由的 meta 字段:
SELECT route_id, name, meta FROM sys_route
WHERE name IN ('需要检查的路由名称');
修复方案
如果不需要全屏,确保 meta 中没有设置全屏相关的配置。标准的 meta 应该是:
{"title":"标题","i18nKey":"route.xxx","icon":"mdi:icon-name","order":1}
如果需要在标签页中打开(不全屏),不要添加特殊的全屏配置。
快速修复脚本
创建 final_fix.sql:
USE soybean_admin;
-- 1. 确保路由名称正确
UPDATE sys_route SET name = 'user-manage' WHERE route_id = 'user_manage';
UPDATE sys_route SET name = 'user-manage_list' WHERE route_id = 'user_list';
UPDATE sys_route SET name = 'user-manage_role' WHERE route_id = 'user_role';
UPDATE sys_route SET name = 'user-manage_permission' WHERE route_id = 'user_permission';
-- 2. 确保组件路径正确
UPDATE sys_route SET component = 'layout.base' WHERE route_id = 'user_manage';
UPDATE sys_route SET component = 'view.user-manage_list' WHERE route_id = 'user_list';
UPDATE sys_route SET component = 'view.user-manage_role' WHERE route_id = 'user_role';
UPDATE sys_route SET component = 'view.user-manage_permission' WHERE route_id = 'user_permission';
-- 3. 更新角色配置(关键!)
UPDATE sys_role
SET menus = 'device,device_list,device_group,device_monitor,device_online,device_power,screen,screen_wall,screen_control,screen_record,user-manage,user-manage_list,user-manage_role,user-manage_permission,application,application_approval,application_history,system,system_agent,system_amt,system_log,my-device,my-device_status,my-device_remote-control,my-device_power-control,my-application,my-application_apply,my-application_my-list'
WHERE role_code = 'R_SUPER';
-- 4. 验证
SELECT '=== 路由配置 ===' AS '';
SELECT route_id, name, path, component FROM sys_route
WHERE route_id LIKE 'user%' ORDER BY order_num;
SELECT '=== 角色配置(前100字符)===' AS '';
SELECT role_code, SUBSTRING(menus, 1, 150) FROM sys_role WHERE role_code = 'R_SUPER';
执行步骤
- 运行
final_fix.sql - 重启后端服务
- 清除浏览器缓存
- 刷新页面
- 查看后端控制台日志,确认子路由没有被过滤
预期结果
- 用户管理显示为带下拉箭头的菜单项
- 点击展开后显示三个子菜单:用户列表、角色管理、权限管理
- 点击子菜单可以正常跳转并在标签页中打开