xinli/Archive/菜单不显示-解决方案.md
2026-01-30 16:23:31 +08:00

6.1 KiB
Raw Blame History

知识库管理菜单不显示 - 完整解决方案

当前状态

SQL执行成功
直接访问URL可以打开页面http://localhost:30081/#/psychology/knowledge
左侧菜单不显示"知识库管理"

原因分析

页面能访问说明:

  • 后端API正常
  • 前端页面存在
  • 路由配置正确

菜单不显示的原因:

  • 用户权限未刷新
  • 角色权限未分配
  • 菜单状态不正确

解决步骤

步骤1验证菜单是否添加成功

执行验证SQL验证菜单.sql

-- 查看知识库管理菜单
SELECT menu_id, menu_name, parent_id, path, component, perms, visible, status
FROM sys_menu 
WHERE menu_name = '知识库管理';

预期结果应该返回1条记录

步骤2检查角色权限

-- 查看角色是否有知识库管理权限
SELECT rm.role_id, r.role_name, m.menu_id, m.menu_name
FROM sys_role_menu rm
INNER JOIN sys_role r ON rm.role_id = r.role_id
INNER JOIN sys_menu m ON rm.menu_id = m.menu_id
WHERE m.menu_name LIKE '知识库%'
ORDER BY rm.role_id, m.menu_id;

如果没有结果说明权限未分配执行步骤3

步骤3手动分配权限

-- 为管理员角色role_id=1添加知识库权限
INSERT INTO sys_role_menu (role_id, menu_id)
SELECT 1, menu_id FROM sys_menu 
WHERE menu_name LIKE '知识库%'
AND NOT EXISTS (
    SELECT 1 FROM sys_role_menu 
    WHERE role_id = 1 AND sys_role_menu.menu_id = sys_menu.menu_id
);

步骤4退出登录重新登录 重要

必须退出登录后重新登录!

原因:用户的菜单权限在登录时加载,不会自动刷新。

操作:

  1. 点击右上角用户名
  2. 选择"退出登录"
  3. 重新登录
  4. 查看左侧菜单

步骤5强制刷新浏览器

如果还是不显示:

  1. Ctrl + Shift + Delete 清除缓存
  2. 或按 Ctrl + F5 强制刷新
  3. 或使用无痕模式重新登录

快速解决方案

如果上述步骤太复杂,直接执行以下操作:

方案A一键修复SQL

-- 一键修复脚本
-- 1. 删除可能存在的旧数据
DELETE FROM sys_role_menu 
WHERE menu_id IN (
    SELECT menu_id FROM sys_menu WHERE menu_name LIKE '知识库%'
);

DELETE FROM sys_menu WHERE menu_name LIKE '知识库%';

-- 2. 重新添加菜单
INSERT INTO sys_menu (
    menu_name, parent_id, order_num, path, component, 
    is_frame, is_cache, menu_type, visible, status, 
    perms, icon, create_by, create_time, remark
) VALUES (
    '知识库管理', 
    (SELECT menu_id FROM (SELECT menu_id FROM sys_menu WHERE menu_name LIKE '%心理测评%' LIMIT 1) AS t),
    8, 'knowledge', 'psychology/knowledge/index',
    1, 0, 'C', '0', '0',
    'psychology:knowledge:list', 'documentation', 'admin', NOW(), 'AI知识库文档管理'
);

-- 3. 获取菜单ID
SET @menu_id = LAST_INSERT_ID();

-- 4. 添加按钮权限
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time)
VALUES 
('知识库查询', @menu_id, 1, '#', '', 1, 0, 'F', '0', '0', 'psychology:knowledge:query', '#', 'admin', NOW()),
('知识库上传', @menu_id, 2, '#', '', 1, 0, 'F', '0', '0', 'psychology:knowledge:upload', '#', 'admin', NOW()),
('知识库删除', @menu_id, 3, '#', '', 1, 0, 'F', '0', '0', 'psychology:knowledge:remove', '#', 'admin', NOW()),
('知识库重建', @menu_id, 4, '#', '', 1, 0, 'F', '0', '0', 'psychology:knowledge:rebuild', '#', 'admin', NOW());

-- 5. 为所有管理员角色分配权限
INSERT INTO sys_role_menu (role_id, menu_id)
SELECT r.role_id, m.menu_id 
FROM sys_role r
CROSS JOIN sys_menu m
WHERE r.role_key = 'admin' 
AND m.menu_name LIKE '知识库%'
AND NOT EXISTS (
    SELECT 1 FROM sys_role_menu rm 
    WHERE rm.role_id = r.role_id AND rm.menu_id = m.menu_id
);

-- 6. 完成
SELECT '修复完成!请退出登录后重新登录' AS message;

方案B通过系统界面添加

  1. 登录系统
  2. 进入"系统管理" → "菜单管理"
  3. 找到"心理测评管理"
  4. 点击"新增"
  5. 填写信息:
    • 菜单名称:知识库管理
    • 显示排序:8
    • 路由地址:knowledge
    • 组件路径:psychology/knowledge/index
    • 菜单类型:目录
    • 菜单图标:documentation
    • 权限标识:psychology:knowledge:list
    • 显示状态:显示
    • 菜单状态:正常
  6. 保存
  7. 进入"系统管理" → "角色管理"
  8. 编辑管理员角色
  9. 勾选"知识库管理"权限
  10. 保存
  11. 退出登录重新登录

临时访问方案

在菜单修复之前,可以直接访问:

http://localhost:30081/#/psychology/knowledge

或者在浏览器收藏夹添加此链接。

检查清单

  • SQL执行成功
  • 验证菜单已添加执行验证SQL
  • 验证角色权限已分配
  • 退出登录
  • 重新登录
  • 清除浏览器缓存
  • 强制刷新页面Ctrl+F5
  • 查看左侧菜单

最终验证

执行以下SQL确认一切正常

-- 最终验证
SELECT 
    m.menu_name AS '菜单名称',
    m.path AS '路由',
    m.component AS '组件',
    m.visible AS '可见',
    m.status AS '状态',
    COUNT(rm.role_id) AS '分配角色数'
FROM sys_menu m
LEFT JOIN sys_role_menu rm ON m.menu_id = rm.menu_id
WHERE m.menu_name LIKE '知识库%'
GROUP BY m.menu_id
ORDER BY m.menu_id;

预期结果

  • 知识库管理:分配角色数 > 0
  • 所有菜单:可见=0状态=0

常见问题

Q: 执行SQL后还是不显示

A: 必须退出登录重新登录! 这是最关键的步骤。

Q: 重新登录后还是不显示?

A:

  1. 清除浏览器缓存
  2. 使用无痕模式登录
  3. 检查角色权限是否真的分配了

Q: 其他用户看不到?

A: 需要为对应的角色分配权限:

-- 为指定角色添加权限将2改为实际角色ID
INSERT INTO sys_role_menu (role_id, menu_id)
SELECT 2, menu_id FROM sys_menu WHERE menu_name LIKE '知识库%';

Q: 菜单显示但点击404

A: 检查前端页面是否存在:

xinli-ui/src/views/psychology/knowledge/index.vue

记住执行SQL后必须退出登录重新登录 🔑