From ffa1ef1076fe7d925a574a13df9facbb72ce7745 Mon Sep 17 00:00:00 2001 From: xcs Date: Thu, 27 Aug 2026 13:42:35 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=B6=E4=B8=8A=E6=8C=89=20=C3=97:=E5=88=9A?= =?UTF-8?q?=E5=8A=A0=E7=9A=84=E8=A1=8C=E7=9B=B4=E6=8E=A5=E6=8B=BF=E6=8E=89?= =?UTF-8?q?,=E5=8E=9F=E6=9C=89=E7=9A=84=E8=A1=8C=E6=8C=82=E8=AE=B0?= =?UTF-8?q?=E5=8F=B7=20=E2=80=94=E2=80=94=20=E4=B8=94=E8=AE=B0=E5=8F=B7?= =?UTF-8?q?=E8=A6=81=E7=9C=8B=E5=BE=97=E8=A7=81(W05=201.4.2)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 用户:「编辑点击再加一行后,点击旁边的叉没有反应」。两层病: - 件:E04 那套 jc-row-gone / jc-row-new 的样式挂在它自己的外壳类下,W05 按目标件重做后 表是 table.on,一条都没跟过来 —— × 按了类是切了、屏上没动静。补四条。 - ui-kit:刚「加一行」加出来的行按 × 也只是挂记号 —— 它从没存在过,挂记号再保存送出去的是 一条「撤掉一行草稿里没有的行」,服务端只能回认不出。抽成 dropRow:jc-row-new 的直接移除, 原有的行挂记号、再按摘掉;jsdom 钉两条。 浏览器在用户在跑那一单上实证:加行 1→2,× 后 1;原有行 × 一次挂记号、两次摘掉;取消回 1。 Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01FJcX8A6TWp4GRs41TYryEh --- .../src/manifest.ts | 2 +- .../src/views/report.ts | 6 ++++ .../__tests__/view-container-collect.test.ts | 30 ++++++++++++++++++- packages/ui-kit/src/ViewContainer.tsx | 20 ++++++++++++- 4 files changed, 55 insertions(+), 3 deletions(-) diff --git a/activities/part-substitution-assessment/src/manifest.ts b/activities/part-substitution-assessment/src/manifest.ts index 838006a..433178c 100644 --- a/activities/part-substitution-assessment/src/manifest.ts +++ b/activities/part-substitution-assessment/src/manifest.ts @@ -89,7 +89,7 @@ export const manifest: ActivityManifest = { identity: { activityId: ACTIVITY_ID, name: 'ACT-WORK-05 · 差异评估', - packageVersion: '1.4.1', + packageVersion: '1.4.2', 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 45e0520..49203fc 100644 --- a/activities/part-substitution-assessment/src/views/report.ts +++ b/activities/part-substitution-assessment/src/views/report.ts @@ -37,6 +37,12 @@ const BIND_COMMON = ` #tbl1.on td > .jc-vcell:not(.ro) { display: none; } /* ③ 一行里的 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 那套记号样式挂在它自己的 + 外壳类下,本件按目标件重做后表是 table.on —— 一条都没跟过来,× 按了类是切了、屏上没动静 */ +table.on tr.jc-row-new td { background: #f2fbf7; } +table.on tr.jc-row-gone td { background: #fff6f6; opacity: .55; } +table.on tr.jc-row-gone .jc-cell { text-decoration: line-through; color: var(--ink-3); } +table.on tr.jc-row-gone .jc-rowdel { border-color: var(--danger); color: var(--danger); background: #fff; } /* 只在「待处理」这一态露面;归档 / 验收只读态即便 HTML 里还带着 data-edit 也不摆闸和加行钮 (目标件是静态 demo,不区分这两态;html.editable 是平台在 iframe 根节点上真开的关) */ html:not(.editable) .jc-editgate, html:not(.editable) .jc-addrow { display: none !important; } diff --git a/packages/ui-kit/__tests__/view-container-collect.test.ts b/packages/ui-kit/__tests__/view-container-collect.test.ts index 61fd18b..38121c4 100644 --- a/packages/ui-kit/__tests__/view-container-collect.test.ts +++ b/packages/ui-kit/__tests__/view-container-collect.test.ts @@ -20,7 +20,7 @@ */ // @vitest-environment jsdom import { describe, expect, it } from 'vitest'; -import { collect, fileRefOf, unanswered } from '../src/ViewContainer.tsx'; +import { collect, dropRow, fileRefOf, unanswered } from '../src/ViewContainer.tsx'; /** 三行,每行一个手写三选一(照 A2/A4 现存的 `.jc-radiogrp` 结构,input 距 四层) */ function radioTable(): Document { @@ -194,3 +194,31 @@ describe('fileRefOf —— data-file 解析', () => { expect(fileRefOf('不是地址/CT-1')).toBeUndefined(); }); }); + +/** + * 按 × 的两种下场(2026-08-27 用户在 W05 上:「编辑点击再加一行后,点击旁边的叉没有反应」)。 + * 类是切了、件里没那条样式是件的事;这里钉的是行为:刚加的行按 × 直接没了,原有的行挂记号、再按摘掉。 + */ +describe('dropRow:刚加的行直接拿掉,原有的行挂记号', () => { + const table = () => { + const doc = document.implementation.createHTMLDocument(''); + doc.body.innerHTML = '
x
'; + return doc; + }; + it('jc-row-new 的行 → 从表里移除(它从没存在过,挂记号再保存只会送一条认不出的撤行)', () => { + const doc = table(); + const fresh = doc.getElementById('fresh')!; + expect(dropRow(fresh)).toBe('removed'); + expect(doc.getElementById('fresh')).toBeNull(); + expect(doc.querySelectorAll('tbody tr')).toHaveLength(1); + }); + it('原有的行 → 第一次挂 jc-row-gone,第二次摘掉;行本身一直在(人看得见、有得后悔)', () => { + const doc = table(); + const old = doc.getElementById('old')!; + expect(dropRow(old)).toBe('marked'); + expect(old.classList.contains('jc-row-gone')).toBe(true); + expect(dropRow(old)).toBe('unmarked'); + expect(old.classList.contains('jc-row-gone')).toBe(false); + expect(doc.getElementById('old')).not.toBeNull(); + }); +}); diff --git a/packages/ui-kit/src/ViewContainer.tsx b/packages/ui-kit/src/ViewContainer.tsx index 2fbc5fe..e6db88d 100644 --- a/packages/ui-kit/src/ViewContainer.tsx +++ b/packages/ui-kit/src/ViewContainer.tsx @@ -277,6 +277,22 @@ function collectGone(doc: Document, address: string): Array