From 14001c090004ff5181dc5e69e7b9f835210ba341 Mon Sep 17 00:00:00 2001 From: ThearchyHelios Date: Mon, 19 Oct 2026 10:13:04 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=B0=E5=BD=95=E9=A1=B5=E5=AE=A1=E6=89=B9?= =?UTF-8?q?=E4=B9=8B=E5=90=8E=E7=9A=84=E6=A8=AA=E5=B9=85=E6=8C=89=E9=A9=B3?= =?UTF-8?q?=E5=9B=9E=E4=B9=8B=E5=90=8E=E5=8E=BB=E5=93=AA=E8=AF=B4=EF=BC=9A?= =?UTF-8?q?=E6=8E=A5=E4=BA=86=E9=A9=B3=E5=9B=9E=E5=87=BA=E5=8F=A3=E7=9A=84?= =?UTF-8?q?=E4=B8=8D=E8=AF=B4=E3=80=8C=E6=9C=AC=E6=AC=A1=E8=BF=90=E8=A1=8C?= =?UTF-8?q?=E7=BB=88=E6=AD=A2=E3=80=8D=EF=BC=8C=E6=B2=A1=E6=8E=A5=E9=A9=B3?= =?UTF-8?q?=E5=9B=9E=E5=87=BA=E5=8F=A3=E7=9A=84=E5=B7=A5=E5=85=B7=E3=80=81?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E5=AE=A1=E6=89=B9=E7=85=A7=E5=AE=9E=E8=AF=B4?= =?UTF-8?q?=E7=BB=88=E6=AD=A2=EF=BC=88=E6=8C=89=E4=B8=AD=E6=96=AD=E5=86=85?= =?UTF-8?q?=E5=AE=B9=E7=9A=84=20reject=5Froute=EF=BC=9B=E8=80=81=E5=AE=A1?= =?UTF-8?q?=E6=89=B9=E7=85=A7=E6=97=A7=E6=8C=89=E6=A8=A1=E5=BC=8F=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/pages/runs/RunDetailView.tsx | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/frontend/src/pages/runs/RunDetailView.tsx b/frontend/src/pages/runs/RunDetailView.tsx index f6e79d55..7d0d50a4 100644 --- a/frontend/src/pages/runs/RunDetailView.tsx +++ b/frontend/src/pages/runs/RunDetailView.tsx @@ -21,6 +21,7 @@ import { signerNow } from '../../store/auth' import { explainRunError, explainStartError } from '../../lib/explain' import { canLeave, leavePass } from '../../lib/leave' import { SIGNER_TEXT, UNSAVED_HINT, isUnsaved, runName } from '../../lib/terms' +import { rejectRouteOf } from '../../lib/termsApp' import { asView, duplicateNames, graphShape, idTail, isLiveRun, runScope, type DetailView, } from './model' @@ -347,7 +348,11 @@ export function RunDetailView({ runId, onChange, onDeleted }: { setFeedback({ kind: 'decided', approved, node: a.node_label ?? labelOf(a.node_id) ?? a.node_id, by: done?.resolved_by, at: done?.resolved_at ?? new Date().toISOString(), - terminates: approved === false && a.mode !== 'approve', + // 驳回之后去哪按中断内容的 reject_route(接了驳回出口的不终止,没接的工具 / 代码审批会终止);老审批没带的照旧按模式猜 + terminates: approved === false && (() => { + const route = rejectRouteOf(a.payload as Record | undefined) + return route ? 'ends' in route && route.ends === 'run' : a.mode !== 'approve' + })(), }) // 批完要能看着它往下跑:接上实时流,时间线继续长 d.follow(next)