Archived
A2-A7 全部补齐到验收线;顺手把几处「门拦住却不给路」的坑填了
活动:A2 选型 / A3 寻源 / A4 定价 / A6 议价 / A7 归档五件各补成真活动包 —— 契约宽进(input.required 空,归一在活动内)、台账必填声明(含行级 requiredWhen)、 入场哨兵与 L1/L2 判据一律读基座数、两份件(在办可编辑 + 办结静态快照)、 三案例常备、包内自测。e2e 各三案例 released、行动被拒 0、发口正确、提交闸每单真拦。 基座(共享面,改一处影响所有活动,故每处都带回归): · 重发判断走在站上场之前 —— 人答完那步常已收掉,readyToWork 先抛「不能再往它上面挂活」, 于是「重发已答过的卡 = 无事发生」这条唯一活路在最需要时够不着,A1 基线当场熔断; · 决策卡补幂等兜底(与执行工单同一把尺):头两次无事发生,第三次起才算被拒; · 输出没成形先就地重问一次,原话进工作日志、不再摆上卡面; · 工具调用读数 tool_<名>_calls —— 「机检只读基座数」这条纪律第一次覆盖到工具; · 执行卡 steps/standard 补进出参 schema(从前能到卡面全靠厂商 JSON 模式宽松); · 件的就地更新改逐节点 morph,保存先把新值镜像进只读那份 —— 不闪、不等回声。 A1(基线,全程守住):措辞三档对齐(必填/建议/选填)、禁止拿历史价当客户目标价、 卡骨架从步骤剧本搬进说明书(压成一拍连做时剧本没摊开,会发出没有指导书的裸卡)。 契约两处**新增可选字段**(非破坏):FieldDeclaration.requiredWhen、工单 finalHtml; api-report 同批更新。docs/adr 与 docs/archive 的 13 份文件在工作树里不见了, 本次予以恢复而非提交删除。 门禁:typecheck / lint / depcruise / test(1366)全绿。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -55,13 +55,27 @@ import { PRD_CSS, PRD_SPRITE } from './prd-style.ts';
|
||||
* 这里由基座把值消毒成 `v-*` 追加进 class(`data-class-of`)—— 判断在样式表里,不在填数里。
|
||||
*/
|
||||
const BIND_CSS = `
|
||||
/* ① 空格子自己说话 —— 值真的空才轮到这两条(基座 data-blank) */
|
||||
/* ① 空格子自己说话 —— 值真的空才轮到这三条(基座 data-blank)。
|
||||
* 占位三级(2026-08-03 补齐,用户:「目标价是建议」):必填红 / 建议橘 / 选填灰,
|
||||
* 档位跟台账声明走(required → req,expect → sug,其余 opt),颜色与 A2 同一套。 */
|
||||
/* 胶囊与同一行的数字坐同一条线(2026-08-03 用户:「没有和数字对齐」)——
|
||||
* 裸 inline-flex 的胶囊按 baseline 挂:盒子(10px 字 + 上下 3px 内距 + 边框 = 18px)比
|
||||
* 字的基线深好几像素,视觉上整枚往下坠。治法:空格子自己撑起文字那份盒高(12px×1.5),
|
||||
* 胶囊在里面垂直居中 —— 中线对中线,行高也不再忽高忽低。
|
||||
* :not(.on) 不能省(2026-08-03 用户:「编辑态太拥挤」):这条比「编辑态藏起只读份」
|
||||
* 的那条更特异,不圈住的话编辑态里胶囊会盖过 display:none 冒出来,54 个输入框旁边
|
||||
* 各站一枚 —— 编辑态里格子该不该填由闸与红带说,胶囊只属于看的那份。 */
|
||||
.proto-root .jc-tbl-in:not(.on) td.req > .jc-vcell:empty,
|
||||
.proto-root .jc-tbl-in:not(.on) td.sug > .jc-vcell:empty,
|
||||
.proto-root .jc-tbl-in:not(.on) td.opt > .jc-vcell:empty { display: flex; align-items: center; min-height: 18px; }
|
||||
.proto-root .jc-tbl-in td.req > .jc-vcell:empty::after,
|
||||
.proto-root .jc-tbl-in td.sug > .jc-vcell:empty::after,
|
||||
.proto-root .jc-tbl-in td.opt > .jc-vcell:empty::after {
|
||||
display: inline-flex; align-items: center; font-style: normal; font-size: 10px; font-weight: 700;
|
||||
line-height: 1; padding: 3px 7px; border-radius: 5px; border: 1px dashed;
|
||||
}
|
||||
.proto-root .jc-tbl-in td.req > .jc-vcell:empty::after { content: "必填"; color: var(--danger); background: var(--danger-soft); border-color: #f3b6b3; }
|
||||
.proto-root .jc-tbl-in td.sug > .jc-vcell:empty::after { content: "建议"; color: #b45309; background: #fff7ed; border-color: #fcd9a8; }
|
||||
.proto-root .jc-tbl-in td.opt > .jc-vcell:empty::after { content: "选填"; color: var(--ink-4); background: var(--soft); border-color: var(--line); }
|
||||
/* 归档件里空格子就是「客户没给」,不再摆「你还能填」的胶囊 */
|
||||
.proto-root .jc-tbl-in td.dimempty > .jc-vcell:empty::after { content: "—"; color: var(--ink-4); }
|
||||
@@ -388,7 +402,7 @@ const listTable = (mode: 'draft' | 'final'): string => {
|
||||
* 待处理那一屏可就地改;写的是**台账列名**,不是表头文字 ——
|
||||
* 表头改个说法不该让写回错位。归档件不挂:那时它是件,不是表单。
|
||||
*/
|
||||
const cell = (key: string, head: string, kind: 'req' | 'opt', style = ''): string => {
|
||||
const cell = (key: string, head: string, kind: 'req' | 'sug' | 'opt', style = ''): string => {
|
||||
const cls = mode === 'final' ? 'dimempty' : kind;
|
||||
return `<td class="${cls}" data-h="${head}"><span class="jc-vcell ${style}" data-slot="${key}" data-col="${key}" data-blank></span></td>`;
|
||||
};
|
||||
@@ -414,10 +428,10 @@ const listTable = (mode: 'draft' | 'final'): string => {
|
||||
${del}
|
||||
${mode === 'final' ? '<td class="jc-ty" data-h="分类"><span class="jc-tbadge" data-class-of="type_tag" data-slot="type_tag" data-col="type_tag"></span></td>' : ''}
|
||||
${cell('pn', 'PN', 'req', 'mono')}
|
||||
${cell('category', '品类', 'opt')}
|
||||
${cell('category', '品类', 'sug')}
|
||||
${cell('eau', '年用量', 'req', 'mono')}
|
||||
${cell('brand', '制造商', 'opt')}
|
||||
${cell('target_price', '目标价', 'opt', 'num')}
|
||||
${cell('brand', '制造商', 'sug')}
|
||||
${cell('target_price', '目标价', 'sug', 'num')}
|
||||
${cell('remark', '备注', 'opt')}
|
||||
</tr></tbody>
|
||||
</table></div>`;
|
||||
@@ -537,7 +551,8 @@ export const INTAKE_OVERVIEW = doc({
|
||||
addRowBar('quote_intake.record') +
|
||||
`<div class="jc-drop">${ico('info', 13)}
|
||||
<span>带 * 的两列是<b>必填</b>(PN / 年用量):缺任一按 F-01 退回补全,不许放行;
|
||||
其余列缺了标灰「选填」—— 先受理、后追问,<b>不为它们拦单</b>,但那一问不能省。
|
||||
品类 / 制造商 / 目标价缺了标橘「<b>建议</b>」—— 值得追问、尽量补上,备注缺了标灰「选填」。
|
||||
三档都<b>不为它们拦单</b>,先受理、后追问,但那一问不能省。
|
||||
<b>原文没写的一律不补</b>:受理阶段编出来的数会一路流到定价和报价单上,越往后越难发现。</span>
|
||||
</div>`,
|
||||
foot: sign('AI 拟稿,你审定 —— 要改哪一格,在「待处理」那张单的需求表上就地改', '统一报价 · A1 受理归一'),
|
||||
|
||||
Reference in New Issue
Block a user