From 0f4085c2beed8a6b518468c3f6ccf24ce7345435 Mon Sep 17 00:00:00 2001 From: weicw <594098497@qq.com> Date: Sun, 1 Nov 2026 19:39:31 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B5=81=E7=A8=8B=E9=85=8D=E7=BD=AE=EF=BC=9A?= =?UTF-8?q?=E5=AD=98=E6=A1=A3=E8=8A=82=E7=82=B9=E6=8C=89=E7=BB=84=E7=BC=96?= =?UTF-8?q?=E8=BE=91=EF=BC=88ADR=200015=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 收据申请单、设施价格表的存档节点是「报送人 + 部门负责人」分组确认,页面 只在会签节点显示分组,这两条流程打开时分组看不见、单解析器为空,而隐藏的 groups 仍随表单提交,保存必然被后端拦下。 - 分组区块对会签、存档都显示,文案分开:会签组(组内或签,组间会签)/ 确认组(各组都确认后才前进) - 存档节点配了组就隐藏单解析器,添加组时清空已填的解析器 - 节点类型切换只清「不支持分组」类型的组,存档节点保留分组 --- .../approval/flow/components/node-card.vue | 43 ++++++++++++++++--- src/views/approval/flow/constants.ts | 3 ++ 2 files changed, 39 insertions(+), 7 deletions(-) diff --git a/src/views/approval/flow/components/node-card.vue b/src/views/approval/flow/components/node-card.vue index e10824b..12c989a 100644 --- a/src/views/approval/flow/components/node-card.vue +++ b/src/views/approval/flow/components/node-card.vue @@ -57,7 +57,7 @@ - + -
+
- 会签组(组内或签,组间会签) + {{ groupTitle }} - 添加会签组 + {{ groupAddText }}
import { computed, reactive, watch } from 'vue'; import { + GROUP_TYPES, NODE_TYPE_OPTIONS, ORG_RESOLVERS, WRITABLE_TYPES, @@ -228,6 +229,28 @@ const isAttachmentNode = computed(() => form.type !== 'DISPATCH'); + /* 会签必配组;存档可选配组(多组全部确认才前进),配了组就改用组而不再配单解析器 */ + const groupEditable = computed(() => GROUP_TYPES.indexOf(form.type) !== -1); + + const hasGroups = computed(() => (form.groups || []).length > 0); + + const showResolver = computed(() => { + return ( + form.type !== 'COUNTERSIGN' && + !(form.type === 'CONFIRM' && hasGroups.value) + ); + }); + + const groupTitle = computed(() => { + return form.type === 'CONFIRM' + ? '确认组(各组都确认后才前进)' + : '会签组(组内或签,组间会签)'; + }); + + const groupAddText = computed(() => { + return form.type === 'CONFIRM' ? '添加确认组' : '添加会签组'; + }); + const isOrgResolver = (resolver?: string) => { return !!resolver && ORG_RESOLVERS.indexOf(resolver) !== -1; }; @@ -258,12 +281,18 @@ }); const addGroup = () => { + const seq = (form.groups ? form.groups.length : 0) + 1; const group: ApprovalFlowNodeGroup = { - key: 'group' + ((form.groups ? form.groups.length : 0) + 1), - name: '会签组' + ((form.groups ? form.groups.length : 0) + 1), + key: 'group' + seq, + name: (form.type === 'CONFIRM' ? '确认组' : '会签组') + seq, resolver: 'orgLeaderByCode' }; form.groups = [...(form.groups || []), group]; + /* 存档节点开始用组,就不再保留单解析器(后端按组优先,留着会被忽略) */ + if (form.type === 'CONFIRM') { + form.resolver = undefined; + form.orgCode = undefined; + } }; const removeGroup = (index: number) => { @@ -296,7 +325,7 @@ if (!form.groups || !form.groups.length) { addGroup(); } - } else if (form.groups && form.groups.length) { + } else if (type !== 'CONFIRM' && form.groups && form.groups.length) { form.groups = []; } } diff --git a/src/views/approval/flow/constants.ts b/src/views/approval/flow/constants.ts index 8ca14d5..ecb2bc0 100644 --- a/src/views/approval/flow/constants.ts +++ b/src/views/approval/flow/constants.ts @@ -24,6 +24,9 @@ export const ORG_RESOLVERS = ['orgLeaderByCode', 'orgDeputyByCode']; /** 可配置回填字段的节点类型 */ export const WRITABLE_TYPES = ['APPROVE', 'COUNTERSIGN', 'CONFIRM']; +/** 可按组配置审批人的节点类型:会签组必填,存档组可选(多组全部确认才前进) */ +export const GROUP_TYPES = ['COUNTERSIGN', 'CONFIRM']; + /** 节点类型显示名 */ export function nodeTypeLabel(type?: string) { const item = NODE_TYPE_LABELS.find((option) => option.value === type);