数据工单有了自己的面孔;件上四处样式对齐;缺库不再问人;5173 反代改回本机

用户在工作台上连报六条(2026-08-27):
- 对话区把数据工单摆成「执行工单」→ 契约 ExecutionWorkOrder.variant:'data'(引擎侧与执行工单无异,
  只换面孔),归一层从卡上带下来,web 新增 DataForm(同一套办法、另一副面孔:色/图标/「数据工单」/「确认写入」),
  办结卡与治理台人类工具目录同步;活动的两张数据工单卡骨架标 variant:"data"。
- 表显示不全不能右滑 → 目标件把 overflow-x:auto 写在 .tbl-wrap,平台包装是 .jc-tbl-wrap,谁都没管到;补一条。
- 表头只留中文 → 三张数据工单表去英文列名与 .thd 小字。
- 编辑态内部料号「只读字 + 输入框」并排 → 目标件 #tbl1 .jc-vcell{display:inline}(id 特异度)盖过
  table.on 的隐藏规则,表 1 每格其实都并排,PN 那格恰好有字;用 id 特异度覆盖回去。
- input 与 select 没对齐 → 徽标从前包 .ro 编辑态留着、压在下拉框头上把那格顶低 13px,改成随只读格一起藏;
  input/select 钉同一高度。
- 第一步「派数据工单还是放弃候选」不该问人 → 决策卡退役(覆盖规格「候选 ≥2 可放弃」那一条,用户定),
  查无记录一律自动派;剧本/说明书/测试/e2e 同步(e2e 新增 expectAsks.max 断言「不该问的没问」)。
顺带:5173 的 /api 反代默认指向一条公网隧道(150.158.83.131:46100 → nps → npc → 本机 :8787),
浏览器每次请求先出公网再绕回来;默认改回本机,要远端的显式给 API_PROXY_TARGET。

静态渲染实证:900px 宽的框里横向能滑 200px;编辑态同一行 3 input + 1 select 全部 32px 同一 y;
只读 PN 格 display:none。活动包 1.4.0;2097 测 / typecheck / lint / depcruise 绿。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FJcX8A6TWp4GRs41TYryEh
This commit is contained in:
xcs
2026-08-27 12:36:13 +08:00
co-authored by Claude Fable 5
parent 3171d8a864
commit 51c87af583
15 changed files with 197 additions and 116 deletions
+12 -8
View File
@@ -608,9 +608,9 @@ const SUITES = {
cases: [
{
sample: 0,
name: '候选缺库 · XL2596S-5.0 派数据工单(P-08 + P-10)· 审核先点名驳回再通过',
// 决策卡序:候选 ≥2 缺库先问 → create;审核第一张点名意见驳回;第二张通过
decideSeq: ['create', 'custom:使能阈值那条 UNKNOWN 的去向请写明验证任务号与测试条件', 'approve'],
name: '候选缺库 · XL2596S-5.0 自动派数据工单(P-08 + P-10)· 审核先点名驳回再通过',
// 决策卡序(2026-08-27 起缺库不再问人,数据工单自动派):审核第一张点名意见驳回;第二张通过
decideSeq: ['custom:使能阈值那条 UNKNOWN 的去向请写明验证任务号与测试条件', 'approve'],
expectDecision: true,
expectPort: 'assessment-released',
stageEdits: {
@@ -706,11 +706,11 @@ const SUITES = {
},
{
sample: 3,
name: '三候选 · 两颗缺库各问一次 · 国产 32V 硬约束不推荐',
decideSeq: ['create', 'create', 'approve'],
name: '三候选 · 两颗缺库一律自动派单 · 国产 32V 硬约束不推荐',
decideSeq: ['approve'],
expectDecision: true,
// 两颗候选缺库 → 按规格各问一次(审核卡也是决策卡,所以要按问法数,不能只看张数)
expectAsks: [{ re: /查无记录/, count: 2 }],
// 缺库不再问人(2026-08-27 用户定):这一例一张「查无记录」决策卡都不该出现
expectAsks: [{ re: /查无记录/, count: 0, max: 0 }],
expectPort: 'assessment-released',
stageEdits: {
'parts.profile': [
@@ -1389,12 +1389,16 @@ async function runCase(suite, kase) {
* 而审核卡也是决策卡 —— `decisions > 0` 于是恒真,该问没问照样绿)。
*/
if (kase.expectAsks !== undefined) {
for (const { re, count } of kase.expectAsks) {
for (const { re, count, max } of kase.expectAsks) {
const got = asked.filter((a) => re.test(a)).length;
if (got < count) {
console.log(` ⚠️ 该问的没问够:${re} 期望 ≥${count} 张,实际 ${got} 张 —— 判失败`);
ok = false;
}
if (max !== undefined && got > max) {
console.log(` ⚠️ 不该问的问了:${re} 最多 ${max} 张,实际 ${got} 张 —— 判失败`);
ok = false;
}
}
}
if (kase.expectDecision && decisions === 0) {