-- backend/scripts/migrate_20260820_pl_plan_contract_complete_menu.sql -- 运输计划合同完善:挂在 PL_GROUP_PLAN 下,order_num=3;按钮权限保存合同关联 -- 可重复执行(幂等) -- 1) 菜单 C:运输计划合同完善 INSERT INTO `sys_menu` ( `id`, `menu_name`, `parent_id`, `menu_type`, `path`, `component`, `perms`, `is_frame`, `visible`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag` ) VALUES ( 'PL_PLAN_CONTRACT', '运输计划合同完善', 'PL_GROUP_PLAN', 'C', 'plan-contract', 'pl/plan-contract/index', 'pl:plan-contract:list', 1, '1', '1', 'shanxia2.0', 3, '缺合同运输计划补齐', 'system', '', NOW(), NULL, NOW(), 0 ) ON DUPLICATE KEY UPDATE `menu_name`=VALUES(`menu_name`), `parent_id`=VALUES(`parent_id`), `path`=VALUES(`path`), `component`=VALUES(`component`), `perms`=VALUES(`perms`), `order_num`=VALUES(`order_num`), `visible`=VALUES(`visible`), `status`=VALUES(`status`); -- 2) 菜单 F:保存合同关联 INSERT INTO `sys_menu` ( `id`, `menu_name`, `parent_id`, `menu_type`, `path`, `component`, `perms`, `is_frame`, `visible`, `status`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag` ) VALUES ( 'PL_PLAN_CONTRACT_UPD', '保存合同关联', 'PL_PLAN_CONTRACT', 'F', '', NULL, 'pl:plan-contract:update', 1, '1', '1', 'shanxia2.0', 1, NULL, 'system', '', NOW(), NULL, NOW(), 0 ) ON DUPLICATE KEY UPDATE `menu_name`=VALUES(`menu_name`), `perms`=VALUES(`perms`), `parent_id`=VALUES(`parent_id`); -- 3) 角色授权:复制已有 PL_PLAN 的角色集合 INSERT INTO `sys_role_menu` ( `id`, `role_id`, `menu_id`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag` ) SELECT -- 勿用 UUID():同句多行 INSERT 易撞主键;按 role+menu 生成确定性 id MD5(CONCAT(`role_id`, '#PL_PLAN_CONTRACT')), `role_id`, 'PL_PLAN_CONTRACT', `tenant_no`, 0, NULL, `create_by`, `create_dept_id`, NOW(), `update_by`, NOW(), 0 FROM `sys_role_menu` WHERE `menu_id` = 'PL_PLAN' AND `del_flag` = 0 AND NOT EXISTS ( SELECT 1 FROM `sys_role_menu` x WHERE x.`role_id` = `sys_role_menu`.`role_id` AND x.`menu_id` = 'PL_PLAN_CONTRACT' AND x.`del_flag` = 0 ); INSERT INTO `sys_role_menu` ( `id`, `role_id`, `menu_id`, `tenant_no`, `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag` ) SELECT MD5(CONCAT(`role_id`, '#PL_PLAN_CONTRACT_UPD')), `role_id`, 'PL_PLAN_CONTRACT_UPD', `tenant_no`, 0, NULL, `create_by`, `create_dept_id`, NOW(), `update_by`, NOW(), 0 FROM `sys_role_menu` WHERE `menu_id` = 'PL_PLAN' AND `del_flag` = 0 AND NOT EXISTS ( SELECT 1 FROM `sys_role_menu` x WHERE x.`role_id` = `sys_role_menu`.`role_id` AND x.`menu_id` = 'PL_PLAN_CONTRACT_UPD' AND x.`del_flag` = 0 );