提交
This commit is contained in:
1 parent
d08f03ab03
commit
cc843535f5
154 files changed
+17837
-5153
No files matched your search
@@ -172,13 +172,9 @@ INNER JOIN (
|
||||
'/pages/market/webview/index?entry=specialist-payment',
|
||||
'mini:market:specialist:payment', 40
|
||||
UNION ALL
|
||||
SELECT 'specialist', '市场专员', 'sample', '样本信息',
|
||||
'/pages/market/webview/index?entry=specialist-sample',
|
||||
'mini:market:specialist:sample', 50
|
||||
UNION ALL
|
||||
SELECT 'specialist', '市场专员', 'freight', '运费信息',
|
||||
'/pages/market/webview/index?entry=specialist-freight',
|
||||
'mini:market:specialist:freight', 60
|
||||
'mini:market:specialist:freight', 50
|
||||
UNION ALL
|
||||
SELECT 'manager', '地区经理', 'presign', '预签约订单',
|
||||
'/pages/market/webview/index?entry=manager-presign',
|
||||
@@ -196,13 +192,9 @@ INNER JOIN (
|
||||
'/pages/market/webview/index?entry=manager-payment',
|
||||
'mini:market:manager:payment', 40
|
||||
UNION ALL
|
||||
SELECT 'manager', '地区经理', 'sample', '样本信息',
|
||||
'/pages/market/webview/index?entry=manager-sample',
|
||||
'mini:market:manager:sample', 50
|
||||
UNION ALL
|
||||
SELECT 'manager', '地区经理', 'freight', '运费信息',
|
||||
'/pages/market/webview/index?entry=manager-freight',
|
||||
'mini:market:manager:freight', 60
|
||||
'mini:market:manager:freight', 50
|
||||
) entry
|
||||
ON 1 = 1
|
||||
INNER JOIN sys_menu directory
|
||||
|
||||
@@ -0,0 +1,235 @@
|
||||
-- =============================================================================
|
||||
-- 移动端菜单重组:市场部 / 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;
|
||||
@@ -26,7 +26,7 @@ CREATE TABLE IF NOT EXISTS biz_sample_customer_service (
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE KEY uk_bscs_tenant_sample (tenant_no, sample_code),
|
||||
KEY idx_bscs_protocol (tenant_no, collection_protocol_id, del_flag)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='样本客户服务扩展';
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='样本客户服务扩展';
|
||||
-- 注:uk_bscs_tenant_sample 不含 del_flag;del_flag=0 行唯一性由应用层保证(与 biz_sample_storage_cert_qc 一致)。
|
||||
|
||||
CREATE TABLE IF NOT EXISTS biz_customer_service_dict (
|
||||
@@ -45,7 +45,7 @@ CREATE TABLE IF NOT EXISTS biz_customer_service_dict (
|
||||
del_flag SMALLINT NOT NULL DEFAULT 0 COMMENT '删除标记',
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE KEY uk_bcsd_tenant_type_value (tenant_no, dict_type, dict_value)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='客户服务字典';
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='客户服务字典';
|
||||
-- 注:uk_bcsd_tenant_type_value 不含 del_flag;del_flag=0 行唯一性由应用层保证(与 biz_sample_storage_cert_qc 一致)。
|
||||
|
||||
-- 预置字典种子(tenant_no=zkxw,is_system=1;幂等 NOT EXISTS)
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
-- =============================================================================
|
||||
-- 下线小程序「市场专员 / 地区经理 → 样本信息」菜单(2026-10-13)
|
||||
-- =============================================================================
|
||||
--
|
||||
-- 样本信息(客服管理)不面向市场专员、地区经理;移动端入口与 OA H5 路由已移除。
|
||||
-- 本脚本将已入库的叶子菜单设为不可见(权限码保留,避免角色菜单残留脏数据时可另行清理)。
|
||||
--
|
||||
-- perms:
|
||||
-- mini:market:specialist:sample
|
||||
-- mini:market:manager:sample
|
||||
-- visible: '0'=隐藏
|
||||
-- =============================================================================
|
||||
|
||||
UPDATE sys_menu
|
||||
SET visible = '0',
|
||||
update_time = NOW()
|
||||
WHERE del_flag = 0
|
||||
AND (
|
||||
perms IN (
|
||||
'mini:market:specialist:sample',
|
||||
'mini:market:manager:sample'
|
||||
)
|
||||
OR path IN (
|
||||
'/pages/market/webview/index?entry=specialist-sample',
|
||||
'/pages/market/webview/index?entry=manager-sample'
|
||||
)
|
||||
);
|
||||
@@ -0,0 +1,21 @@
|
||||
-- =============================================================================
|
||||
-- 菜单改名:客户管理 → 客户基础信息
|
||||
-- id: 121
|
||||
-- perms: biz:customer:list
|
||||
-- 父级:市场基础信息
|
||||
--
|
||||
-- 【前端固定菜单】同步修改:
|
||||
-- - web-admin/src/router/modules/sqxp.ts
|
||||
-- - backend/app/api/menu.py
|
||||
-- =============================================================================
|
||||
|
||||
UPDATE sys_menu
|
||||
SET menu_name = '客户基础信息',
|
||||
update_time = NOW()
|
||||
WHERE del_flag = 0
|
||||
AND (
|
||||
id = '121'
|
||||
OR perms = 'biz:customer:list'
|
||||
)
|
||||
AND menu_type = 'C'
|
||||
AND menu_name <> '客户基础信息';
|
||||
@@ -23,7 +23,7 @@ CREATE TABLE IF NOT EXISTS biz_sample_storage_cert (
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE KEY uk_bssc_tenant_sample (tenant_no, sample_code),
|
||||
KEY idx_bssc_protocol (tenant_no, collection_protocol_id, del_flag)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='样本储存证办理';
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='样本储存证办理';
|
||||
-- 注:uk_bssc_tenant_sample 不含 del_flag;del_flag=0 行唯一性由应用层保证(与 biz_sample_storage_cert_qc 一致)。
|
||||
|
||||
CREATE TABLE IF NOT EXISTS biz_sample_insurance (
|
||||
@@ -57,7 +57,7 @@ CREATE TABLE IF NOT EXISTS biz_sample_insurance (
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE KEY uk_bsi_tenant_sample (tenant_no, sample_code),
|
||||
KEY idx_bsi_protocol (tenant_no, collection_protocol_id, del_flag)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='样本保险办理';
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='样本保险办理';
|
||||
-- 注:uk_bsi_tenant_sample 不含 del_flag;del_flag=0 行唯一性由应用层保证(与 biz_sample_storage_cert_qc 一致)。
|
||||
|
||||
-- 迁移:协议级储存证 → 协议下每个未删样本一行(幂等 NOT EXISTS)
|
||||
@@ -69,7 +69,8 @@ INSERT INTO biz_sample_storage_cert (
|
||||
update_by, update_time, del_flag
|
||||
)
|
||||
SELECT
|
||||
REPLACE(UUID(), '-', ''),
|
||||
-- MySQL 5.7 同语句批量 UUID() 可能撞主键,用业务键派生稳定唯一 id
|
||||
MD5(CONCAT('bssc#', c.tenant_no, '#', ps.sample_code, '#', c.id, '#', ps.id)),
|
||||
ps.sample_code,
|
||||
c.collection_protocol_id,
|
||||
c.make_status,
|
||||
@@ -89,16 +90,16 @@ SELECT
|
||||
0
|
||||
FROM biz_protocol_storage_cert c
|
||||
INNER JOIN biz_protocol_sample ps
|
||||
ON ps.collection_protocol_id = c.collection_protocol_id
|
||||
AND ps.tenant_no = c.tenant_no
|
||||
ON (ps.collection_protocol_id COLLATE utf8mb4_unicode_ci) = (c.collection_protocol_id COLLATE utf8mb4_unicode_ci)
|
||||
AND (ps.tenant_no COLLATE utf8mb4_unicode_ci) = (c.tenant_no COLLATE utf8mb4_unicode_ci)
|
||||
AND ps.del_flag = 0
|
||||
WHERE c.del_flag = 0
|
||||
AND ps.sample_code IS NOT NULL
|
||||
AND ps.sample_code <> ''
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM biz_sample_storage_cert t
|
||||
WHERE t.tenant_no = c.tenant_no
|
||||
AND t.sample_code = ps.sample_code
|
||||
WHERE (t.tenant_no COLLATE utf8mb4_unicode_ci) = (c.tenant_no COLLATE utf8mb4_unicode_ci)
|
||||
AND (t.sample_code COLLATE utf8mb4_unicode_ci) = (ps.sample_code COLLATE utf8mb4_unicode_ci)
|
||||
AND t.del_flag = 0
|
||||
);
|
||||
|
||||
@@ -114,7 +115,7 @@ INSERT INTO biz_sample_insurance (
|
||||
update_by, update_time, del_flag
|
||||
)
|
||||
SELECT
|
||||
REPLACE(UUID(), '-', ''),
|
||||
MD5(CONCAT('bsi#', t.tenant_no, '#', ps.sample_code, '#', t.id, '#', ps.id)),
|
||||
ps.sample_code,
|
||||
t.collection_protocol_id,
|
||||
t.todo_status,
|
||||
@@ -143,15 +144,15 @@ SELECT
|
||||
0
|
||||
FROM biz_protocol_fullmoon_todo t
|
||||
INNER JOIN biz_protocol_sample ps
|
||||
ON ps.collection_protocol_id = t.collection_protocol_id
|
||||
AND ps.tenant_no = t.tenant_no
|
||||
ON (ps.collection_protocol_id COLLATE utf8mb4_unicode_ci) = (t.collection_protocol_id COLLATE utf8mb4_unicode_ci)
|
||||
AND (ps.tenant_no COLLATE utf8mb4_unicode_ci) = (t.tenant_no COLLATE utf8mb4_unicode_ci)
|
||||
AND ps.del_flag = 0
|
||||
WHERE t.del_flag = 0
|
||||
AND ps.sample_code IS NOT NULL
|
||||
AND ps.sample_code <> ''
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM biz_sample_insurance s
|
||||
WHERE s.tenant_no = t.tenant_no
|
||||
AND s.sample_code = ps.sample_code
|
||||
WHERE (s.tenant_no COLLATE utf8mb4_unicode_ci) = (t.tenant_no COLLATE utf8mb4_unicode_ci)
|
||||
AND (s.sample_code COLLATE utf8mb4_unicode_ci) = (ps.sample_code COLLATE utf8mb4_unicode_ci)
|
||||
AND s.del_flag = 0
|
||||
);
|
||||
Reference in new issue
Block a user