xinli/Archive/菜单不显示-解决方案.md

234 lines
6.1 KiB
Markdown
Raw Permalink Normal View History

2026-01-30 16:23:31 +08:00
# 知识库管理菜单不显示 - 完整解决方案
## 当前状态
✅ SQL执行成功
✅ 直接访问URL可以打开页面`http://localhost:30081/#/psychology/knowledge`
❌ 左侧菜单不显示"知识库管理"
## 原因分析
页面能访问说明:
- ✅ 后端API正常
- ✅ 前端页面存在
- ✅ 路由配置正确
菜单不显示的原因:
- ❌ 用户权限未刷新
- ❌ 角色权限未分配
- ❌ 菜单状态不正确
## 解决步骤
### 步骤1验证菜单是否添加成功
执行验证SQL`验证菜单.sql`
```sql
-- 查看知识库管理菜单
SELECT menu_id, menu_name, parent_id, path, component, perms, visible, status
FROM sys_menu
WHERE menu_name = '知识库管理';
```
**预期结果**应该返回1条记录
### 步骤2检查角色权限
```sql
-- 查看角色是否有知识库管理权限
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手动分配权限
```sql
-- 为管理员角色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
```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确认一切正常
```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: 需要为对应的角色分配权限:
```sql
-- 为指定角色添加权限将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后必须退出登录重新登录** 🔑