-- CRM 管理下增加四级分组目录,叶子菜单改挂到对应分组 -- 产品管理 / 报价单管理 / 合同管理 / 客户管理 -- 2026-10-04 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` ) SELECT * FROM ( SELECT 'CRM00000000000000000000000000010' AS `id`, '产品管理' AS `menu_name`, 'CRM00000000000000000000000000001' AS `parent_id`, 'M' AS `menu_type`, 'product-group' AS `path`, NULL AS `component`, NULL AS `perms`, 1 AS `is_frame`, '1' AS `visible`, '1' AS `status`, 'shanxia2.0' AS `tenant_no`, 1 AS `order_num`, 'CRM 产品管理分组' AS `remark`, 'system' AS `create_by`, '' AS `create_dept_id`, NOW() AS `create_time`, NULL AS `update_by`, NOW() AS `update_time`, 0 AS `del_flag` ) AS tmp WHERE NOT EXISTS ( SELECT 1 FROM `sys_menu` WHERE `id` = 'CRM00000000000000000000000000010' ); 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` ) SELECT * FROM ( SELECT 'CRM00000000000000000000000000020' AS `id`, '报价单管理' AS `menu_name`, 'CRM00000000000000000000000000001' AS `parent_id`, 'M' AS `menu_type`, 'quote-group' AS `path`, NULL AS `component`, NULL AS `perms`, 1 AS `is_frame`, '1' AS `visible`, '1' AS `status`, 'shanxia2.0' AS `tenant_no`, 2 AS `order_num`, 'CRM 报价单管理分组' AS `remark`, 'system' AS `create_by`, '' AS `create_dept_id`, NOW() AS `create_time`, NULL AS `update_by`, NOW() AS `update_time`, 0 AS `del_flag` ) AS tmp WHERE NOT EXISTS ( SELECT 1 FROM `sys_menu` WHERE `id` = 'CRM00000000000000000000000000020' ); 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` ) SELECT * FROM ( SELECT 'CRM00000000000000000000000000030' AS `id`, '合同管理' AS `menu_name`, 'CRM00000000000000000000000000001' AS `parent_id`, 'M' AS `menu_type`, 'contract-group' AS `path`, NULL AS `component`, NULL AS `perms`, 1 AS `is_frame`, '1' AS `visible`, '1' AS `status`, 'shanxia2.0' AS `tenant_no`, 3 AS `order_num`, 'CRM 合同管理分组' AS `remark`, 'system' AS `create_by`, '' AS `create_dept_id`, NOW() AS `create_time`, NULL AS `update_by`, NOW() AS `update_time`, 0 AS `del_flag` ) AS tmp WHERE NOT EXISTS ( SELECT 1 FROM `sys_menu` WHERE `id` = 'CRM00000000000000000000000000030' ); 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` ) SELECT * FROM ( SELECT 'CRM00000000000000000000000000040' AS `id`, '客户管理' AS `menu_name`, 'CRM00000000000000000000000000001' AS `parent_id`, 'M' AS `menu_type`, 'customer-group' AS `path`, NULL AS `component`, NULL AS `perms`, 1 AS `is_frame`, '1' AS `visible`, '1' AS `status`, 'shanxia2.0' AS `tenant_no`, 4 AS `order_num`, 'CRM 客户管理分组' AS `remark`, 'system' AS `create_by`, '' AS `create_dept_id`, NOW() AS `create_time`, NULL AS `update_by`, NOW() AS `update_time`, 0 AS `del_flag` ) AS tmp WHERE NOT EXISTS ( SELECT 1 FROM `sys_menu` WHERE `id` = 'CRM00000000000000000000000000040' ); UPDATE `sys_menu` SET `parent_id` = 'CRM00000000000000000000000000010', `order_num` = 1, `update_time` = NOW() WHERE `id` = 'CRM00000000000000000000000000003' AND `del_flag` = 0; UPDATE `sys_menu` SET `parent_id` = 'CRM00000000000000000000000000010', `order_num` = 2, `update_time` = NOW() WHERE `id` = 'CRM00000000000000000000000000002' AND `del_flag` = 0; UPDATE `sys_menu` SET `parent_id` = 'CRM00000000000000000000000000020', `order_num` = 1, `update_time` = NOW() WHERE `id` = 'CRM3000000000000000000000000010' AND `del_flag` = 0; UPDATE `sys_menu` SET `parent_id` = 'CRM00000000000000000000000000020', `order_num` = 2, `update_time` = NOW() WHERE `id` = 'CRM3000000000000000000000000016' AND `del_flag` = 0; UPDATE `sys_menu` SET `parent_id` = 'CRM00000000000000000000000000020', `update_time` = NOW() WHERE `id` = 'CRM3000000000000000000000000015' AND `del_flag` = 0; UPDATE `sys_menu` SET `parent_id` = 'CRM00000000000000000000000000030', `order_num` = 1, `update_time` = NOW() WHERE `id` = 'CRM3000000000000000000000000020' AND `del_flag` = 0; UPDATE `sys_menu` SET `parent_id` = 'CRM00000000000000000000000000030', `order_num` = 2, `update_time` = NOW() WHERE `id` = 'CRM3000000000000000000000000021' AND `del_flag` = 0; UPDATE `sys_menu` SET `parent_id` = 'CRM00000000000000000000000000030', `order_num` = 3, `update_time` = NOW() WHERE `id` = 'CRM3000000000000000000000000030' AND `del_flag` = 0; UPDATE `sys_menu` SET `parent_id` = 'CRM00000000000000000000000000030', `update_time` = NOW() WHERE `id` = 'CRM3000000000000000000000000026' AND `del_flag` = 0; UPDATE `sys_menu` SET `parent_id` = 'CRM00000000000000000000000000040', `order_num` = 1, `update_time` = NOW() WHERE `id` = 'CRM1000000000000000000000000002' AND `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(src.`role_id`, '-', src.`group_menu_id`)), src.`role_id`, src.`group_menu_id`, src.`tenant_no`, 0, NULL, src.`create_by`, '', NOW(), src.`create_by`, NOW(), 0 FROM ( SELECT DISTINCT rm.`role_id`, rm.`tenant_no`, rm.`create_by`, 'CRM00000000000000000000000000010' AS `group_menu_id` FROM `sys_role_menu` rm WHERE rm.`del_flag` = 0 AND rm.`menu_id` IN ( 'CRM00000000000000000000000000002', 'CRM00000000000000000000000000003' ) UNION SELECT DISTINCT rm.`role_id`, rm.`tenant_no`, rm.`create_by`, 'CRM00000000000000000000000000020' FROM `sys_role_menu` rm WHERE rm.`del_flag` = 0 AND rm.`menu_id` IN ( 'CRM3000000000000000000000000010', 'CRM3000000000000000000000000015', 'CRM3000000000000000000000000016' ) UNION SELECT DISTINCT rm.`role_id`, rm.`tenant_no`, rm.`create_by`, 'CRM00000000000000000000000000030' FROM `sys_role_menu` rm WHERE rm.`del_flag` = 0 AND rm.`menu_id` IN ( 'CRM3000000000000000000000000020', 'CRM3000000000000000000000000021', 'CRM3000000000000000000000000026', 'CRM3000000000000000000000000030' ) UNION SELECT DISTINCT rm.`role_id`, rm.`tenant_no`, rm.`create_by`, 'CRM00000000000000000000000000040' FROM `sys_role_menu` rm WHERE rm.`del_flag` = 0 AND rm.`menu_id` = 'CRM1000000000000000000000000002' ) src WHERE NOT EXISTS ( SELECT 1 FROM `sys_role_menu` exist WHERE exist.`role_id` = src.`role_id` AND exist.`menu_id` = src.`group_menu_id` AND exist.`del_flag` = 0 );