Archived
feat(w05): 数据齐了也叫人一次 —— S1 改派只读的验收工单,件同一份、编辑钮收起
用户:「就算数据是足的也进入这个数据工单,就派发一个验收工单,界面和数据要和现在的 第一个数据工单一致,只不过把芯片卡片上的编辑按钮去掉,只展示不能编辑,然后把标题旁边的 数据工单改成验收工单」。 病根在引擎拍首那道 doneWhen 扫描:输入本来就齐的单,S1 的 doneWhen 第一拍就为真, 配方一笔都还没跑,这一步当场被收掉 —— 卡永远发不出去,人一眼没看过就进了 S2。 治法:CMMN 给 S1 标 manualActivation,那道扫描多一个门槛(worldTouched),次序变成 「配方发卡 → 人答 → 下一拍 doneWhen 为真才收」;doneWhen 仍是真门,只是不抢在人前面。 平台:执行工单第三副面孔 variant:'accept'(件只读、人只确认「确认无误」)—— 与 mode:'acceptance'(submit 抬起来的收口验收,带打回重做)分清;三副面孔的判断 抽成纯函数 order-face.ts(有测),chat-bubbles 只摆。 活动:S1 两笔互斥的 card(carded 幂等保证一步只发一张)+ 案卷粘着的旗 order_kind; 一张件两副面孔 —— 题头/标题/页脚三处名字与卡角编辑钮按 v-data / v-accept 由样式表挑 (藏的是容器 .fabs,逐枚去盖打不完)。 测:引擎测钉死那一对(标了人工激活 → 卡发得出去、步不收;没标 → 步当场被收、卡发不出); auto-runner variant 透传;order-face 4 条;包内 2 条(两笔卡 + 粘旗)、view 1 条; 两处变异验证。e2e w05 5/5 released、被拒 0、模型调用恰 1 次 —— 都在库那例摆的正是验收工单。 2558 测、四门禁绿;2.15.0 装库核过。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
This commit is contained in:
@@ -843,6 +843,27 @@ describe('件① 评估输入补全', () => {
|
||||
expect(colOf('sub_eval.case', 'gate_state')?.tally).toEqual(['open', 'clear']);
|
||||
});
|
||||
|
||||
/*
|
||||
* 一张件两副面孔(2026-08-31 用户定:「就算数据是足的也进入这个数据工单,就派发一个验收工单,
|
||||
* 界面和数据要和现在的第一个数据工单一致,只不过把芯片卡片上的编辑按钮去掉…标题旁边的
|
||||
* 数据工单改成验收工单」)—— 数据与版面一个字不改,只有题头/标题/页脚三处名字与卡角那组
|
||||
* 编辑钮随案卷的 `order_kind` 换。**收的是容器 `.fabs`**,不是逐枚钮:那几枚各自的 display
|
||||
* 由 `html.editable …` 一串更特异的规则给着,逐枚去盖打不完。
|
||||
*/
|
||||
it('验收工单那一副:题头/标题/页脚换名 + 卡角编辑钮整组收起(同一张件,数据不动)', () => {
|
||||
/* 换脸的钩子挂在最外层 .card 上 —— 判断留在样式表,模版只投类 */
|
||||
expect(html).toContain('data-class-of="order_kind"');
|
||||
for (const pair of ['<span class="k-data">数据工单</span><span class="k-acc">验收工单</span>', '<span class="k-data">数据</span><span class="k-acc">验收</span>']) {
|
||||
expect(html).toContain(pair);
|
||||
}
|
||||
expect(html).toContain('<span class="k-data">差异评估的输入还差几格</span><span class="k-acc">差异评估的输入核对</span>');
|
||||
/* 默认(旗还没写过 / 老单)是数据工单那一副 —— 与从前一模一样 */
|
||||
expect(html).toContain('.k-acc { display: none; }');
|
||||
expect(html).toContain('.v-accept .k-data { display: none; }');
|
||||
expect(html).toContain('.v-accept .fabs { display: none; }');
|
||||
expect(colOf('sub_eval.case', 'order_kind')?.tally).toEqual(['data', 'accept']);
|
||||
});
|
||||
|
||||
it('缺项点名全并进顶条「还差什么」,正文不再有逐块红带', () => {
|
||||
expect(html).toContain('class="jc-gate-sub" data-class-of="parts_profile_missing"');
|
||||
expect(html).toContain('data-slot="parts_profile_missing_keys"');
|
||||
|
||||
@@ -146,13 +146,47 @@ describe('S1 配方', () => {
|
||||
* 变成空字符串)见 `apps/api/src/modules/loop-engine/__tests__/w05-gate-reason-order.test.ts`
|
||||
* ——这份文件只做结构断言,不跑引擎(活动包不许 import apps/*)。
|
||||
*/
|
||||
it('六笔,次序是:两颗料 → 主数据骨架 → 参数骨架 → 案卷 → 卡 → 交代(类型字典/字段清单两笔自投影已随「只选不建」退役)', () => {
|
||||
expect(kinds).toEqual(['project', 'project', 'project', 'project', 'card', 'say']);
|
||||
it('七笔,次序是:两颗料 → 主数据骨架 → 参数骨架 → 案卷 → 数据工单 → 验收工单 → 交代', () => {
|
||||
expect(kinds).toEqual(['project', 'project', 'project', 'project', 'card', 'card', 'say']);
|
||||
expect(acts.map((a) => (a.kind === 'project' ? a.into : undefined)).filter(Boolean)).toEqual([
|
||||
'sub_eval.part', 'parts.profile', 'parts.parameter', 'sub_eval.case',
|
||||
]);
|
||||
});
|
||||
|
||||
/*
|
||||
* **数据齐了也叫人一次**(2026-08-31 用户定:「就算数据是足的也进入这个数据工单,就派发一个
|
||||
* 验收工单…把芯片卡片上的编辑按钮去掉,只展示不能编辑」)。两张卡是互斥的两条路,不是先后:
|
||||
* 引擎的 `carded` 幂等保证一步只发一张 —— 数据工单发过之后,验收工单这一笔永远轮不到
|
||||
* (补完数据不会再被叫第二次)。
|
||||
*/
|
||||
it('两张卡:缺东西派数据工单(读闸)· 都齐了派只读验收工单(读上一笔刚写下的粘旗)', () => {
|
||||
const cards = acts.filter((a) => a.kind === 'card');
|
||||
expect(cards.map((c) => (c.kind === 'card' ? c.variant : undefined))).toEqual(['data', 'accept']);
|
||||
/* 验收工单不重算一遍闸 —— 读的是案卷刚写下的旗,同一件事只许有一处判定 */
|
||||
expect(cards[1]?.kind === 'card' && cards[1].when).toBe('sub_eval_case_order_kind_accept > 0');
|
||||
/* 两张都是执行工单(验收工单是它的变体,不是第三种 mode);零输入,填报/核对都在件上 */
|
||||
for (const c of cards) expect(c.kind === 'card' && c.as).toBe('execution');
|
||||
/* 闸同一份:件只读也要在确认那一刻再数一遍「数据是齐的」 */
|
||||
for (const c of cards) expect(c.kind === 'card' && c.gateLedgers).toEqual(['parts.profile', 'parts.parameter']);
|
||||
});
|
||||
|
||||
/*
|
||||
* 旗**粘着**:第一档读的是上一拍写下的自己(tally 读数)。不粘着的后果实打实 ——
|
||||
* 人在数据工单上把最后一格填上、还没点确认,闸当场变 clear,件的题头会当场改名叫
|
||||
* 「验收工单」、卡角的笔也没了,而他手里那张卡还开着。
|
||||
*/
|
||||
it('order_kind 粘着:已经是 data 就一直是 data,否则按此刻的闸决定(与发卡条件同一句)', () => {
|
||||
const caseAct = acts.find((a) => a.kind === 'project' && a.into === 'sub_eval.case');
|
||||
const kind = caseAct?.kind === 'project' ? caseAct.fields['order_kind'] : undefined;
|
||||
const gate = acts[4]?.kind === 'card' ? acts[4].when : undefined;
|
||||
expect(kind).toEqual({
|
||||
when: 'sub_eval_case_order_kind_data > 0',
|
||||
then: 'data',
|
||||
/* 第二档与数据工单那张卡读的是同一句闸(一处真源) */
|
||||
else: { when: gate, then: 'data', else: 'accept' },
|
||||
});
|
||||
});
|
||||
|
||||
/*
|
||||
* 2026-08-30,Ruling H35:`parts.chip_type`/`parts.type_param` 各自把「选中类型的那一行」
|
||||
* 原样投一遍(值不变,幂等)——目的不是产出新数据,是让 `mine:` 这两张表不再天然为零行,
|
||||
|
||||
@@ -57,8 +57,18 @@ export const CMMN_XML = `<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ifPart id="if_r"><condition>substitution_relation_rows = 1 and substitution_relation_missing = 0 and validation_record_missing = 0</condition></ifPart>
|
||||
</sentry>
|
||||
|
||||
<!-- 1 校验入参与补数据:核对两颗料在不在库、归没归同一类型、参数齐不齐;缺什么派数据工单让人补(全 auto,doneWhen 收步) -->
|
||||
<humanTask id="S1_inputs" name="校验入参与补数据"/>
|
||||
<!--
|
||||
1 校验入参与补数据:核对两颗料在不在库、归没归同一类型、参数齐不齐。
|
||||
缺什么派**数据工单**让人补;都齐了派一张只读的**验收工单**交人核对(2026-08-31 用户定)。
|
||||
|
||||
**manualActivation 是这条「都齐了也叫人」的命门**:引擎在拍首先扫一遍 doneWhen,
|
||||
为真就自己收步(turn-runner 的 sweepRipe)—— 数据本来就齐的单,S1 的 doneWhen
|
||||
第一拍就为真,配方一笔都还没跑,这一步当场被收掉,卡永远发不出去。
|
||||
标了人工激活,那道扫描就多一个门槛:worldTouched(卡真发过)—— 于是次序变成
|
||||
「配方发卡 → 人答 → 下一拍 doneWhen 为真才收」。doneWhen 照旧保留:它仍是这一步的真门,
|
||||
只是不再抢在人前面(2026-08-27 立的口径:人工激活项在 worldTouched 之后照常求 doneWhen)。
|
||||
-->
|
||||
<humanTask id="S1_inputs" name="校验入参与补数据" manualActivation="true"/>
|
||||
|
||||
<!-- 2 逐项差异分析:核心参数逐条比对,四态、推荐等级、风险由系统按规则算(全 auto,doneWhen 收步) -->
|
||||
<humanTask id="S2_assess" name="逐项差异分析">
|
||||
@@ -95,7 +105,8 @@ export const NARRATIVE = `§0 本活动只回答一件事:**候选内部料号
|
||||
|
||||
**四步各自的产出**:
|
||||
① 校验入参与补数据(S1_inputs)—— 核对两颗料在不在库、是否归了同一个芯片类型、核心参数
|
||||
(如 <参数名>)是否齐备;缺什么就派数据工单让人补。产出:两颗料的存在性与类型核对、
|
||||
(如 <参数名>)是否齐备;缺什么就派**数据工单**让人补,都齐了就派一张只读的**验收工单**
|
||||
交人核对 —— 两颗料的资料总要经人过目一次,再交给系统逐项比。产出:两颗料的存在性与类型核对、
|
||||
补齐的芯片主数据与标准化参数。
|
||||
② 逐项差异分析(S2_assess)—— 把两颗料的核心参数逐条比对,判定 MATCH / MISMATCH / UNKNOWN /
|
||||
CONDITIONAL 四态,依规则算出推荐等级与风险。产出:替代关系一行 + 差异明细逐参数一行 +
|
||||
@@ -341,7 +352,7 @@ const GATE_OPEN_WHEN =
|
||||
export const ASSESSMENT_STEPS = [
|
||||
{
|
||||
item: 'S1_inputs' as const,
|
||||
intent: '核对两颗料在不在库、归没归同一个类型、参数值齐不齐;缺什么就派一张数据工单让人补',
|
||||
intent: '核对两颗料在不在库、归没归同一个类型、参数值齐不齐;缺什么派数据工单让人补,都齐了派只读的验收工单交人核对',
|
||||
guide: '',
|
||||
/* Task 7:发给人的数据工单摆的就是这一张 —— 三块竖排(存在性与主数据 / 芯片类型字段 / 参数值),
|
||||
与 auto.do 第 ⑥ 笔 `card` 的 `gateLedgers` 同源(parts.chip_type / parts.type_param /
|
||||
@@ -501,6 +512,22 @@ export const ASSESSMENT_STEPS = [
|
||||
* 这面开关两个值都非空、两个方向都真写 —— 件上按它收红条,与发卡条件同一句判定。
|
||||
*/
|
||||
gate_state: { when: GATE_OPEN_WHEN, then: 'open', else: 'clear' },
|
||||
/*
|
||||
* **这一步派的是哪种工单**(2026-08-31 用户定:「就算数据是足的也进入这个数据工单,
|
||||
* 就派发一个验收工单…把芯片卡片上的编辑按钮去掉,只展示不能编辑」)。
|
||||
* 件按它换脸:`data` → 题头「数据工单」+ 卡角笔/软盘;`accept` → 题头「验收工单」、
|
||||
* 编辑钮整组收起(只读)。
|
||||
*
|
||||
* **必须粘着**(第一档读的是上一拍写下的自己):一步只发一张卡(引擎 `carded` 幂等),
|
||||
* 派出去是哪种,这一步到底就是哪种。不粘着的后果实打实:人在数据工单上把最后一格
|
||||
* 填上、还没点确认,闸当场变 clear —— 旗跟着翻,他手里那张卡还开着,而屏上的件
|
||||
* 已经改名叫「验收工单」、笔也没了,想改回一个填错的值都没有入口。
|
||||
*/
|
||||
order_kind: {
|
||||
when: 'sub_eval_case_order_kind_data > 0',
|
||||
then: 'data',
|
||||
else: { when: GATE_OPEN_WHEN, then: 'data', else: 'accept' },
|
||||
},
|
||||
gate_reason: {
|
||||
when: 'sub_eval_part_rows < 2',
|
||||
then: '原料号与候选料号填成了同一个 —— 没法比出差异,请终止本单,换两个不同的料号重开。',
|
||||
@@ -564,6 +591,37 @@ export const ASSESSMENT_STEPS = [
|
||||
gateWhen: 'parts_profile_distinct_chip_type_id <= 1',
|
||||
gateWhenSay: '两颗料不是同一个芯片类型 —— 逐项比对无从谈起:换一颗料,或把归错的那颗类型改对,再来确认。',
|
||||
},
|
||||
/*
|
||||
* ⑧ **数据本来就齐的单,也要经人过目一次**(2026-08-31 用户定)——
|
||||
* 派一张**验收工单**:同一份件、同一批数据,只是卡角的编辑钮整组收起,题头改叫「验收工单」。
|
||||
*
|
||||
* 与 ⑦ 是互斥的两条路,而不是先后:引擎 `carded` 幂等保证**一步只发一张卡** ——
|
||||
* ⑦ 发过数据工单之后这一笔永远轮不到(人补完数据不会再被叫第二次)。
|
||||
* 条件读上一笔刚写下的旗(每一笔之前刷读数),不重新算一遍闸:同一件事只许有一处判定。
|
||||
*
|
||||
* `gateLedgers` 与 ⑦ 同一份:件是只读的,这道闸在确认那一刻再数一遍
|
||||
* ——「我核过了,数据是齐的」这句话得有人替它数,不能只凭人点了一下。
|
||||
*/
|
||||
{
|
||||
kind: 'card' as const,
|
||||
when: 'sub_eval_case_order_kind_accept > 0',
|
||||
as: 'execution' as const,
|
||||
variant: 'accept' as const,
|
||||
title: '验收工单 · 差异评估的输入核对',
|
||||
basis: [
|
||||
{ k: '原料号', v: { in: 'originalInternalPn' } },
|
||||
{ k: '候选料号', v: { in: 'candidateInternalPn' } },
|
||||
{ k: '本单结论', v: '两颗料都在库、归了同一个芯片类型、核心参数值齐备 —— 没有要补的格子' },
|
||||
],
|
||||
guide: [
|
||||
'两张芯片档案卡上的**主数据**核一遍:品牌 / 生命周期 / 制造商 / 封装 —— 库里的现值就是马上要拿去比对的值。',
|
||||
'点卡翻到背面,把**核心参数值**核一遍:值取自原厂规格书;有存疑的先别确认,去主数据里改对再回来。',
|
||||
'两颗料必须归在**同一个芯片类型**下 —— 顶部「比对基准」摆的就是本轮要逐项比的字段清单。',
|
||||
'这一屏只读:确认无误后回对话区按「确认无误」,系统随即开始逐项差异分析。',
|
||||
],
|
||||
standard: '两张卡的主数据与核心参数值都核过、类型一致 —— 没有异议就确认。',
|
||||
gateLedgers: ['parts.profile', 'parts.parameter'],
|
||||
},
|
||||
{ kind: 'say' as const, text: '已核对两颗料的在库状态与参数齐备情况。' },
|
||||
],
|
||||
},
|
||||
|
||||
@@ -54,7 +54,7 @@ export const manifest: ActivityManifest = {
|
||||
activityId: ACTIVITY_ID,
|
||||
name: 'ACT-WORK-05 · 差异评估',
|
||||
/* 重写不是改 —— 同版重装是 no-op(静默丢失,踩过) */
|
||||
packageVersion: '2.14.0',
|
||||
packageVersion: '2.15.0',
|
||||
category: '需求分析与方案匹配',
|
||||
sdkVersion: '0.1.0-m5',
|
||||
checksum: 'dev-checksum-part-substitution-assessment',
|
||||
@@ -459,6 +459,13 @@ export const manifest: ActivityManifest = {
|
||||
* 两个方向都写得动;件上 data-class-of 投影 v-clear 收红条,判断留在样式表。
|
||||
*/
|
||||
col({ name: 'gate_state', type: 'text', label: '入参闸门状态', tally: ['open', 'clear'] }),
|
||||
/*
|
||||
* **这一步派的是哪种工单**(2026-08-31 用户定「数据齐了也叫人一次」):
|
||||
* `data` = 数据工单(有格子要填)· `accept` = 验收工单(只读,只核对)。
|
||||
* 件按它换脸(题头四字 + 卡角编辑钮显隐),配方按它决定发哪张卡 —— 见 case-model
|
||||
* 那一笔 `order_kind` 的注释(**粘着**:派出去是哪种,这一步到底就是哪种)。
|
||||
*/
|
||||
col({ name: 'order_kind', type: 'text', label: '这一步派的工单种类', tally: ['data', 'accept'] }),
|
||||
col({ name: 'summary', type: 'text', label: '结论摘要' }),
|
||||
],
|
||||
},
|
||||
|
||||
@@ -109,9 +109,26 @@ const gateBar = (): string => `<div class="jc-gate-bar" data-class-of="gate_stat
|
||||
* 收件人 / 关联任务两格由引擎注入;工单编号即本次评估案号 `eval_ref`(页脚)。
|
||||
* `stage` 是每张件自己的 hero 场景(SVG 舞台),`accent` 决定这张件的强调色。
|
||||
*/
|
||||
const doc = (input: { accent: string; alias: string; tag: string; kicker: string; title: string; step: string; stage: string; body: string; footTag: string; headTone?: 'light' }): string =>
|
||||
const doc = (input: {
|
||||
accent: string;
|
||||
alias: string;
|
||||
tag: string;
|
||||
kicker: string;
|
||||
title: string;
|
||||
step: string;
|
||||
stage: string;
|
||||
body: string;
|
||||
footTag: string;
|
||||
headTone?: 'light';
|
||||
/**
|
||||
* **这份件按哪一列换脸**(2026-08-31):列名给进来,渲染时投成 `v-<值>` 挂在最外层 `.card` 上,
|
||||
* 件里凡是要随之变的(题头四字 / 标题 / 卡角编辑钮)都由样式表按这个类挑 —— 判断仍留在样式表,
|
||||
* 模版不算不判。S1 那张件用它区分「数据工单(有格子要填)」与「验收工单(只读)」。
|
||||
*/
|
||||
kindOf?: string;
|
||||
}): string =>
|
||||
`<style>${SHELL_CSS}${input.accent}${input.alias}</style>
|
||||
<div class="page"><div class="card${input.headTone === 'light' ? ' hd-light' : ''}">
|
||||
<div class="page"><div class="card${input.headTone === 'light' ? ' hd-light' : ''}"${input.kindOf === undefined ? '' : ` data-class-of="${input.kindOf}"`}>
|
||||
<header class="card-head">
|
||||
<div class="hero-top">
|
||||
<span class="hero-sys">${input.kicker}</span>
|
||||
@@ -175,6 +192,19 @@ ${badgeCss('.rl', [
|
||||
['original', '原内部料号'],
|
||||
['candidate', '候选内部料号'],
|
||||
])}
|
||||
/*
|
||||
* **一张件两副面孔**(2026-08-31 用户定)—— 最外层 .card 上由 data-class-of=order_kind
|
||||
* 投出 v-data / v-accept,这里只管挑:
|
||||
* · 题头 / 标题 / 页脚三处的四字换名(.k-data ↔ .k-acc);
|
||||
* · **验收工单把卡角那组编辑钮整组收起** —— 藏的是容器 .fabs,不是逐枚钮:
|
||||
* 那几枚各自的 display 由 html.editable 开头那一串更特异的规则给着,逐枚去盖是打不完的;
|
||||
* 父容器一藏,里面的按钮连渲染都不渲染,件就此只读(人点不开编辑,孪生件也就不现身)。
|
||||
* 旗还没写过(老单 / 第一帧)时两个类都不在 → 落回默认的「数据工单」那一副,与从前一模一样。
|
||||
*/
|
||||
.k-acc { display: none; }
|
||||
.v-accept .k-data { display: none; }
|
||||
.v-accept .k-acc { display: inline; }
|
||||
.v-accept .fabs { display: none; }
|
||||
`;
|
||||
|
||||
|
||||
@@ -293,28 +323,35 @@ const BASIS_CARD = `<article class="basis" data-rows="mine:${D}.case"><section c
|
||||
export const INPUT_SUPPLEMENT = doc({
|
||||
accent: ACCENT_DATA,
|
||||
alias: ALIAS_INPUT,
|
||||
tag: '数据工单',
|
||||
/*
|
||||
* **一张件两副面孔**(2026-08-31 用户定:「就算数据是足的也进入这个数据工单,就派发一个验收工单,
|
||||
* 界面和数据要和现在的第一个数据工单一致,只不过把芯片卡片上的编辑按钮去掉…标题旁边的数据工单
|
||||
* 改成验收工单」)—— 数据与画面一个字不改,只有这三处名字与卡角那组编辑钮随 `order_kind` 换。
|
||||
* 谁是哪一副由配方在派卡那一刻定死(粘着的旗),件只负责摆出来。
|
||||
*/
|
||||
kindOf: 'order_kind',
|
||||
tag: '<span class="k-data">数据工单</span><span class="k-acc">验收工单</span>',
|
||||
kicker: 'SS02 · ACT-WORK-05 差异评估',
|
||||
title: '差异评估的输入还差几格',
|
||||
title: '<span class="k-data">差异评估的输入还差几格</span><span class="k-acc">差异评估的输入核对</span>',
|
||||
step: '步骤 1/4 · 校验入参与补数据',
|
||||
stage: '',
|
||||
headTone: 'light',
|
||||
footTag: '工单类型:数据',
|
||||
footTag: '工单类型:<span class="k-data">数据</span><span class="k-acc">验收</span>',
|
||||
body:
|
||||
gateBar() +
|
||||
`<details class="lab lab-brief"><summary class="lab-sm"><b>【做什么】</b>核对两颗料在不在库、归没归同一个芯片类型、参数值齐不齐 —— 展开看说明与纪律<span class="lab-caret"></span></summary>` +
|
||||
note([
|
||||
'<span class="need">模板定位</span>:本单是「数据工单」——目标台账 = 芯片主数据(P-08 主记录 + 标准化参数子表),核心参数字段清单挂在芯片类型字典上。',
|
||||
'<span class="need">触发原因</span>:下面电路板上两张档案卡就是本次要比对的原 PN 与候选 PN —— 至少有一颗不在库、两颗归的类型不一致、或必填格还空着,顶部那条红带才会出现。',
|
||||
'<span class="need">模板定位</span>:目标台账 = 芯片主数据(P-08 主记录 + 标准化参数子表),核心参数字段清单挂在芯片类型字典上。',
|
||||
'<span class="need">两副面孔</span>:资料还差东西 → 这是**数据工单**,顶部红带点名缺什么,卡角的笔可就地补;三样都齐了 → 这是**验收工单**,只读,交你核对无误后确认。',
|
||||
'<span class="done">已绑定</span>:两颗料的内部料号已按启动参数铺上档案卡,不必你重填料号本身,只需核对 / 补齐其余各格;在库的料现值已回填,只是查漏补缺。',
|
||||
'<span class="need">纪律</span>:两颗料必须归到同一个芯片类型下才谈得上逐项比对;类型只从字典里选,本活动不新增类型 —— 字典里没有合适的,先请数据管理员补进字典;查不到的参数值留空(会被红带点名),不要编一个值顶替。',
|
||||
]) +
|
||||
`</details>` +
|
||||
zone('比对基准', '芯片类型 + 它的核心参数字段 —— 两颗料归到哪个类型,就按这些字段逐项比;字段说明悬浮即看', ZIC_TABLE) +
|
||||
BASIS_CARD +
|
||||
zone('芯片档案', '一颗芯片一张卡:正面主数据、背面核心参数值 —— 点卡翻面看另一面;右上角的笔 = 只编辑这张卡当前这一面,软盘 = 保存', ZIC_TABLE) +
|
||||
zone('芯片档案', '一颗芯片一张卡:正面主数据、背面核心参数值 —— 点卡翻面看另一面;可编辑时右上角的笔 = 只编辑当前这一面,软盘 = 保存', ZIC_TABLE) +
|
||||
DOSSIERS +
|
||||
flow('<b>提交 / 确认:</b>本工单只承载内容;确认请在对话区的【执行卡】中进行。确认后活动自动从「等待数据」唤醒。'),
|
||||
flow('<b>提交 / 确认:</b>本工单只承载内容;确认请在对话区那张卡上进行。确认后活动接着往下推进。'),
|
||||
});
|
||||
|
||||
/* ==================== 局面:差异评估结论审核(difference-review,S3 的验收工单) ==================== */
|
||||
|
||||
Reference in New Issue
Block a user