236 lines
7.1 KiB
SQL
236 lines
7.1 KiB
SQL
-- =============================================================================
|
|
-- 移动端菜单重组:市场部 / 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;
|