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 }}」重跑条件路由判断吗?

+

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

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