-- 同步全系统功能权限到 t_menu(角色管理-功能权限树数据源) -- 依据前后端 @SaCheckPermission / v-privilege 审计补全 menu_type=3 记录 -- web_perms 全局唯一:已存在则跳过 BEGIN; CREATE TEMP TABLE tmp_sync_perm ( web_perms VARCHAR(128) PRIMARY KEY, api_perms VARCHAR(128) NOT NULL, menu_name VARCHAR(64) NOT NULL, parent_path VARCHAR(256) NOT NULL, sort_num INT NOT NULL DEFAULT 100 ) ON COMMIT DROP; TRUNCATE tmp_sync_perm; -- ========== 接报案中心 ========== INSERT INTO tmp_sync_perm (web_perms, api_perms, menu_name, parent_path, sort_num) VALUES ('alarm:view', 'alarm:detail', '查看', '/business/alarm/alarm-reception-list', 15), ('alarm:audit:query', 'alarm:query', '查询', '/business/alarm/audit-list', 10), ('alarm:audit:do', 'alarm:audit', '审核表决', '/business/alarm/audit-list', 20), ('alarm:extract:query', 'alarm:query', '查询', '/business/alarm/alarm-extract-list', 10), ('alarm:extract:do', 'alarm:query', '110抽取', '/business/alarm/alarm-extract-list', 20), ('alarm:extract:transfer', 'alarm:extract:transfer', '流转', '/business/alarm/alarm-extract-list', 30), ('alarm:extract:mark', 'alarm:query', '标记分类', '/business/alarm/alarm-extract-list', 40), ('alarm:material:query', 'alarm:query', '查询', '/business/alarm/material-view', 10), ('alarm:material:download', 'alarm:query', '下载', '/business/alarm/material-view', 20), ('alarm:material:preview', 'alarm:query', '预览', '/business/alarm/material-view', 30), ('monitor:control', 'alarm:query', '监控控制', '/business/alarm/center-monitor', 20); -- ========== 案件管理 ========== INSERT INTO tmp_sync_perm (web_perms, api_perms, menu_name, parent_path, sort_num) VALUES ('case-supervision:query', 'case-supervision:query', '查询', '/case-management/supervision', 10), ('case-supervision:add', 'case-supervision:add', '新增', '/case-management/supervision', 20), ('case-supervision:view', 'case-supervision:view', '查看', '/case-management/supervision', 30), ('case-supervision:supervise', 'case-supervision:supervise', '督办', '/case-management/supervision', 40), ('evaluation:add', 'evaluation:add', '新增', '/case-management/evaluation', 20), ('evaluation:view', 'evaluation:view', '查看详情', '/case-management/evaluation', 30), ('risk-warning:query', 'risk-warning:query', '查询', '/case-management/risk-warning', 10), ('risk-warning:view', 'risk-warning:view', '统计查看', '/case-management/risk-warning', 20), ('risk-warning:process', 'risk-warning:process', '处理', '/case-management/risk-warning', 30), ('risk-warning:ignore', 'risk-warning:ignore', '忽略', '/case-management/risk-warning', 40), ('enterprise-record:query', 'enterprise-record:query', '查询', '/case-management/enterprise-record', 10), ('enterprise-record:add', 'enterprise-record:add', '新增', '/case-management/enterprise-record', 20), ('enterprise-record:view', 'enterprise-record:view', '查看详情', '/case-management/enterprise-record', 30), ('leader-record:query', 'leader-record:query', '查询', '/case-management/leader-record', 10), ('leader-record:add', 'leader-record:add', '新增', '/case-management/leader-record', 20), ('leader-record:update', 'leader-record:update', '更新进展', '/case-management/leader-record', 30), ('file-management:query', 'file-management:query', '查询', '/case-management/file-management', 10), ('file-management:add', 'file-management:add', '新增', '/case-management/file-management', 20), ('file-management:borrow', 'file-management:borrow', '借阅', '/case-management/file-management', 30), ('file-management:view-online','file-management:view-online','电子查阅', '/case-management/file-management', 40); -- ========== 审议流程 ========== INSERT INTO tmp_sync_perm (web_perms, api_perms, menu_name, parent_path, sort_num) VALUES ('review:general:query', 'review:general:query', '查询', '/review/general-list', 10), ('review:general:add', 'review:general:add', '新增', '/review/general-list', 20), ('review:general:approve', 'review:general:approve', '审议', '/review/general-list', 30), ('review:general:view', 'review:general:view', '查看', '/review/general-list', 40), ('review:supervision:query', 'review:supervision:query', '查询', '/review/supervision', 10), ('review:supervision:add', 'review:supervision:add', '新增', '/review/supervision', 20), ('review:supervision:urge', 'review:supervision:urge', '催办', '/review/supervision', 30), ('review:supervision:close', 'review:supervision:close', '结案', '/review/supervision', 40), ('review:opinion:query', 'review:opinion:query', '查询', '/review/opinion-flow', 10), ('review:opinion:detail', 'review:opinion:detail', '查看流转', '/review/opinion-flow', 20), ('review:group:query', 'review:group:query', '查询', '/review/group-config', 10), ('review:group:add', 'review:group:add', '新增', '/review/group-config', 20), ('review:group:edit', 'review:group:edit', '编辑成员', '/review/group-config', 30), ('review:group:status', 'review:group:status', '启用停用', '/review/group-config', 40), ('review:process:query', 'review:process:query', '查询', '/review/process-list', 10), ('review:process:add', 'review:process:add', '新增', '/review/process-list', 20), ('review:process:view', 'review:process:view', '查看设计', '/review/process-list', 30), ('review:process:toggle', 'review:process:toggle', '启用停用', '/review/process-list', 40), ('review:process:version', 'review:process:version', '版本管理', '/review/process-list', 50); -- ========== 涉案资金 ========== INSERT INTO tmp_sync_perm (web_perms, api_perms, menu_name, parent_path, sort_num) VALUES ('fund:management:query', 'fund:management:query', '查询', '/fund/management', 10), ('fund:management:add', 'fund:management:add', '新增', '/fund/management', 20), ('fund:management:export', 'fund:management:export', '导出', '/fund/management', 30), ('fund:management:unfreeze', 'fund:management:unfreeze', '解冻', '/fund/management', 40), ('fund:management:detail', 'fund:management:detail', '详情', '/fund/management', 50), ('fund:analysis:query', 'fund:analysis:query', '查询', '/fund/analysis', 10), ('fund:evidence:query', 'fund:evidence:query', '查询', '/fund/evidence', 10), ('fund:evidence:add', 'fund:evidence:add', '新增', '/fund/evidence', 20), ('fund:evidence:analyze', 'fund:evidence:analyze', '分析', '/fund/evidence', 30), ('fund:evidence:export', 'fund:evidence:export', '导出', '/fund/evidence', 40); -- ========== 流程管理(路径以库中为准,兼容 /flow/definition 与 /flow/definition/list) ========== INSERT INTO tmp_sync_perm (web_perms, api_perms, menu_name, parent_path, sort_num) VALUES ('flow:definition:query', 'flow:definition:query', '查询', '/flow/definition', 10), ('flow:definition:add', 'flow:definition:add', '新增', '/flow/definition', 20), ('flow:definition:edit', 'flow:definition:edit', '编辑', '/flow/definition', 30), ('flow:definition:remove', 'flow:definition:remove', '删除', '/flow/definition', 40), ('flow:definition:publish', 'flow:definition:publish', '发布', '/flow/definition', 50), ('flow:definition:importDefinition', 'flow:definition:importDefinition','导入', '/flow/definition', 60), ('flow:definition:exportDefinition', 'flow:definition:exportDefinition','导出', '/flow/definition', 70), ('flow:definition:upPublish', 'flow:definition:publish', '上架发布', '/flow/definition', 80), ('flow:definition:design', 'flow:definition:edit', '流程设计', '/flow/definition', 90), ('flow:execute:startTask', 'flow:execute:startTask', '发起流程', '/flow/definition', 100), ('flow:execute:approve', 'flow:execute:approve', '审批', '/flow/definition', 110), ('flow:execute:goAnyNode', 'flow:execute:goAnyNode', '跳转节点', '/flow/definition', 120); -- ========== 系统设置(SmartAdmin 标准权限,补全可能缺失的功能点) ========== INSERT INTO tmp_sync_perm (web_perms, api_perms, menu_name, parent_path, sort_num) VALUES ('system:employee:add', 'system:employee:add', '添加成员', '/employee/list', 10), ('system:employee:update', 'system:employee:update', '编辑', '/employee/list', 20), ('system:employee:delete', 'system:employee:delete', '删除', '/employee/list', 30), ('system:employee:disabled', 'system:employee:disabled', '启用禁用', '/employee/list', 40), ('system:employee:department:update', 'system:employee:department:update', '调整部门', '/employee/list', 50), ('system:employee:password:reset', 'system:employee:password:reset', '重置密码', '/employee/list', 60), ('system:department:add', 'system:department:add', '添加', '/department/list', 10), ('system:department:update', 'system:department:update', '编辑', '/department/list', 20), ('system:department:delete', 'system:department:delete', '删除', '/department/list', 30), ('support:department:query', 'system:department:add', '查询', '/department/list', 5), ('system:menu:add', 'system:menu:add', '添加', '/menu/list', 10), ('system:menu:update', 'system:menu:update', '编辑', '/menu/list', 20), ('system:menu:batchDelete', 'system:menu:batchDelete', '删除', '/menu/list', 30), ('system:role:add', 'system:role:add', '添加', '/role/list', 10), ('system:role:update', 'system:role:update', '编辑', '/role/list', 20), ('system:role:delete', 'system:role:delete', '删除', '/role/list', 30), ('system:role:menu:update', 'system:role:menu:update', '保存权限', '/role/list', 40), ('system:role:employee:add', 'system:role:employee:add', '添加员工', '/role/list', 50), ('system:role:employee:delete', 'system:role:employee:delete', '移除员工', '/role/list', 60), ('system:role:employee:batch:delete', 'system:role:employee:batch:delete', '批量移除', '/role/list', 70), ('system:role:dataScope:update', 'system:role:dataScope:update', '保存数据范围','/role/list', 80), ('system:message:send', 'system:message:send', '发送', '/message/list', 10), ('system:message:query', 'system:message:query', '查询', '/message/list', 20), ('system:message:delete', 'system:message:delete', '删除', '/message/list', 30), ('support:config:query', 'support:config:query', '查询', '/config/list', 10), ('support:config:add', 'support:config:add', '添加', '/config/list', 20), ('support:config:update', 'support:config:update', '编辑', '/config/list', 30), ('support:dict:query', 'support:dict:query', '查询', '/dict/list', 10), ('support:dict:add', 'support:dict:add', '添加', '/dict/list', 20), ('support:dict:update', 'support:dict:update', '编辑', '/dict/list', 30), ('support:dict:updateDisabled', 'support:dict:updateDisabled', '启禁', '/dict/list', 40), ('support:dict:delete', 'support:dict:delete', '删除', '/dict/list', 50), ('support:dictData:query', 'support:dictData:query', '字典项查询', '/dict/list', 60), ('support:dictData:add', 'support:dictData:add', '字典项添加', '/dict/list', 70), ('support:dictData:update', 'support:dictData:update', '字典项编辑', '/dict/list', 80), ('support:dictData:updateDisabled', 'support:dictData:updateDisabled', '字典项启禁', '/dict/list', 90), ('support:dictData:delete', 'support:dictData:delete', '字典项删除', '/dict/list', 100), ('support:cache:keys', 'support:cache:keys', '查看Keys', '/cache/list', 10), ('support:cache:delete', 'support:cache:delete', '清除缓存', '/cache/list', 20), ('support:operateLog:query', 'support:operateLog:query', '查询', '/operate-log/list', 10), ('support:operateLog:detail', 'support:operateLog:detail', '详情', '/operate-log/list', 20), ('support:loginLog:query', 'support:loginLog:query', '查询', '/login-log/list', 10), ('support:changeLog:query', 'support:changeLog:add', '查询', '/change-log/list', 10), ('support:changeLog:add', 'support:changeLog:add', '添加', '/change-log/list', 20), ('support:changeLog:update', 'support:changeLog:update', '编辑', '/change-log/list', 30), ('support:changeLog:delete', 'support:changeLog:delete', '删除', '/change-log/list', 40), ('support:changeLog:batchDelete', 'support:changeLog:batchDelete', '批量删除', '/change-log/list', 50); -- 批量写入 t_menu(按页面 path 挂载) INSERT INTO t_menu (menu_name, menu_type, parent_id, sort, frame_flag, cache_flag, visible_flag, disabled_flag, perms_type, api_perms, web_perms, context_menu_id, deleted_flag, create_user_id, create_time, update_time) SELECT p.menu_name, 3, m.menu_id, p.sort_num, false, false, true, false, 1, p.api_perms, p.web_perms, m.menu_id, false, 1, NOW(), NOW() FROM tmp_sync_perm p INNER JOIN t_menu m ON m.path = p.parent_path AND m.menu_type = 2 AND m.deleted_flag = 0 WHERE NOT EXISTS ( SELECT 1 FROM t_menu x WHERE x.web_perms = p.web_perms AND x.deleted_flag = 0 ); -- 兼容流程定义菜单 path 变体 INSERT INTO t_menu (menu_name, menu_type, parent_id, sort, frame_flag, cache_flag, visible_flag, disabled_flag, perms_type, api_perms, web_perms, context_menu_id, deleted_flag, create_user_id, create_time, update_time) SELECT p.menu_name, 3, m.menu_id, p.sort_num, false, false, true, false, 1, p.api_perms, p.web_perms, m.menu_id, false, 1, NOW(), NOW() FROM tmp_sync_perm p INNER JOIN t_menu m ON m.path IN ('/flow/definition/list', '/flow/definition/index') AND m.menu_type = 2 AND m.deleted_flag = 0 WHERE p.web_perms LIKE 'flow:%' AND NOT EXISTS ( SELECT 1 FROM t_menu x WHERE x.web_perms = p.web_perms AND x.deleted_flag = 0 ); -- 修正已存在但 api_perms 与后端不一致的关键权限 UPDATE t_menu SET api_perms = 'alarm:audit', update_time = NOW() WHERE web_perms = 'alarm:audit:do' AND deleted_flag = 0 AND COALESCE(api_perms, '') <> 'alarm:audit'; UPDATE t_menu SET api_perms = 'alarm:query', update_time = NOW() WHERE web_perms = 'alarm:audit:query' AND deleted_flag = 0 AND COALESCE(api_perms, '') <> 'alarm:query'; UPDATE t_menu SET api_perms = 'alarm:detail', update_time = NOW() WHERE web_perms = 'alarm:view' AND deleted_flag = 0 AND COALESCE(api_perms, '') <> 'alarm:detail'; -- 验证:执行后仍缺少父页面的权限(应无结果;flow 类若菜单 path 未入库需先在菜单管理补页面) SELECT p.web_perms, p.menu_name, p.parent_path FROM tmp_sync_perm p WHERE NOT EXISTS (SELECT 1 FROM t_menu x WHERE x.web_perms = p.web_perms AND x.deleted_flag = 0) ORDER BY p.parent_path, p.web_perms; COMMIT;