From 656c0d1bf57ec508be3830dfd0a8b0455483b8a2 Mon Sep 17 00:00:00 2001 From: chenxing Date: Sat, 3 Oct 2026 14:09:02 +0800 Subject: [PATCH] =?UTF-8?q?feat(flow-editor):=20=E5=A4=9A=E5=87=BA?= =?UTF-8?q?=E5=8F=A3=E6=B3=B3=E9=81=93=20UI=EF=BC=88=E6=8A=BD=E5=B1=89?= =?UTF-8?q?=E5=BC=80=E5=85=B3+=E5=87=BA=E5=8F=A3=E8=B7=AF=E7=94=B1?= =?UTF-8?q?=E5=AE=B9=E5=99=A8+=E5=88=86=E6=94=AF=E5=A2=9E=E5=88=A0/?= =?UTF-8?q?=E6=81=A2=E5=A4=8D=E5=8D=95=E5=87=BA=E5=8F=A3=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../def-editor/components/ApprovalDrawer.vue | 30 ++- .../admin/def-editor/components/NodeList.vue | 2 + .../def-editor/components/OutletLanes.vue | 198 ++++++++++++++++++ src/views/flow/admin/def-editor/index.vue | 36 +++- 4 files changed, 260 insertions(+), 6 deletions(-) create mode 100644 src/views/flow/admin/def-editor/components/OutletLanes.vue diff --git a/src/views/flow/admin/def-editor/components/ApprovalDrawer.vue b/src/views/flow/admin/def-editor/components/ApprovalDrawer.vue index 3738da4..1a33372 100644 --- a/src/views/flow/admin/def-editor/components/ApprovalDrawer.vue +++ b/src/views/flow/admin/def-editor/components/ApprovalDrawer.vue @@ -6,7 +6,7 @@ import { computed, inject, reactive, ref, watch } from "vue"; import { Message } from "view-ui-plus"; import UserCheckModal from "@/components/UserCheckModal.vue"; import { flowApi } from "@/api/module/flow"; -import { ApprovalNode, EDITOR_CTX } from "../model"; +import { ApprovalNode, EDITOR_CTX, createApproval } from "../model"; const props = defineProps<{ modelValue: boolean; @@ -28,6 +28,7 @@ const form = reactive({ userIds: [] as number[], countersign: "ANY" as "ALL" | "ANY", deadlineHours: null as number | null, + multiOutlet: false, }); const userCheckModal = ref(); @@ -47,6 +48,7 @@ function syncFromNode(): void { form.userIds = n.assignee?.type === "USERS" ? [...n.assignee.userIds] : []; form.countersign = n.countersign; form.deadlineHours = n.deadlineHours; + form.multiOutlet = !!(n.outlets && n.outlets.length >= 2); } watch( @@ -119,6 +121,12 @@ function onOk(): void { : { type: "DEPT_KEY", deptKey: form.deptKey }; n.countersign = form.countersign; n.deadlineHours = form.deadlineHours && form.deadlineHours > 0 ? form.deadlineHours : null; + // 开启多出口(2026-10-03 P2):默认 同意/退回 两泳道各放一个待配置审批节点; + // 关闭不在抽屉做——泳道头部"恢复单出口"负责(要处理泳道内容的去向) + if (form.multiOutlet && !(n.outlets && n.outlets.length >= 2)) { + n.outlets = ["同意", "退回"]; + n.branches = [[createApproval()], [createApproval()]]; + } emit("update:modelValue", false); } @@ -197,6 +205,18 @@ function onRemove(): void {
超过时限后进入催办提醒(取到达时间 + N 小时)
+ +
+ +
+ + 多出口审批(办理人按下按钮选路) +
+
+ 开启后卡片下出现出口泳道(默认 同意/退回),出口名即办理按钮文案;泳道尾自动汇合到后继节点。 + 关闭请用泳道头部的"恢复单出口"(需处理泳道内容去向) +
+
@@ -249,6 +269,14 @@ function onRemove(): void { flex-wrap: wrap; gap: 4px 0; } +.mo-row { + display: flex; + align-items: center; + gap: 8px; +} +.mo-label { + font-size: 13px; +} .dw-foot { position: sticky; bottom: -16px; diff --git a/src/views/flow/admin/def-editor/components/NodeList.vue b/src/views/flow/admin/def-editor/components/NodeList.vue index 8346b45..c5c4550 100644 --- a/src/views/flow/admin/def-editor/components/NodeList.vue +++ b/src/views/flow/admin/def-editor/components/NodeList.vue @@ -5,6 +5,7 @@ import NodeCard from "./NodeCard.vue"; import NotifyCard from "./NotifyCard.vue"; import ParallelBox from "./ParallelBox.vue"; import ConditionBox from "./ConditionBox.vue"; +import OutletLanes from "./OutletLanes.vue"; import PlusButton from "./PlusButton.vue"; defineProps<{ @@ -19,6 +20,7 @@ defineProps<{