admin/完整诊断和修复.md

4.3 KiB
Raw Blame History

用户管理菜单问题诊断和修复

问题1用户管理变成按钮子菜单消失

原因分析

后端通过以下逻辑识别父子关系:

  1. 通过 path 中的斜杠数量判断2个以上斜杠=子路由)
  2. 通过角色配置的 menus 字段过滤路由
  3. 如果子路由不在 menus 中,会被过滤掉

检查步骤

  1. 检查数据库中的路由名称

    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'
  2. 检查角色配置

    SELECT menus FROM sys_role WHERE role_code = 'R_SUPER';
    

    应该包含:user-manage,user-manage_list,user-manage_role,user-manage_permission

  3. 查看后端日志 重启后端,登录后查看控制台输出:

    • "允许访问的菜单" 应该包含所有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';

执行步骤

  1. 运行 final_fix.sql
  2. 重启后端服务
  3. 清除浏览器缓存
  4. 刷新页面
  5. 查看后端控制台日志,确认子路由没有被过滤

预期结果

  • 用户管理显示为带下拉箭头的菜单项
  • 点击展开后显示三个子菜单:用户列表、角色管理、权限管理
  • 点击子菜单可以正常跳转并在标签页中打开