| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235 |
- -- =============================================================================
- -- 移动端菜单重组:市场部 / OA工作流两大目录
- --
- -- 目标结构:
- -- 移动端菜单
- -- ├─ 市场部
- -- │ ├─ 预签约订单(专员)…运费信息(专员)
- -- │ └─ 预签约订单(经理)…运费信息(经理)
- -- └─ OA工作流
- -- └─ 发起审批…开启微信通知
- --
- -- 说明:
- -- 1. 复用原「市场专员」目录 id,改名为「市场部」;原「地区经理」目录软删。
- -- 2. 叶子 id / path / perms 不变,仅调整 parent_id、menu_name、order_num。
- -- 3. 已授权 OA 叶子的角色自动补授「OA工作流」目录(幂等)。
- -- 4. MySQL 5.7 可执行。
- -- =============================================================================
- -- 1) 「市场专员」→「市场部」
- UPDATE sys_menu market_dir
- INNER JOIN sys_menu root
- ON root.id = market_dir.parent_id
- AND root.parent_id = '0'
- AND root.menu_name = '移动端菜单'
- AND root.del_flag = 0
- SET
- market_dir.menu_name = '市场部',
- market_dir.order_num = 10,
- market_dir.remark = '小程序:市场部菜单目录',
- market_dir.update_time = NOW()
- WHERE market_dir.menu_type = 'M'
- AND market_dir.path = ''
- AND market_dir.del_flag = 0
- AND market_dir.menu_name IN ('市场专员', '市场部');
- -- 2) 新建「OA工作流」目录(每个租户移动端根下一条)
- 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
- MD5(CONCAT(
- 'mobile-oa-directory|', root.tenant_no, '|', root.id, '|M||OA工作流'
- )),
- 'OA工作流',
- root.id,
- 'M',
- '',
- NULL,
- NULL,
- 1,
- '1',
- '1',
- root.tenant_no,
- 20,
- '小程序:OA工作流菜单目录',
- NULL,
- '',
- NOW(),
- NULL,
- NOW(),
- 0
- FROM sys_menu root
- WHERE root.parent_id = '0'
- AND root.menu_name = '移动端菜单'
- AND root.del_flag = 0
- AND NOT EXISTS (
- SELECT 1
- FROM sys_menu existing
- WHERE existing.tenant_no = root.tenant_no
- AND existing.parent_id = root.id
- AND existing.menu_name = 'OA工作流'
- AND existing.menu_type = 'M'
- AND existing.path = ''
- AND existing.del_flag = 0
- )
- ON DUPLICATE KEY UPDATE
- tenant_no = VALUES(tenant_no),
- parent_id = VALUES(parent_id),
- menu_name = VALUES(menu_name),
- menu_type = VALUES(menu_type),
- path = VALUES(path),
- order_num = VALUES(order_num),
- remark = VALUES(remark),
- update_time = VALUES(update_time),
- del_flag = VALUES(del_flag);
- -- 3) 市场叶子:挂到「市场部」,名称加(专员)/(经理),调整排序
- UPDATE sys_menu leaf
- INNER JOIN sys_menu root
- ON root.parent_id = '0'
- AND root.menu_name = '移动端菜单'
- AND root.del_flag = 0
- AND root.tenant_no = leaf.tenant_no
- INNER JOIN sys_menu market_dir
- ON market_dir.tenant_no = root.tenant_no
- AND market_dir.parent_id = root.id
- AND market_dir.menu_name = '市场部'
- AND market_dir.menu_type = 'M'
- AND market_dir.path = ''
- AND market_dir.del_flag = 0
- INNER JOIN (
- SELECT 'mini:market:specialist:presign' AS perms, '预签约订单(专员)' AS menu_name, 10 AS order_num
- UNION ALL SELECT 'mini:market:specialist:protocol', '协议单(专员)', 20
- UNION ALL SELECT 'mini:market:specialist:payment-chase', '催缴信息(专员)', 30
- UNION ALL SELECT 'mini:market:specialist:payment', '缴费信息(专员)', 40
- UNION ALL SELECT 'mini:market:specialist:freight', '运费信息(专员)', 50
- UNION ALL SELECT 'mini:market:manager:presign', '预签约订单(经理)', 60
- UNION ALL SELECT 'mini:market:manager:protocol', '协议单(经理)', 70
- UNION ALL SELECT 'mini:market:manager:payment-chase', '催缴信息(经理)', 80
- UNION ALL SELECT 'mini:market:manager:payment', '缴费信息(经理)', 90
- UNION ALL SELECT 'mini:market:manager:freight', '运费信息(经理)', 100
- ) map ON map.perms = leaf.perms
- SET
- leaf.parent_id = market_dir.id,
- leaf.menu_name = map.menu_name,
- leaf.order_num = map.order_num,
- leaf.remark = CONCAT('小程序市场现场:', map.menu_name),
- leaf.update_time = NOW()
- WHERE leaf.menu_type = 'C'
- AND leaf.del_flag = 0
- AND leaf.perms LIKE 'mini:market:%';
- -- 4) OA 叶子:挂到「OA工作流」
- UPDATE sys_menu leaf
- INNER JOIN sys_menu root
- ON root.parent_id = '0'
- AND root.menu_name = '移动端菜单'
- AND root.del_flag = 0
- AND root.tenant_no = leaf.tenant_no
- INNER JOIN sys_menu oa_dir
- ON oa_dir.tenant_no = root.tenant_no
- AND oa_dir.parent_id = root.id
- AND oa_dir.menu_name = 'OA工作流'
- AND oa_dir.menu_type = 'M'
- AND oa_dir.path = ''
- AND oa_dir.del_flag = 0
- SET
- leaf.parent_id = oa_dir.id,
- leaf.update_time = NOW()
- WHERE leaf.del_flag = 0
- AND leaf.menu_type = 'C'
- AND (
- leaf.perms IN (
- 'mini:oa:start',
- 'mini:oa:drafts',
- 'mini:oa:pending',
- 'mini:oa:done',
- 'mini:oa:mine',
- 'mini:oa:cc',
- 'oa:mention',
- 'mini:oa:wechat-notify'
- )
- OR leaf.path IN (
- '/pages/oa/start/index',
- '/pages/oa/drafts/index',
- '/pages/oa/pending/index',
- '/pages/oa/done/index',
- '/pages/oa/mine/index',
- '/pages/oa/cc/index',
- '/pages/oa/mentions/index',
- '/pages/oa/wechat-notify/index'
- )
- );
- -- 5) 软删「地区经理」目录(步骤 3 已把子节点迁到市场部;避免同表子查询触发 1093)
- UPDATE sys_menu manager_dir
- INNER JOIN sys_menu root
- ON root.id = manager_dir.parent_id
- AND root.parent_id = '0'
- AND root.menu_name = '移动端菜单'
- AND root.del_flag = 0
- SET
- manager_dir.del_flag = 1,
- manager_dir.update_time = NOW(),
- manager_dir.remark = '已重组至市场部,软删'
- WHERE manager_dir.menu_type = 'M'
- AND manager_dir.path = ''
- AND manager_dir.menu_name = '地区经理'
- AND manager_dir.del_flag = 0;
- -- 6) 已有 OA 叶子授权的角色补授「OA工作流」目录
- 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(r.id, '|', oa_dir.id)),
- r.id,
- oa_dir.id,
- IFNULL(NULLIF(r.tenant_no, ''), oa_dir.tenant_no),
- 0,
- 'grant OA工作流 directory to roles with OA leaf menus',
- NULL,
- '',
- NOW(),
- NULL,
- NOW(),
- 0
- FROM sys_role r
- INNER JOIN sys_role_menu rm
- ON rm.role_id = r.id
- AND rm.del_flag = 0
- INNER JOIN sys_menu leaf
- ON leaf.id = rm.menu_id
- AND leaf.del_flag = 0
- AND leaf.menu_type = 'C'
- AND (
- leaf.perms IN (
- 'mini:oa:start',
- 'mini:oa:drafts',
- 'mini:oa:pending',
- 'mini:oa:done',
- 'mini:oa:mine',
- 'mini:oa:cc',
- 'oa:mention',
- 'mini:oa:wechat-notify'
- )
- OR leaf.path LIKE '/pages/oa/%'
- )
- INNER JOIN sys_menu oa_dir
- ON oa_dir.id = leaf.parent_id
- AND oa_dir.menu_name = 'OA工作流'
- AND oa_dir.menu_type = 'M'
- AND oa_dir.del_flag = 0
- WHERE r.del_flag = 0
- AND NOT EXISTS (
- SELECT 1
- FROM sys_role_menu x
- WHERE x.del_flag = 0
- AND x.role_id = r.id
- AND x.menu_id = oa_dir.id
- )
- GROUP BY r.id, oa_dir.id, r.tenant_no, oa_dir.tenant_no;
|