feat(v2): S1d 最薄界面——工作台内的材料集合导入面板
T02 收尾子卡。挂在既有 /xingbang-workbench「材料与问题」页内,**不新建路由**, 复用 workspace.css 既有 class(无新增样式表)。 - src/components/xingbang/ImportBatchPanel.tsx:登记清单 → 逐项上传 → 重试/取消 → 冲突并列展示与裁定。浏览器端用 crypto.subtle 算 sha256 生成清单(服务端仍重算核对) - src/lib/prescreen.ts:错误信封解包 + 契约类型(**手工对齐**,OpenAPI→TS 生成链 未建设,已在文件头标注为临时)+ 服务端状态标签 - page.tsx 仅三处小改:导入面板、挂载面板、request() 改用 messageOf (兼容信封与既有 detail 的 string/array/object 三种形态,不丢既有信息量) 面向用户的诚实性约束(有源码守卫锁定):明确写出"未上传或未确认的文件不会进入 项目事实""不会按上传先后覆盖""不会自动挑一个";空批次用既有空状态,不绘制虚构行; 面板不含任何审批概率。 验证: - npx tsc --noEmit 通过;npm run build 通过 - 新增 scripts/test_prescreen_panel.cjs(10 条源码守卫),已加入 verify.py 用例 - scripts/verify.py 10/10 PASS(exit 0) **未验证**:面板未经浏览器端到端验证。它依赖客户端数据加载,SSR HTML 不含它, 且本项目没有浏览器自动化依赖。目前只有类型检查、构建与源码断言三层证据。 Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
@@ -212,6 +212,7 @@ def main() -> int:
|
||||
("identity-recovery-ui", [executable("node"), "scripts/test_identity_recovery.cjs"], ROOT),
|
||||
("cloud-assistant-access-ui", [executable("node"), "scripts/test_cloud_assistant_access.cjs"], ROOT),
|
||||
("ui-readability", [executable("node"), "scripts/test_ui_readability.cjs"], ROOT),
|
||||
("prescreen-panel-ui", [executable("node"), "scripts/test_prescreen_panel.cjs"], ROOT),
|
||||
("frontend-build", [npm, "run", "build"], ROOT),
|
||||
("compose-local-config", [docker, "compose", "-f", "docker-compose.yml", "config", "--quiet"], ROOT),
|
||||
("compose-aliyun-config", [docker, "compose", "--env-file", "deploy/aliyun.env.example", "-f", "deploy/docker-compose.aliyun.yml", "config", "--quiet"], ROOT),
|
||||
|
||||
Reference in New Issue
Block a user