-- 009_menu_rbac_v5.sql -- 2026-08-26 RBAC 菜单结构调整(二期): -- 1) 系统管理下新增"人员管理"(id=8,组件 system/admin/index,复用管理员接口),按钮 81-85(system:personnel:*,映射原 /admin/* 接口); -- 2) 日志管理(id=7)改为目录,下拆"操作日志"(id=71,组件 system/log/index)与"登录日志"(id=72,组件 system/login-log/index); -- 原按钮 63(system:log:list)改挂到 71 下;新增 721(system:login-log:list,POST /api/service/admin/system/login-log); -- 注意:admin_menu.permission 有唯一索引,菜单行与按钮行权限码必须不同 -- (操作日志菜单=system:operation-log,查询按钮=system:log:list;登录日志菜单=system:login-log,查询按钮=system:login-log:list)。 -- 3) 菜单管理(id=4)图标由 mdi:menu-outline 改为 mdi:file-tree-outline(原图标渲染异常); -- 4) 超管角色绑定新菜单。 -- 依赖:先执行 004_seed.sql + 007_menu_permissions_v3.sql + 008_menu_rbac_v4.sql。 -- 幂等性:INSERT ... ON DUPLICATE KEY UPDATE + UPDATE,可重复执行。 -- ============ 1) 人员管理菜单 + 按钮 ============ INSERT INTO admin_menu (id, parent_id, name, icon, type, path, component, permission, sort, status, hidden, created_at, updated_at) VALUES (8, 1, '人员管理', 'mdi:account-outline', 1, 'personnel', 'system/admin/index', 'system:personnel', 4, 1, 0, NOW(), NOW()), (81, 8, '查询', '', 2, 'POST /api/service/admin/admin/list', '', 'system:personnel:list', 1, 1, 0, NOW(), NOW()), (82, 8, '新增', '', 2, 'POST /api/service/admin/admin/create', '', 'system:personnel:create', 2, 1, 0, NOW(), NOW()), (83, 8, '编辑', '', 2, 'POST /api/service/admin/admin/update/{id}', '', 'system:personnel:update', 3, 1, 0, NOW(), NOW()), (84, 8, '删除', '', 2, 'POST /api/service/admin/admin/delete/{id}', '', 'system:personnel:delete', 4, 1, 0, NOW(), NOW()), (85, 8, '重置密码', '', 2, 'POST /api/service/admin/admin/resetPwd/{id}', '', 'system:personnel:resetPwd', 5, 1, 0, NOW(), NOW()) ON DUPLICATE KEY UPDATE parent_id=VALUES(parent_id), name=VALUES(name), icon=VALUES(icon), type=VALUES(type), path=VALUES(path), component=VALUES(component), permission=VALUES(permission), sort=VALUES(sort), status=VALUES(status), hidden=VALUES(hidden), deleted_at=NULL; -- ============ 2) 日志管理改目录 + 操作日志/登录日志 ============ UPDATE admin_menu SET path='/log', component='', sort=5, deleted_at=NULL WHERE id=7; -- 操作日志菜单(permission=system:operation-log,与按钮 63 的 system:log:list 区分,避免唯一索引冲突) INSERT INTO admin_menu (id, parent_id, name, icon, type, path, component, permission, sort, status, hidden, created_at, updated_at) VALUES (71, 7, '操作日志', 'mdi:clipboard-text-outline', 1, 'operation', 'system/log/index', 'system:operation-log', 1, 1, 0, NOW(), NOW()), (72, 7, '登录日志', 'mdi:login', 1, 'login', 'system/login-log/index', 'system:login-log', 2, 1, 0, NOW(), NOW()), (721, 72, '查询', '', 2, 'POST /api/service/admin/system/login-log', '', 'system:login-log:list', 1, 1, 0, NOW(), NOW()) ON DUPLICATE KEY UPDATE parent_id=VALUES(parent_id), name=VALUES(name), icon=VALUES(icon), type=VALUES(type), path=VALUES(path), component=VALUES(component), permission=VALUES(permission), sort=VALUES(sort), status=VALUES(status), hidden=VALUES(hidden), deleted_at=NULL; -- 原按钮 63(system:log:list)恢复为按钮行并挂到操作日志菜单(71)下 UPDATE admin_menu SET parent_id=71, name='查询', type=2, icon='', path='POST /api/service/admin/system/log', component='', permission='system:log:list', sort=1, status=1, hidden=0, deleted_at=NULL WHERE id=63; -- ============ 3) 菜单管理图标修正 ============ UPDATE admin_menu SET icon='mdi:file-tree-outline' WHERE id=4; -- ============ 4) 超管绑定新菜单 ============ INSERT IGNORE INTO admin_role_menu (role_id, menu_id, created_at, updated_at) SELECT 1, id, NOW(), NOW() FROM admin_menu WHERE id IN (8,81,82,83,84,85,71,72,721);