Files
hzdyjs/backend/script/sql/fix_graduate_menu_structure.sql
T
2025-07-30 23:24:43 +08:00

85 lines
2.7 KiB
SQL

-- ==================================================
-- 修复毕业生菜单结构 - 404错误解决方案
-- 创建日期: 2025-01-26
-- 说明: 将错误的C类型嵌套改为正确的M类型目录+C类型页面结构
-- ==================================================
-- 1. 查看修复前的结构
SELECT '=== 修复前的菜单结构 ===' as info;
SELECT menu_id, parent_id, menu_name, path, component, menu_type, visible
FROM sys_menu
WHERE menu_id BETWEEN 8800 AND 8804
ORDER BY menu_id;
-- 2. 删除现有的错误权限关联
DELETE FROM sys_role_menu WHERE menu_id BETWEEN 8801 AND 8816;
-- 3. 重新创建毕业生管理目录菜单(M类型)
INSERT INTO sys_menu (
menu_id, menu_name, parent_id, order_num, path, component,
query_param, is_frame, is_cache, menu_type, visible, status,
perms, icon, create_by, create_time, update_by, update_time, remark
) VALUES (
8800, '毕业生管理', 8000, 3, 'graduate', NULL,
NULL, 1, 0, 'M', '0', '0',
NULL, 'education', 103, NOW(), 103, NOW(), '毕业生信息管理目录'
);
-- 4. 修改现有菜单的parent_id和path,改为正确的目录结构
UPDATE sys_menu SET
parent_id = 8800,
path = 'info',
order_num = 1
WHERE menu_id = 8801;
UPDATE sys_menu SET
parent_id = 8800,
path = 'info/add',
order_num = 2,
visible = '1'
WHERE menu_id = 8802;
UPDATE sys_menu SET
parent_id = 8800,
path = 'info/edit/:id(\\d+)',
order_num = 3,
visible = '1'
WHERE menu_id = 8803;
UPDATE sys_menu SET
parent_id = 8800,
path = 'statistics',
order_num = 4
WHERE menu_id = 8804;
-- 5. 重新分配权限给超级管理员
INSERT INTO sys_role_menu (role_id, menu_id) VALUES
(1, 8800), -- 毕业生管理目录菜单
(1, 8801), -- 毕业生信息子菜单
(1, 8802), -- 毕业生信息新增页面
(1, 8803), -- 毕业生信息编辑页面
(1, 8804), -- 毕业生统计分析页面
(1, 8810), -- 毕业生信息查询权限
(1, 8811), -- 毕业生信息新增权限
(1, 8812), -- 毕业生信息修改权限
(1, 8813), -- 毕业生信息删除权限
(1, 8814), -- 毕业生信息导出权限
(1, 8815), -- 毕业生信息审核权限
(1, 8816); -- 毕业生统计分析权限
-- 6. 验证修复后的结构
SELECT '=== 修复后的菜单结构 ===' as info;
SELECT menu_id, parent_id, menu_name, path, component, menu_type, visible
FROM sys_menu
WHERE menu_id BETWEEN 8800 AND 8804
ORDER BY menu_id;
-- 7. 验证权限分配结果
SELECT '=== 超级管理员权限分配验证 ===' as info;
SELECT rm.role_id, r.role_name, rm.menu_id, m.menu_name, m.path
FROM sys_role_menu rm
JOIN sys_role r ON rm.role_id = r.role_id
JOIN sys_menu m ON rm.menu_id = m.menu_id
WHERE rm.role_id = 1 AND rm.menu_id BETWEEN 8800 AND 8816
ORDER BY rm.menu_id;