Archived
fix(engine): 打不回的验收卡不摆那颗钮 —— 全 auto 的放行步没有模型能接住那句意见
用户:「评审放行与落账确认这一步的验收卡不应该有重做的选项,因为这里都没有接入 ai」。 W05 的 T_release 整个由配方跑完(guide 是空串,不问模型),件又是只读的 —— 打回之后没有任何东西能接住那句意见:配方只会原样再提交一次,撞在「打回之后台账没动过 就不许再提交」那道闸上,连撞两拍落成一张「连续撞在同一条判据上」的兜底卡。 一颗按下去只会把单子推进死胡同的钮,不如不摆(墙要配路;没有路就别立那扇门)。 · 契约:AcceptanceWorkOrder.redoable(不写 = 打得回,老卡老行为); · 装配层按放行那一步的声明现算 —— releaseRedoable 纯函数(有 auto 且 guide 空 → 打不回; 半 auto 与模型驱动照旧打得回,那儿真有模型会读意见),与 decisionCardFace / executionCardVariant 同一种做法、同一个测试位; · 卡面收起理由框与那颗钮,换一句真路:「这一步只落账,退不回上一步 —— 有异议就别确认, 去终止这一单重开」; · **服务端才是门**:redoable:false 的卡收到非 pass 的回传当场拒(redo-unavailable), 直调 API 绕不过;拒回把真路指出来。 S3 结论审核那张审核卡不受影响 —— 它的重做真会带着意见重判(昨夜那一轮)。 测:card-rules 3 条 + releaseRedoable 4 条,两处变异验证;e2e w05 5/5 released、被拒 0。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
This commit is contained in:
@@ -1130,6 +1130,8 @@ function AcceptForm({
|
||||
});
|
||||
const unchecked = checklistMissing(checklist, checked);
|
||||
const passN = order.criteria.filter((c) => c.pass).length;
|
||||
/* 不写 = 打得回(老卡照旧);写了 false 才收起那颗钮 —— 见契约 `AcceptanceWorkOrder.redoable` */
|
||||
const redoable = order.redoable !== false;
|
||||
return (
|
||||
<div className="jc-fc t-acc">
|
||||
<div className="jc-fc-h">
|
||||
@@ -1213,32 +1215,48 @@ function AcceptForm({
|
||||
))}
|
||||
</div>
|
||||
)}
|
||||
<textarea
|
||||
className="jc-note"
|
||||
placeholder="要重做?写明原因(也可以在下面对话里聊)"
|
||||
value={why}
|
||||
onChange={(e) => setWhy(e.target.value)}
|
||||
/>
|
||||
{/*
|
||||
* **打不回的卡不摆理由框、也不摆那颗钮**(2026-09-01 用户定:「评审放行与落账确认这一步的
|
||||
* 验收卡不应该有重做的选项,因为这里都没有接入 ai」)。这一步整个由配方跑完,打回之后
|
||||
* 没有模型会读那句意见、件也只读 —— 那颗钮按下去只会把单子推进死胡同。
|
||||
* 有异议的人还有真路可走:别签,去终止这一单重开 —— 这句话得写在他眼前,
|
||||
* 不然收起一颗钮就成了「少了个选项,不知道该怎么办」。
|
||||
*/}
|
||||
{redoable ? (
|
||||
<textarea
|
||||
className="jc-note"
|
||||
placeholder="要重做?写明原因(也可以在下面对话里聊)"
|
||||
value={why}
|
||||
onChange={(e) => setWhy(e.target.value)}
|
||||
/>
|
||||
) : (
|
||||
<p className="jc-fc-note">
|
||||
<Ico name="info" s={13} />
|
||||
<span>这一步只落账,退不回上一步 —— 有异议就别确认,去终止这一单重开。</span>
|
||||
</p>
|
||||
)}
|
||||
</div>
|
||||
<div className="jc-fc-ft">
|
||||
<Btn
|
||||
className="jc-btn jc-btn-bad"
|
||||
disabled={why.trim() === ''}
|
||||
busy={busy}
|
||||
onClick={() =>
|
||||
onReplyOrder({
|
||||
mode: 'acceptance',
|
||||
workOrderId: order.id,
|
||||
verdict: 'redo',
|
||||
// 驳回也把改过的值带上:人常常一边改一边发现问题,改的痕不该丢
|
||||
values: { ...(orderValues ?? {}) },
|
||||
comment: why.trim(),
|
||||
selectedPorts: {},
|
||||
})
|
||||
}
|
||||
>
|
||||
重做
|
||||
</Btn>
|
||||
{redoable && (
|
||||
<Btn
|
||||
className="jc-btn jc-btn-bad"
|
||||
disabled={why.trim() === ''}
|
||||
busy={busy}
|
||||
onClick={() =>
|
||||
onReplyOrder({
|
||||
mode: 'acceptance',
|
||||
workOrderId: order.id,
|
||||
verdict: 'redo',
|
||||
// 驳回也把改过的值带上:人常常一边改一边发现问题,改的痕不该丢
|
||||
values: { ...(orderValues ?? {}) },
|
||||
comment: why.trim(),
|
||||
selectedPorts: {},
|
||||
})
|
||||
}
|
||||
>
|
||||
重做
|
||||
</Btn>
|
||||
)}
|
||||
<span className="jc-fc-sp" />
|
||||
<Btn
|
||||
className="jc-btn jc-btn-ok"
|
||||
|
||||
Reference in New Issue
Block a user