From c7e7a7aa85994425031f52a79b8cad6f220e5966 Mon Sep 17 00:00:00 2001 From: chenxing Date: Sun, 18 Oct 2026 08:18:28 +0800 Subject: [PATCH] =?UTF-8?q?[audit]=20P6.3=20F5-4=20=E9=87=8D=E8=B7=91?= =?UTF-8?q?=E7=A1=AE=E8=AE=A4=E6=A1=86=E6=94=B9=20Modal+=E5=A4=8D=E9=80=89?= =?UTF-8?q?=E3=80=8C=E6=8C=89=E5=BD=93=E5=89=8D=E5=B7=B2=E5=8F=91=E5=B8=83?= =?UTF-8?q?=E6=B5=81=E7=A8=8B=E5=AE=9A=E4=B9=89=E9=87=8D=E8=B7=91=EF=BC=88?= =?UTF-8?q?=E6=95=91=E5=83=B5=E5=B0=B8=E5=8A=9E=E4=BB=B6=EF=BC=89=E3=80=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/module/flow.ts | 10 ++++++--- src/views/flow/admin/Instances.vue | 35 ++++++++++++++++++++---------- 2 files changed, 30 insertions(+), 15 deletions(-) diff --git a/src/api/module/flow.ts b/src/api/module/flow.ts index b75b7bc..439f30c 100644 --- a/src/api/module/flow.ts +++ b/src/api/module/flow.ts @@ -277,9 +277,13 @@ class FlowApi { routerStatus(id: number | string, enabled: boolean) { return post(`${ROOT}/admin/router/status/${id}?enabled=${enabled}`); } - /** 重跑路由(判断失败挂起的恢复入口:重新调判断,成功即按出口续走) */ - instanceReroute(instanceId: number | string) { - return post(`${ROOT}/admin/instance/${instanceId}/reroute`); + /** + * 重跑路由(判断失败挂起的恢复入口:重新调判断,成功即按出口续走)。 + * useLatestDef=true(F5-4 僵尸逃生门):按该流程当前已发布最高版本重跑并刷新办件定义快照。 + */ + instanceReroute(instanceId: number | string, useLatestDef?: boolean) { + const suffix = useLatestDef ? "?useLatestDef=true" : ""; + return post(`${ROOT}/admin/instance/${instanceId}/reroute${suffix}`); } /** 表达式调试求值(2026-10-10:与运行时同一求值核心;不落库不走流程) */ routerEval(body: { expression: string; variablesJson?: string }) { diff --git a/src/views/flow/admin/Instances.vue b/src/views/flow/admin/Instances.vue index f5bb538..b00b5b5 100644 --- a/src/views/flow/admin/Instances.vue +++ b/src/views/flow/admin/Instances.vue @@ -2,7 +2,6 @@ // 办件记录(管理端):全校办件查询;CONDITION 判断失败挂起的办件在此"重跑路由"恢复 import { ref } from "vue"; import { Message, Tag } from "view-ui-plus"; -import MyConfirm from "@/components/MyConfirm"; import { OperatorEnum } from "@/types"; import TablePageAlovaNew from "@/components/TablePageAlovaNew.vue"; import InstanceDrawer from "@/views/flow/components/InstanceDrawer.vue"; @@ -41,18 +40,25 @@ function openDetail(instanceId: string | number) { drawerVisible.value = true; } -/** 重跑路由(2026-09-24 §4.4):重新调判断服务,成功即按出口续走;仍失败回业务错(办件继续挂起) */ +/** 重跑路由(2026-09-24 §4.4 + F5-4 逃生门):确认框带「按当前已发布定义重跑」复选—— + * 僵尸办件(挂起时的表达式已修好并发布为新版)勾选后按新版续走,否则按落库快照重跑 */ +const rerouteVisible = ref(false); +const rerouteUseLatest = ref(false); +const rerouteRow = ref(null); + function onReroute(row: any) { - MyConfirm({ - title: "重跑路由", - msg: `确定对办件「${row.bizTitle || row.id}」重跑条件路由判断吗?`, - info: "仅对挂在条件分支节点的挂起办件生效(未挂起的会提示无需重跑)", - async onOk() { - await flowApi.instanceReroute(row.id).send(); - Message.success("路由已重跑,流程按新判断结果继续"); - tableRef.value?.reloadData(OperatorEnum.edit); - }, - }); + rerouteRow.value = row; + rerouteUseLatest.value = false; + rerouteVisible.value = true; +} + +async function confirmReroute() { + const row = rerouteRow.value; + if (!row) return; + await flowApi.instanceReroute(row.id, rerouteUseLatest.value).send(); + rerouteVisible.value = false; + Message.success("路由已重跑,流程按判断结果继续"); + tableRef.value?.reloadData(OperatorEnum.edit); } // dataApi 返回 Method(alova usePagination 负责发送与解包),不能调 .send() @@ -90,5 +96,10 @@ function onSearch() { + +

确定对办件「{{ rerouteRow?.bizTitle || rerouteRow?.id }}」重跑条件路由判断吗?

+

仅对挂在条件分支节点的挂起办件生效(未挂起的会提示无需重跑)

+ 按当前已发布流程定义重跑(救僵尸办件) +