-- 结算菜单调整: -- 1)预结算 → 预付结算单 -- 2)正式结算单拆分为:付款结算单(应付)、收款结算单(应收) -- 执行后需重新登录;已授权「正式结算单/付款结算单」的角色会同步授权「收款结算单」。 -- ① 预结算改名 UPDATE `blade_menu` SET `name` = '预付结算单' WHERE `code` = 'pre_settlement' AND `is_deleted` = 0; -- ② 原正式结算单菜单改为「付款结算单」(保留原菜单 id,角色授权不丢) UPDATE `blade_menu` SET `code` = 'payment_settlement', `name` = '付款结算单', `alias` = 'payment_settlement', `path` = '/settlement/payment-settlement', `is_deleted` = 0 WHERE `code` IN ('formal_settlement', 'payment_settlement') AND `category` = 1 AND `is_deleted` = 0; -- 付款结算单按钮权限码:formal_settlement_* → payment_settlement_* UPDATE `blade_menu` child INNER JOIN `blade_menu` parent ON parent.`id` = child.`parent_id` AND parent.`code` = 'payment_settlement' AND parent.`is_deleted` = 0 SET child.`code` = REPLACE(child.`code`, 'formal_settlement_', 'payment_settlement_'), child.`alias` = REPLACE(IFNULL(child.`alias`, child.`code`), 'formal_settlement_', 'payment_settlement_'), child.`is_deleted` = 0 WHERE child.`category` = 2 AND child.`code` LIKE 'formal_settlement_%'; -- ③ 新增「收款结算单」菜单 INSERT INTO `blade_menu` (`id`,`parent_id`,`code`,`name`,`alias`,`path`,`source`,`sort`,`category`,`action`,`is_open`,`component`,`remark`,`is_deleted`) SELECT 2090000000000002100, parent.`parent_id`, 'receipt_settlement', '收款结算单', 'receipt_settlement', '/settlement/receipt-settlement', IFNULL(parent.`source`, 'iconfont icon-caidanguanli'), IFNULL(parent.`sort`, 4) + 1, 1, 0, 1, NULL, '', 0 FROM `blade_menu` parent WHERE parent.`code` = 'payment_settlement' AND parent.`is_deleted` = 0 AND NOT EXISTS ( SELECT 1 FROM `blade_menu` x WHERE x.`code` = 'receipt_settlement' AND x.`is_deleted` = 0 ) LIMIT 1; INSERT INTO `blade_menu` (`id`,`parent_id`,`code`,`name`,`alias`,`path`,`source`,`sort`,`category`,`action`,`is_open`,`component`,`remark`,`is_deleted`) SELECT 2090000000000002101, p.id, 'receipt_settlement_view', '查看', 'receipt_settlement_view', '', '', 1, 2, 0, 1, NULL, '', 0 FROM `blade_menu` p WHERE p.code = 'receipt_settlement' AND p.is_deleted = 0 AND NOT EXISTS (SELECT 1 FROM `blade_menu` x WHERE x.code = 'receipt_settlement_view' AND x.is_deleted = 0) LIMIT 1; INSERT INTO `blade_menu` (`id`,`parent_id`,`code`,`name`,`alias`,`path`,`source`,`sort`,`category`,`action`,`is_open`,`component`,`remark`,`is_deleted`) SELECT 2090000000000002102, p.id, 'receipt_settlement_add', '新增', 'receipt_settlement_add', '', '', 2, 2, 0, 1, NULL, '', 0 FROM `blade_menu` p WHERE p.code = 'receipt_settlement' AND p.is_deleted = 0 AND NOT EXISTS (SELECT 1 FROM `blade_menu` x WHERE x.code = 'receipt_settlement_add' AND x.is_deleted = 0) LIMIT 1; INSERT INTO `blade_menu` (`id`,`parent_id`,`code`,`name`,`alias`,`path`,`source`,`sort`,`category`,`action`,`is_open`,`component`,`remark`,`is_deleted`) SELECT 2090000000000002103, p.id, 'receipt_settlement_edit', '编辑', 'receipt_settlement_edit', '', '', 3, 2, 0, 1, NULL, '', 0 FROM `blade_menu` p WHERE p.code = 'receipt_settlement' AND p.is_deleted = 0 AND NOT EXISTS (SELECT 1 FROM `blade_menu` x WHERE x.code = 'receipt_settlement_edit' AND x.is_deleted = 0) LIMIT 1; INSERT INTO `blade_menu` (`id`,`parent_id`,`code`,`name`,`alias`,`path`,`source`,`sort`,`category`,`action`,`is_open`,`component`,`remark`,`is_deleted`) SELECT 2090000000000002104, p.id, 'receipt_settlement_delete', '删除', 'receipt_settlement_delete', '', '', 4, 2, 0, 1, NULL, '', 0 FROM `blade_menu` p WHERE p.code = 'receipt_settlement' AND p.is_deleted = 0 AND NOT EXISTS (SELECT 1 FROM `blade_menu` x WHERE x.code = 'receipt_settlement_delete' AND x.is_deleted = 0) LIMIT 1; INSERT INTO `blade_menu` (`id`,`parent_id`,`code`,`name`,`alias`,`path`,`source`,`sort`,`category`,`action`,`is_open`,`component`,`remark`,`is_deleted`) SELECT 2090000000000002105, p.id, 'receipt_settlement_submit', '提交审批', 'receipt_settlement_submit', '', '', 5, 2, 0, 1, NULL, '', 0 FROM `blade_menu` p WHERE p.code = 'receipt_settlement' AND p.is_deleted = 0 AND NOT EXISTS (SELECT 1 FROM `blade_menu` x WHERE x.code = 'receipt_settlement_submit' AND x.is_deleted = 0) LIMIT 1; INSERT INTO `blade_menu` (`id`,`parent_id`,`code`,`name`,`alias`,`path`,`source`,`sort`,`category`,`action`,`is_open`,`component`,`remark`,`is_deleted`) SELECT 2090000000000002106, p.id, 'receipt_settlement_approve', '审批', 'receipt_settlement_approve', '', '', 6, 2, 0, 1, NULL, '', 0 FROM `blade_menu` p WHERE p.code = 'receipt_settlement' AND p.is_deleted = 0 AND NOT EXISTS (SELECT 1 FROM `blade_menu` x WHERE x.code = 'receipt_settlement_approve' AND x.is_deleted = 0) LIMIT 1; INSERT INTO `blade_menu` (`id`,`parent_id`,`code`,`name`,`alias`,`path`,`source`,`sort`,`category`,`action`,`is_open`,`component`,`remark`,`is_deleted`) SELECT 2090000000000002107, p.id, 'receipt_settlement_sync', '同步金蝶', 'receipt_settlement_sync', '', '', 7, 2, 0, 1, NULL, '', 0 FROM `blade_menu` p WHERE p.code = 'receipt_settlement' AND p.is_deleted = 0 AND NOT EXISTS (SELECT 1 FROM `blade_menu` x WHERE x.code = 'receipt_settlement_sync' AND x.is_deleted = 0) LIMIT 1; INSERT INTO `blade_menu` (`id`,`parent_id`,`code`,`name`,`alias`,`path`,`source`,`sort`,`category`,`action`,`is_open`,`component`,`remark`,`is_deleted`) SELECT 2090000000000002108, p.id, 'receipt_settlement_print', '打印', 'receipt_settlement_print', '', '', 8, 2, 0, 1, NULL, '', 0 FROM `blade_menu` p WHERE p.code = 'receipt_settlement' AND p.is_deleted = 0 AND NOT EXISTS (SELECT 1 FROM `blade_menu` x WHERE x.code = 'receipt_settlement_print' AND x.is_deleted = 0) LIMIT 1; INSERT INTO `blade_menu` (`id`,`parent_id`,`code`,`name`,`alias`,`path`,`source`,`sort`,`category`,`action`,`is_open`,`component`,`remark`,`is_deleted`) SELECT 2090000000000002109, p.id, 'receipt_settlement_export', '导出', 'receipt_settlement_export', '', '', 9, 2, 0, 1, NULL, '', 0 FROM `blade_menu` p WHERE p.code = 'receipt_settlement' AND p.is_deleted = 0 AND NOT EXISTS (SELECT 1 FROM `blade_menu` x WHERE x.code = 'receipt_settlement_export' AND x.is_deleted = 0) LIMIT 1; INSERT INTO `blade_menu` (`id`,`parent_id`,`code`,`name`,`alias`,`path`,`source`,`sort`,`category`,`action`,`is_open`,`component`,`remark`,`is_deleted`) SELECT 2090000000000002110, p.id, 'receipt_settlement_void', '作废', 'receipt_settlement_void', '', '', 10, 2, 0, 1, NULL, '', 0 FROM `blade_menu` p WHERE p.code = 'receipt_settlement' AND p.is_deleted = 0 AND NOT EXISTS (SELECT 1 FROM `blade_menu` x WHERE x.code = 'receipt_settlement_void' AND x.is_deleted = 0) LIMIT 1; INSERT INTO `blade_menu` (`id`,`parent_id`,`code`,`name`,`alias`,`path`,`source`,`sort`,`category`,`action`,`is_open`,`component`,`remark`,`is_deleted`) SELECT 2090000000000002111, p.id, 'receipt_settlement_adjust', '明细调整', 'receipt_settlement_adjust', '', '', 11, 2, 0, 1, NULL, '', 0 FROM `blade_menu` p WHERE p.code = 'receipt_settlement' AND p.is_deleted = 0 AND NOT EXISTS (SELECT 1 FROM `blade_menu` x WHERE x.code = 'receipt_settlement_adjust' AND x.is_deleted = 0) LIMIT 1; -- ④ 角色授权:持有付款结算单的角色同步收款结算单(含按钮) INSERT INTO `blade_role_menu` (`id`, `menu_id`, `role_id`) SELECT 2091200000000000000 + CAST(rm.`role_id` AS UNSIGNED) % 100000, receipt.`id`, rm.`role_id` FROM `blade_role_menu` rm JOIN `blade_menu` payment ON payment.`id` = rm.`menu_id` AND payment.`code` = 'payment_settlement' AND payment.`is_deleted` = 0 JOIN `blade_menu` receipt ON receipt.`code` = 'receipt_settlement' AND receipt.`is_deleted` = 0 WHERE NOT EXISTS ( SELECT 1 FROM `blade_role_menu` x WHERE x.`menu_id` = receipt.`id` AND x.`role_id` = rm.`role_id` ); INSERT INTO `blade_role_menu` (`id`, `menu_id`, `role_id`) SELECT 2091300000000000000 + (CAST(rm.`role_id` AS UNSIGNED) % 100000) * 20 + (CAST(receipt_btn.`id` AS UNSIGNED) % 20), receipt_btn.`id`, rm.`role_id` FROM `blade_role_menu` rm JOIN `blade_menu` payment_btn ON payment_btn.`id` = rm.`menu_id` AND payment_btn.`code` LIKE 'payment_settlement_%' AND payment_btn.`is_deleted` = 0 JOIN `blade_menu` receipt_btn ON receipt_btn.`code` = REPLACE(payment_btn.`code`, 'payment_settlement_', 'receipt_settlement_') AND receipt_btn.`is_deleted` = 0 WHERE NOT EXISTS ( SELECT 1 FROM `blade_role_menu` x WHERE x.`menu_id` = receipt_btn.`id` AND x.`role_id` = rm.`role_id` ); -- ⑤ 残留旧正式结算菜单隐藏 UPDATE `blade_menu` SET `is_deleted` = 1 WHERE `code` = 'formal_settlement' AND `category` = 1;