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<{