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

234 lines
6.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 知识库管理菜单不显示 - 完整解决方案
## 当前状态
✅ 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后必须退出登录重新登录** 🔑