From 0f147ec952404aca169530ab78e0e44388ad3156 Mon Sep 17 00:00:00 2001 From: weicw <594098497@qq.com> Date: Sun, 1 Nov 2026 15:59:14 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E6=B5=81=E7=A8=8B=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E9=A1=B5=E5=8E=BB=E6=8E=89=E6=8F=90=E4=BA=A4=E7=8E=AF?= =?UTF-8?q?=E8=8A=82=E5=BC=80=E5=85=B3=EF=BC=8C=E9=99=84=E4=BB=B6=E5=8F=AA?= =?UTF-8?q?=E6=8C=89=E8=8A=82=E7=82=B9=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/approval/flow/constants.ts | 11 +--- src/views/approval/flow/index.vue | 82 ++++------------------------ 2 files changed, 11 insertions(+), 82 deletions(-) diff --git a/src/views/approval/flow/constants.ts b/src/views/approval/flow/constants.ts index 8ca14d5..b8758ae 100644 --- a/src/views/approval/flow/constants.ts +++ b/src/views/approval/flow/constants.ts @@ -9,15 +9,6 @@ export const NODE_TYPE_OPTIONS = [ { value: 'ARCHIVE', label: '归档' } ]; -/** 提交环节:链首只读节点,不在可添加类型里 */ -export const NODE_SUBMIT = 'SUBMIT'; - -/** 节点类型显示用(比可选项多一个提交环节) */ -export const NODE_TYPE_LABELS = [ - ...NODE_TYPE_OPTIONS, - { value: NODE_SUBMIT, label: '提交' } -]; - /** 需要固定组织编码的解析器 */ export const ORG_RESOLVERS = ['orgLeaderByCode', 'orgDeputyByCode']; @@ -26,6 +17,6 @@ export const WRITABLE_TYPES = ['APPROVE', 'COUNTERSIGN', 'CONFIRM']; /** 节点类型显示名 */ export function nodeTypeLabel(type?: string) { - const item = NODE_TYPE_LABELS.find((option) => option.value === type); + const item = NODE_TYPE_OPTIONS.find((option) => option.value === type); return item ? item.label : type || ''; } diff --git a/src/views/approval/flow/index.vue b/src/views/approval/flow/index.vue index 60f0658..71c315b 100644 --- a/src/views/approval/flow/index.vue +++ b/src/views/approval/flow/index.vue @@ -61,19 +61,6 @@ -
-
- 提交环节 - - 跟随代码 - 必须上传附件 - 不必上传附件 - -
-
- 「跟随代码」沿用单据实现里声明的附件要求;选定后本环节作为链首只读节点发布,不产生待办。 -
-
([]); - /* 提交环节:FOLLOW 沿用代码声明,ON/OFF 会以链首 SUBMIT 节点发布(ADR 0016) */ - const submitMode = ref('FOLLOW'); - - /* 加载一条节点链:链首 SUBMIT 拆成独立的提交环节开关 */ - const setChain = (chain?: ApprovalFlowNode[]) => { - const list = chain || []; - const head = list.length && list[0].type === 'SUBMIT' ? list[0] : null; - submitMode.value = head - ? head.attachmentRequired - ? 'ON' - : 'OFF' - : 'FOLLOW'; - nodes.value = list.filter((node) => node.type !== 'SUBMIT'); - editorRevision.value = editorRevision.value + 1; - }; - - /* 发布时拼回完整链:提交环节固定在最前 */ - const buildChain = () => { - if (submitMode.value === 'FOLLOW') { - return nodes.value; - } - return [ - { - key: 'submit', - type: 'SUBMIT', - name: '提交', - attachmentRequired: submitMode.value === 'ON' - }, - ...nodes.value - ]; + /* 深拷贝节点:编辑区不能直接改列表里的对象 */ + const cloneNodes = (nodes?: ApprovalFlowNode[]) => { + return JSON.parse(JSON.stringify(nodes || [])) as ApprovalFlowNode[]; }; /* 加载编辑区:整链替换时递增 revision,强制节点卡片重新初始化 */ const applyFlow = (flow: ApprovalFlow) => { current.value = flow; flowCode.value = flow.flowCode; - setChain(flow.nodes); + nodes.value = cloneNodes(flow.nodes); + editorRevision.value = editorRevision.value + 1; }; const refreshFlows = (keepCode?: string) => { @@ -275,7 +236,8 @@ okText: '载入', cancelText: '取消', onOk: () => { - setChain(current.value?.factoryNodes); + nodes.value = cloneNodes(current.value?.factoryNodes); + editorRevision.value = editorRevision.value + 1; } }); }; @@ -298,7 +260,8 @@ }; const loadVersion = (item: ApprovalFlowVersion) => { - setChain(item.nodes); + nodes.value = cloneNodes(item.nodes); + editorRevision.value = editorRevision.value + 1; historyVisible.value = false; message.info('已载入 v' + item.version + ',确认后点「保存并发布」'); }; @@ -321,7 +284,7 @@ saving.value = true; return publishFlowConfig({ flowCode: current.value!.flowCode, - nodes: buildChain() + nodes: nodes.value }) .then((data) => { saving.value = false; @@ -386,31 +349,6 @@ font-weight: 400; } - .submit-stage { - margin-bottom: 12px; - padding: 12px; - background: rgba(0, 0, 0, 0.02); - border: 1px dashed rgba(0, 0, 0, 0.12); - border-radius: 6px; - } - - .submit-stage-header { - display: flex; - align-items: center; - justify-content: space-between; - } - - .submit-stage-title { - color: rgba(0, 0, 0, 0.85); - font-weight: 500; - } - - .submit-stage-tip { - margin-top: 6px; - color: rgba(0, 0, 0, 0.45); - font-size: 12px; - } - .flow-add { margin-bottom: 12px; }