feat: 二期审批引擎扩展与会签/明细/回填/附件分类共享层(#46)

- ApprovalDocumentType SPI + 注册表:新增单据不再改引擎
- ApprovalApproverResolver:会签组、orgLeaderByCode/orgDeputyByCode、租户岗位解析器
- 会签:任务带 group_key/group_name/group_seq,一人多组一次通过,只取消同组待办
- 回填:节点 writableFields、BACKFILL 动作、approval_field_change 留痕
- 附件:新增 VOUCHER 分类并按单据类型校验必传
- 详情:document.fields/lines/lineColumns/groupProgress + permissions.writableFields
- 列表/导出:title/search_text 落库、flowCode 筛选、明细行数/合计金额/会签进度列、明细导出
- sql/05-approval_phase2.sql(可重复执行)
This commit is contained in:
weicw
2026-10-31 06:13:45 +08:00
parent 5018463005
commit d5001c981c
59 changed files with 3230 additions and 661 deletions
+39
View File
@@ -57,3 +57,42 @@ WHERE r.tenant_id = @tenant_id AND r.deleted = 0 AND r.role_code = 'approval_arc
SELECT 1 FROM sys_role_menu rm
WHERE rm.role_id = r.role_id AND rm.menu_id = m.menu_id AND rm.tenant_id = @tenant_id
);
-- 4. 相关部门(体验券领用申请单固定角色,ADR 0013;待客户确认)
INSERT INTO sys_role (role_name, role_code, comments, sort_number, tenant_id, deleted)
SELECT '相关部门', 'approval_related_dept', '审批种子:体验券领用申请单「相关部门」节点,多人或签(ADR 0013)', 926, @tenant_id, 0
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM sys_role WHERE tenant_id = @tenant_id AND deleted = 0 AND role_code = 'approval_related_dept'
);
INSERT INTO sys_role_menu (role_id, menu_id, tenant_id)
SELECT r.role_id, m.menu_id, @tenant_id
FROM sys_role r
JOIN sys_menu m
ON m.tenant_id = @tenant_id AND m.deleted = 0
AND (m.path IN ('/approval', '/approval/todo', '/approval/instance')
OR m.authority IN ('approval:instance:list', 'approval:instance:submit', 'approval:instance:approve'))
WHERE r.tenant_id = @tenant_id AND r.deleted = 0 AND r.role_code = 'approval_related_dept'
AND NOT EXISTS (
SELECT 1 FROM sys_role_menu rm
WHERE rm.role_id = r.role_id AND rm.menu_id = m.menu_id AND rm.tenant_id = @tenant_id
);
-- 5. 价格表查看:全体员工可查当前生效与历史版本(ADR 0008)
INSERT INTO sys_role_menu (role_id, menu_id, tenant_id)
SELECT r.role_id, m.menu_id, @tenant_id
FROM sys_role r
JOIN sys_menu m
ON m.tenant_id = @tenant_id AND m.deleted = 0
AND (m.path = '/approval/price' OR m.authority = 'approval:price:view')
WHERE r.tenant_id = @tenant_id AND r.deleted = 0
AND (r.role_code = 'approval_staff'
OR LEFT(r.role_code, 12) = 'dept_leader_'
OR LEFT(r.role_code, 12) = 'dept_deputy_'
OR r.role_code IN ('approval_archivist', 'approval_cashier', 'approval_typist',
'approval_issuer', 'approval_general_manager', 'approval_related_dept'))
AND NOT EXISTS (
SELECT 1 FROM sys_role_menu rm
WHERE rm.role_id = r.role_id AND rm.menu_id = m.menu_id AND rm.tenant_id = @tenant_id
);