service.xpcool.com/manifest/sql/recruitment/003_menu.sql
夏犀麟 743683efdd fix(recruitment): 菜单种子主键冲突,招聘中心 95→96 避免覆盖新房预售
003_menu.sql 的招聘中心一级菜单写死 id=95,与 014_house_presale_menu.sql 的
新房预售菜单(id=95,挂看房中心 90)ON DUPLICATE 互相覆盖,后导入者赢。
本地已实际发生覆盖。改为 id=96,951-954 父级同步改 96,超管角色绑定列表同步。
2026-08-27 12:22:50 +08:00

60 lines
5.4 KiB
Go
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.

-- 003_menu.sql
-- 招聘考试聚合模块菜单 + API 权限种子
-- 约定 011_house_menu.sql 一致
-- type=1 菜单component 指向 views/<path>/index不含 views/ 前缀与 .vue 后缀
-- permission 用于前端侧边栏可见性
-- type=2 按钮path 为完整 "METHOD /api/service/admin/..."permission RBAC 权限码
-- RBAC 中间件按 method+path 反查该权限码并校验管理员是否持有
-- 依赖先执行 001_init.sql + 002_seed_sources.sqladmin_menu/admin_role_menu 已存在
-- 幂等INSERT ... ON DUPLICATE KEY UPDATE + INSERT IGNORE可重复执行
-- ============ 1) 招聘中心菜单type=1 ============
INSERT INTO admin_menu (id, parent_id, name, icon, type, path, component, permission, sort, status, hidden, created_at, updated_at) VALUES
(96, 0, '招聘中心', 'mdi:briefcase-search', 1, '/recruitment', '', 'recruitment:center', 7, 1, 0, NOW(), NOW()),
(951, 96, '招聘公告', 'mdi:file-document', 1, 'recruitment/info', 'recruitment/info/index', 'recruitment:info', 1, 1, 0, NOW(), NOW()),
(952, 96, '数据看板', 'mdi:chart-box', 1, 'recruitment/dashboard','recruitment/dashboard/index','recruitment:dashboard', 2, 1, 0, NOW(), NOW()),
(953, 96, '数据源', 'mdi:web-sync', 1, 'recruitment/crawler', 'recruitment/crawler/index', 'recruitment:crawler', 3, 1, 0, NOW(), NOW()),
(954, 96, '推送订阅', 'mdi:bell-ring', 1, 'recruitment/push', 'recruitment/push/index', 'recruitment:push', 4, 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) 招聘公告按钮type=2 ============
INSERT INTO admin_menu (id, parent_id, name, icon, type, path, component, permission, sort, status, hidden, created_at, updated_at) VALUES
(9510, 951, '查询', '', 2, 'POST /api/service/admin/recruitment/info/list', '', 'recruitment:info:list', 1, 1, 0, NOW(), NOW()),
(9511, 951, '详情', '', 2, 'POST /api/service/admin/recruitment/info/detail', '', 'recruitment:info:detail', 2, 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;
-- ============ 3) 数据看板按钮type=2 ============
INSERT INTO admin_menu (id, parent_id, name, icon, type, path, component, permission, sort, status, hidden, created_at, updated_at) VALUES
(9520, 952, '统计', '', 2, 'POST /api/service/admin/recruitment/stats', '', 'recruitment:dashboard:stats', 1, 1, 0, NOW(), NOW()),
(9521, 952, '趋势', '', 2, 'POST /api/service/admin/recruitment/trend', '', 'recruitment:dashboard:trend', 2, 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;
-- ============ 4) 数据源按钮type=2 ============
INSERT INTO admin_menu (id, parent_id, name, icon, type, path, component, permission, sort, status, hidden, created_at, updated_at) VALUES
(9530, 953, '列表', '', 2, 'POST /api/service/admin/recruitment/source/list', '', 'recruitment:crawler:list', 1, 1, 0, NOW(), NOW()),
(9531, 953, '触发', '', 2, 'POST /api/service/admin/recruitment/crawl/trigger', '', 'recruitment:crawler:trigger', 2, 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;
-- ============ 5) 推送订阅按钮type=2 ============
INSERT INTO admin_menu (id, parent_id, name, icon, type, path, component, permission, sort, status, hidden, created_at, updated_at) VALUES
(9540, 954, '列表', '', 2, 'POST /api/service/admin/recruitment/subscription/list', '', 'recruitment:push:list', 1, 1, 0, NOW(), NOW()),
(9541, 954, '测试', '', 2, 'POST /api/service/admin/recruitment/push/test', '', 'recruitment:push:test', 2, 1, 0, NOW(), NOW()),
(9542, 954, '保存', '', 2, 'POST /api/service/admin/recruitment/subscription/save', '', 'recruitment:push:save', 3, 1, 0, NOW(), NOW()),
(9543, 954, '删除', '', 2, 'POST /api/service/admin/recruitment/subscription/delete', '', 'recruitment:push:delete', 4, 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;
-- ============ 6) 超管角色绑定新菜单role_id=1 超管 ============
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 (96,951,952,953,954,9510,9511,9520,9521,9530,9531,9540,9541,9542,9543);