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