From 0f40bae0d16ee7e626d7b6a688f703590d8671ce Mon Sep 17 00:00:00 2001 From: xcs Date: Sun, 30 Aug 2026 20:29:41 +0800 Subject: [PATCH] =?UTF-8?q?feat(w05):=20input-supplement=20=E7=85=A7?= =?UTF-8?q?=E6=96=B0=E7=9B=AE=E6=A0=87=E4=BB=B6=E6=8D=A2=E7=89=88=E9=9D=A2?= =?UTF-8?q?=20=E2=80=94=E2=80=94=20=E4=B8=A4=E6=9D=A1=E8=BD=A8=E9=81=93=20?= =?UTF-8?q?+=20details=20=E9=9D=A2=E6=9D=BF=20+=20=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E7=93=B7=E8=B4=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 照 docs/ss02-act-05-new/ACT-WORK-05-数据工单-PN主数据创建.html 重排数据工单那一屏, 绑定面与功能一个不动(四张台账、四道闸、两处加行、终审 C1 的 disabled type_id、 主键钥匙全部原样带走)。用户定的三件事:每颗料一条轨道(两条并列)/ 新增类型面板 每行四格(parts.type_param 那张表本就是,搬进 details 面板,独立区退役)/ 不动平台 每步骤卡自带一道闸。 P08_CSS 整段换成新目标件的机械抽取(嵌进 TS 后与源文件 style 区间 diff 零差异); 旧目标件自带的孪生件显隐规则(.jc-vcell/.jc-cell/加删行)改由 BIND_P08 承载, focus 光环换成新 :root 里真存在的 --data-wash(旧名 --brand-wash 会被浏览器整条丢弃)。 步骤③ 不按轨道分两栏是机制不是偏好:bodyOf 单 querySelector、rowOf 认宿主直接 子元素 —— 嵌套形状会把一颗料的所有参数格并成一条记录(后写的覆盖先写的、静默), 探针用真实 renderView+collect 钉死(view-container-collect-div-rows.test.ts,前一提交)。 瓷贴单块平铺,主键钥匙收进 .rowkey(display:none 但真挂 data-col)。 目标件脚本驱动的状态全部无脚本翻译:保存即铺格顶掉「选类型即时加载」、details 顶掉 .newtype.show、步骤圆点按基座数点亮(_missing 的 v-0 / distinct 的 v-1)、类型不一致 护栏红带按 sub_eval_part_distinct_chip_type_id 的 v-2 档现身;gateprog 进度条如实退掉 (分母不是基座现有的数,编一个就是界面撒谎)。 活动自测 62 -> 72(8 条新钉逐条变异验证:恰红一条、复原即绿);pnpm gates 退出码 0 (2495 测)。包版本 2.1.9 -> 2.2.0(安装恒新增)。 Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet --- .../__tests__/activity.test.ts | 83 +++- .../src/manifest.ts | 2 +- .../src/views/report.ts | 375 +++++++++++------- .../src/views/target-style.ts | 207 ++++++---- 4 files changed, 443 insertions(+), 224 deletions(-) diff --git a/activities/part-substitution-assessment/__tests__/activity.test.ts b/activities/part-substitution-assessment/__tests__/activity.test.ts index b5f04e0..3e184d4 100644 --- a/activities/part-substitution-assessment/__tests__/activity.test.ts +++ b/activities/part-substitution-assessment/__tests__/activity.test.ts @@ -699,20 +699,83 @@ describe('件① 评估输入补全', () => { }); /* - * 2026-08-29 评审 Important:BIND_COMMON 的序号计数器规则原来只认 `.tbl-wrap` - * (继承自已删除的旧 P08_MASTER_CREATE,同一个 wrapper class,同一个坑), - * 而这张件的三张表全用平台的 `.jc-tbl-wrap` —— 两个 class 对不上,计数器永不触发, - * 只读态与编辑态下「#」列逐行都是空白。钉死 `.jc-tbl-wrap` 现在也接了这五条规则, - * 且这张件确实只用 `.jc-tbl-wrap`(没有表在用没打这条补丁就会数不出来的 `.tbl-wrap`)。 + * 2026-08-29 评审 Important:BIND_COMMON 的序号计数器规则原来只认 `.tbl-wrap`,而工单件的表 + * 走平台的 `.jc-tbl-wrap` —— 两个 class 对不上,计数器永不触发,「#」列逐行空白。 + * 2026-08-30 换版面后这张件只剩面板里两张表(chip_type / type_param),包装是 + * `jc-tbl-wrap tbl-wrap` 双类(平台钩子 + 目标件的边框圆角);轨道与瓷贴没有 # 列, + * 不走计数器。钉死:五条计数器规则还在,且两张表的双类包装恰好两处。 */ - it('四张表的序号列真的会数:.jc-tbl-wrap 也接了 CSS 计数器(不再只认 .tbl-wrap)', () => { + it('面板两张表的序号列真的会数:计数器规则在,双类包装恰两处', () => { expect(html).toMatch(/\.jc-tbl-wrap\s+table\s*,\s*\.tbl-wrap\s+table\s*\{\s*counter-reset:\s*rn;?\s*\}/); expect(html).toMatch(/\.jc-tbl-wrap\s+table\s+td\.rn\s*,\s*\.tbl-wrap\s+table\s+td\.rn\s*\{\s*counter-increment:\s*rn;?\s*\}/); expect(html).toMatch(/\.jc-tbl-wrap\s+table\s+td\.rn\s+\.jc-rn-num::before\s*,\s*\.tbl-wrap\s+table\s+td\.rn\s+\.jc-rn-num::before\s*\{\s*content:\s*counter\(rn\);?\s*\}/); - // 这张件的四张表都走 .jc-tbl-wrap(没有 .tbl-wrap)—— 补丁真的接在会用到的类上(Task 7b 新增 parts.chip_type 这一张,3→4) - expect(html).not.toContain('class="tbl-wrap"'); - const jcTblWrapCount = html.match(/class="jc-tbl-wrap"/g)?.length ?? 0; - expect(jcTblWrapCount).toBe(4); + const wrapCount = html.match(/class="jc-tbl-wrap tbl-wrap"/g)?.length ?? 0; + expect(wrapCount).toBe(2); + // 不许再有单类的表包装 —— 单 .jc-tbl-wrap 缺目标件的边框,单 .tbl-wrap 缺平台的 :has 加行钩子 + expect(html).not.toMatch(/class="jc-tbl-wrap"/); + expect(html).not.toMatch(/class="tbl-wrap"/); + }); + + /* ==================== 2026-08-30 换版面(照 docs/ss02-act-05-new 新目标件)专属的钉子 ==================== */ + + it('**每个台账地址恰一个收值宿主**(chip_type/type_param 的两处是「外层 table + 内层 tbody」同宿主写法):bodyOf 是单 querySelector,同一地址挂两个各自独立的宿主,第二个的值一格都收不上去且不报错(终审 C1 / Task 7b 的族坑)', () => { + const countOf = (addr: string): number => (html.match(new RegExp(`data-edit="${addr.replace('.', '\\.')}"`, 'g')) ?? []).length; + expect(countOf('parts.profile')).toBe(1); + expect(countOf('parts.parameter')).toBe(1); + expect(countOf('parts.chip_type')).toBe(2); + expect(countOf('parts.type_param')).toBe(2); + }); + + it('**两条轨道:行源与写向同一元素,行模版是宿主直接子元素**(rowOf 认宿主直接子元素 —— 一条 lane = 一行;行模版里不许再有
,行展开按第一个同名闭合标签截行内容)', () => { + expect(html).toMatch(/
\s*
/); + const laneBody = /
([\s\S]*?)<\/section>/.exec(html)?.[1] ?? ''; + expect(laneBody).not.toBe(''); + expect(laneBody).not.toContain(' { + expect(html).toMatch(/
/); + const pvBody = /
([\s\S]*?)<\/section>/.exec(html)?.[1] ?? ''; + expect(pvBody).not.toBe(''); + expect(pvBody).not.toContain(' { + expect(html).toMatch(/class="jc-typewarn" data-class-of="sub_eval_part_distinct_chip_type_id"/); + expect(html).toContain('.jc-typewarn{display:none}'); + expect(html).toContain('.jc-typewarn.v-2{display:flex'); + }); + + it('**步骤圆点只按基座数点亮**:①③ 挂 _missing(v-0 档)、② 挂 distinct(v-1 档),不许模版自己判「办完了」', () => { + expect(html).toContain('class="sdot sd-m" data-class-of="parts_profile_missing"'); + expect(html).toContain('class="sdot sd-d" data-class-of="sub_eval_part_distinct_chip_type_id"'); + expect(html).toContain('class="sdot sd-m" data-class-of="parts_parameter_missing"'); + expect(html).toContain('.sdot.sd-m.v-0,.sdot.sd-d.v-1{background:var(--data)'); + }); + + it('**新增类型面板是
,且绑定层把抽取样式的 display:none 让开** —— 少了这条让位规则,整个面板(含两道闸与两张表)永远不可见', () => { + expect(html).toContain('
'); + expect(html).toContain('details.newtype{display:block'); + }); + + it('**目标件里靠脚本驱动的两样,搬过来时如实退掉**:进度条 gateprog 的分母不是基座现有的数(编一个就是界面撒谎);viewarea/editarea 双区靠 body.editing 切换,沙箱零脚本切不动 —— 抽取的 CSS 里留着它们的规则,但标记一处都不许用', () => { + const body = html.slice(html.indexOf('')); + expect(body).not.toContain('gateprog'); + expect(body).not.toContain('class="viewarea"'); + expect(body).not.toContain('class="editarea"'); + /* .editarea{display:none} 还在 CSS 里 —— 谁把内容包进它,那块就永远消失 */ + expect(html).toContain('.editarea{display:none}'); + }); + + it('**保存即铺格之前的空态**:pvnull 按 parts_parameter_rows 的 v-0 档现身(零行才摆提示,有行不摆 —— 界面不撒谎)', () => { + expect(html).toContain('class="pv-empty pvnull" data-class-of="parts_parameter_rows"'); + expect(html).toContain('.pvnull{display:none}'); + expect(html).toContain('.pv-empty.pvnull.v-0{display:block}'); }); }); diff --git a/activities/part-substitution-assessment/src/manifest.ts b/activities/part-substitution-assessment/src/manifest.ts index a753765..5e1ae0a 100644 --- a/activities/part-substitution-assessment/src/manifest.ts +++ b/activities/part-substitution-assessment/src/manifest.ts @@ -54,7 +54,7 @@ export const manifest: ActivityManifest = { activityId: ACTIVITY_ID, name: 'ACT-WORK-05 · 差异评估', /* 重写不是改 —— 同版重装是 no-op(静默丢失,踩过) */ - packageVersion: '2.1.9', + packageVersion: '2.2.0', category: '需求分析与方案匹配', sdkVersion: '0.1.0-m5', checksum: 'dev-checksum-part-substitution-assessment', diff --git a/activities/part-substitution-assessment/src/views/report.ts b/activities/part-substitution-assessment/src/views/report.ts index 0ea055c..9cfdfa0 100644 --- a/activities/part-substitution-assessment/src/views/report.ts +++ b/activities/part-substitution-assessment/src/views/report.ts @@ -5,12 +5,11 @@ * 差异评估结论审核 / 评审放行与落账确认)按 spec §8 全部作废,S1 那一步不再分成 * 「先核对存在性 → 分别派 P-08/P-10 数据工单 → 再摆评估输入清单」三个局面 —— * 新的四步案例模型只有一张数据工单卡(`variant: 'data'`),这里对应**一张**新局面 - * `input-supplement`(评估输入补全):**四块竖排**(spec §6.1,Task 7b 补第②a 块)—— - * ① 要评估什么(两颗料的存在性 + 主数据,`sub_eval.part` 铺行 / `parts.profile` 承载编辑); - * ②a 芯片类型(每颗料各自的类型选择,选项从 `parts.chip_type` 现读;类型下拉里没有合适的 - * 就在这里现新建一个,`parts.chip_type` 承载编辑); - * ②b 核心参数字段清单(新建类型时要填的字段清单,`parts.type_param` 承载编辑,供加行); - * ③ 参数值(逐条核心参数的实测 / 规格值,一字段一行,`parts.parameter`)。 + * `input-supplement`(评估输入补全)。**2026-08-30 照新目标件换版面**(详见下方 + * 「局面:评估输入补全」一节的大注释):两条并列轨道(每颗料一条:档案卡 + 主数据 + + * 类型选择)→ 新增类型 `
` 面板(`parts.chip_type` + `parts.type_param`, + * 后者即「每行四格」的核心参数字段清单)→ 核心参数值瓷贴(`parts.parameter`,单块平铺)。 + * 台账绑定面与 Task 7/7b 交付的一个不差,变的只有版面。 * 顶部一条红带摆 S1 配方算好的 `gate_reason`(「还差什么」的一句话,配方 §see case-model.ts * 的 step④),够不够齐、该不该出现由样式表判(§5「模版不许算」)。 * @@ -29,11 +28,9 @@ * 是本仓**唯一**「auto:true 又是 integer」的主键,改声明成 `text`(与其六处同一身份链路的 * 引用列一起改)后两处坑自然绕开,详见 manifest.ts 该字段的大注释。 * - * 版面语言仍是「搬,不要照着做」(《HTML报告生成规范》§7):`P08_CSS`(逐字节抽自 - * `docs/SS02-ACT-WORK-05-html/ACT-WORK-05-数据工单-01-芯片主数据创建.html`, - * 见 `./target-style.ts` 头注)是**唯一**的样式来源 —— 三块内容原来分属 P-08 数据工单 / - * P-10 数据工单(复用 P08_CSS)/ 执行工单(EXEC_CSS)三张局面,合并成一张之后 - * 统一沿用 P08_CSS 这一套版面语言(EXEC_CSS 随之退休,见 target-style.ts 头注)。 + * 版面语言仍是「搬,不要照着做」(《HTML报告生成规范》§7):`P08_CSS`(2026-08-30 起 + * 逐字节抽自 `docs/ss02-act-05-new/ACT-WORK-05-数据工单-PN主数据创建.html`, + * 见 `./target-style.ts` 头注)是**唯一**的样式来源。 * `BIND_COMMON`/`BIND_P08` 是平台绑定层加的东西(缺项红带、编辑闸/增删行、 * `data-class-of` 的 `v-*` 别名):目标件是写死数据的静态 demo,没有「N 行草稿」 * 「编辑态与归档态二选一」这些平台概念。 @@ -50,9 +47,8 @@ const BIND_COMMON = ` 两张验收件照目标件用 .tbl-wrap,而验收版目标件写的是 overflow:hidden(只有数据工单那版补了 overflow-x:auto)。 2026-08-27 用户:「差异评估结论审核这个页面,表格部分不能左右滑动」—— 上一刀只管了前者 */ .jc-tbl-wrap, .tbl-wrap { overflow-x: auto; overflow-y: hidden; } -/* ② 编辑态只留输入格:目标件 #tbl1 .jc-vcell{display:inline}(id 特异度)盖过了 table.on td>.jc-vcell{display:none}, - 于是表 1 每格都是「只读字 + 输入框」并排 —— 内部料号那格恰好有字,人看见的就是它 */ -#tbl1.on td > .jc-vcell:not(.ro) { display: none; } +/* ②(退役,2026-08-30 换版面):旧目标件 #tbl1 那条 id 特异度覆盖已随 #tbl1 一起消失, + 新版面的轨道显隐规则在 BIND_P08 的「编辑机制」一节里 */ /* ③ 一行里的 input 与 select 同高同线:select 天生比 input 矮 4px,编辑态里一排格子高低不齐 */ input.jc-cell, select.jc-cell { height: 32px; box-sizing: border-box; padding-top: 0; padding-bottom: 0; vertical-align: middle; } /* ④ 加行 / 删行要看得见(2026-08-27 用户:「加一行后点旁边的叉没有反应」):E04 那套记号样式挂在它自己的 @@ -109,13 +105,8 @@ html.editable .jc-gapbar.v-0 { display: none; } border-radius: 9px; background: #fff5f5; border: 1px solid #f3b9b5; color: var(--danger); font-size: 12.5px; line-height: 1.65; } .jc-gate-bar b { font-weight: 800; } .jc-gate-bar:has(.jc-gate-text:empty) { display: none; } -/* - * 不给删行的两张表,编辑态里 # 号不能空着:P08_CSS 的 table.on td.rn .jc-rn-num{display:none} - * 是配 .jc-rowdel 一起写的(删行按钮腾出位置)—— 要评估什么(#tbl1)与参数值(#tbl3)两张表 - * 行集固定(人不加行、系统按 sub_eval.part 与 parts.type_param 铺),没有删行按钮可换,编辑态里 - * 用 id 选择器把计数器重新点亮(id 特异度压过 P08_CSS 的类选择器)。 - */ -#tbl1.on td.rn .jc-rn-num, #tbl3.on td.rn .jc-rn-num { display: inline; } +/* (#tbl1/#tbl3 的计数器点亮规则已随 2026-08-30 换版面退役:两张固定行集的表 + 改成了轨道 .lanes 与瓷贴 .pvgrid,不再有 # 号列;面板里两张表仍有删行按钮,走通用规则) */ /* * **新建行(Task 7b,件① 补「新建芯片类型」)**:parts.chip_type / parts.type_param * 两张表新增一条**字面量静态行**(不走 data-rows,不受行数所限,ViewContainer.addRow @@ -185,6 +176,72 @@ ${badgeCss('.rl', [ ['original', '原内部料号'], ['candidate', '候选内部料号'], ])} +/* ==================== 编辑机制(孪生件显隐)———————————————————— + 旧 P08_CSS(旧目标件)自带这一套;新目标件走 viewarea/editarea 双区 + 脚本, + 没有孪生件概念,平台要的这套规则改由绑定层承载(数值照旧目标件那份搬; + focus 光环的变量名换成新 :root 里存在的 --data-wash —— 旧文件叫 --brand-wash, + 新 :root 没有这个名字,留着整条声明会被浏览器丢弃)。 */ +.jc-vcell{display:block;font-size:12.5px;color:var(--ink);line-height:1.5;overflow-wrap:anywhere} +.jc-vcell.mono{font-family:var(--mono);font-size:11.5px;color:var(--ink-2)} +.jc-cell{display:none;width:100%;min-width:60px;border:1px solid var(--line);border-radius:6px;padding:6px 8px;font:inherit;font-size:12.5px;color:var(--ink);background:#fff} +.jc-cell.mono{font-family:var(--mono);font-size:11.5px} +.jc-cell:focus{border-color:var(--data);box-shadow:0 0 0 3px var(--data-wash);outline:none} +table.on td>.jc-vcell{display:none} +table.on td>.jc-cell{display:block} +table.on td>.jc-vcell.ro{display:block} +td.rn .jc-rowdel{display:none;width:22px;height:22px;margin:0 auto;cursor:pointer;border:1px solid var(--line);border-radius:6px;padding:0;font:inherit;font-size:14px;line-height:1;color:var(--ink-3);background:#fff} +td.rn .jc-rowdel:hover{border-color:var(--danger);color:var(--danger);background:var(--danger-soft)} +table.on td.rn .jc-rn-num{display:none} +table.on td.rn .jc-rowdel{display:block} +.jc-addrow{display:none;margin:8px 0 0;padding:8px 12px;border-radius:9px;background:var(--soft);border:1px dashed var(--line);font-size:12px;color:var(--ink-3)} +.jc-addrow button{cursor:pointer;border:1px solid var(--data-line);border-radius:7px;padding:5px 12px;font:inherit;font-size:12px;font-weight:700;color:var(--data-deep);background:var(--data-wash)} +.jc-addrow button:hover{background:var(--data-soft)} +.jc-addrow em{font-style:normal;font-size:11.5px;color:var(--ink-4)} +th.req::after{content:" *";color:var(--danger);font-size:11px} +th{white-space:nowrap} +/* ==================== 两条并列轨道(2026-08-30 用户定「每颗料一条轨道」)———— + .lanes 是唯一的 parts.profile 宿主(bodyOf 单 querySelector),每条 .lane 是宿主 + 直接子元素 = collect 眼里的一行;.on 落在宿主 .lanes 自身(非表格容器,setOpen 规矩)。 */ +.lanes{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-bottom:var(--s2)} +.lane{border:1px solid var(--line-soft);border-radius:var(--r-md);padding:14px;background:#fff} +.lane .idcard{grid-template-columns:1fr;margin-bottom:14px} +.lane .idcard .cell+.cell{border-left:0;border-top:1px solid var(--line-soft)} +.lane .idcard .val{font-size:19px} +.idcard .val .stx{margin-left:8px;vertical-align:3px} +.idcard .pnv:empty::before{content:"(未填写)";font-family:Inter,ui-sans-serif,system-ui,sans-serif;font-size:14px;font-weight:400;color:var(--ink-4);letter-spacing:0} +.idcard .val:has(.tpill>span:empty) .tpill{display:none} +.idcard .val:has(.tpill>span:empty)::after{content:"(未选择)";font-family:Inter,ui-sans-serif,system-ui,sans-serif;font-size:14px;font-weight:400;color:var(--ink-4);letter-spacing:0} +.lanes .fld{margin-top:8px} +.lanes .fld .jc-vcell{padding-top:9px} +.lanes.on .fld .jc-vcell:not(.ro){display:none} +.lanes.on .fld .jc-cell{display:block} +/* 目标件 .fld 的输入是 9px 竖内边距的高个子;BIND_COMMON 那条统一 32px 的规则(为表格里 + input/select 同高写的)排在 P08_CSS 之后会盖过它 —— 这里(alias 排最后)按目标件的高度要回来 */ +.fld input.jc-cell,.fld select.jc-cell,.pv input.jc-cell{height:36px} +@media(max-width:900px){.lanes{grid-template-columns:1fr}} +/* 步骤圆点点亮 —— 「办完了没有」全是基座数:①③ 缺格数为 0(v-0),② 不同类型恰 1 种(v-1) */ +.sdot.sd-m.v-0,.sdot.sd-d.v-1{background:var(--data);border-color:var(--data);color:#fff} +/* 类型不一致护栏 —— 只在 v-2 档现身(sub_eval.part 恰两行,distinct 封顶 2;0=都没选,1=一致) */ +.jc-typewarn{display:none} +.jc-typewarn.v-2{display:flex;gap:8px;margin:0 0 var(--s2);padding:10px 14px;border-radius:9px;background:var(--danger-soft);border:1px solid #f3b9b5;color:var(--danger);font-size:12.5px;line-height:1.65} +.jc-typewarn b{font-weight:800} +/* 新增类型面板:抽取样式的 display:none 是给脚本挂 .show 用的,
自己管折叠 */ +details.newtype{display:block;margin:0 0 var(--s2)} +details.newtype>summary{cursor:pointer;font-size:12.5px;font-weight:700;color:var(--data-deep)} +details.newtype[open]>.ntbody{animation:rise .25s cubic-bezier(.2,.7,.3,1)} +.ntbody{margin-top:12px} +.ntbody h4{margin:14px 0 10px;font-size:12.5px;color:var(--data-deep)} +/* 参数瓷贴:钥匙格藏起来(主键必挂 data-col,但那是行的钥匙不是编辑面);.on 落在 .pvgrid 自身 */ +.pv .rowkey{display:none} +.pv .pvsrc{font-size:10.5px;color:var(--ink-4);margin-bottom:2px} +.pv .pvu{font-weight:400;color:var(--ink-4);font-size:11px} +.pv .pvrow{margin-top:6px} +.pv .pvlab{display:block;font-size:11px;color:var(--ink-4);font-weight:700;margin-bottom:2px} +.pvgrid.on .pv .jc-vcell:not(.ro){display:none} +.pvgrid.on .pv .jc-cell{display:block} +/* 保存即铺格之前的空态 —— parts_parameter_rows 是基座数,v-0 才现身 */ +.pvnull{display:none} +.pv-empty.pvnull.v-0{display:block} `; /** 三层壳照目标件:`
`,不再套 `.proto-root`/`.app-shell`/`.jc-stage` @@ -193,12 +250,11 @@ ${badgeCss('.rl', [ * 收件人 / 关联任务两格由引擎注入;目标件的「最迟交回」(`card.deadline`)本仓没有真数据源,不摆; * 工单编号(`card.id`)换成本次评估案号 `eval_ref`。 */ -const doc = (input: { css: string; alias: string; badge: string; hic?: string; tag: string; kicker: string; title: string; step: string; body: string; footTag: string }): string => +const doc = (input: { css: string; alias: string; badge: string; tag: string; kicker: string; title: string; step: string; body: string; footTag: string }): string => `
${input.badge}
- ${input.hic ?? ''}
${input.kicker}

${input.title}

@@ -216,9 +272,9 @@ const doc = (input: { css: string; alias: string; badge: string; hic?: string; t
`; -/* ==================== 内联 SVG 图标 —— 逐字节搬自「数据工单-01」目标件(它们是版面语言的一部分) ==================== */ -const HIC = - ''; +/* ==================== 内联 SVG 图标 —— 逐字节搬自旧目标件,两张验收件仍在用(.zic 尺寸 + 由 ACC1_CSS/ACC2_CSS 各自定义)。旧的 HIC 题头图标已删:新数据工单目标件没有这个图标, + 新 P08_CSS 也没有 .hic 尺寸规则 —— 无尺寸的内联 SVG 会按默认 300×150 撑爆版面(踩过)。 ==================== */ const ZIC_TASK = ''; const ZIC_TABLE = @@ -277,55 +333,109 @@ const gateBar = (): string => `
/* ==================== 局面:评估输入补全(input-supplement,S1 的数据工单) ==================== */ /** - * 块① 要评估什么 —— 两颗料(原 PN / 候选 PN)的存在性与主数据。 + * **2026-08-30 换版面**:用户给了新目标件 + * `docs/ss02-act-05-new/ACT-WORK-05-数据工单-PN主数据创建.html`(单颗 PN 的三步向导: + * ① PN 名称 → ② PN 类型(下拉首行「+新增类型」+ 面板)→ ③ 核心参数瓷贴; + * 状态全靠尾部 `