You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

35 lines
4.3 KiB

2 days ago
# 02 — 主 demo 单入口收编(12 联系人新端点 + 关注列)
Type: task
Status: resolved
Blocked by: 01
## Question
把 12 联系人新端点从图谱 demo 收编进主 demo,实现「主 demo 单页验收」(chart 拍板 1):
- 源:`.scratch/customer-contact-graph/prototype/prototype-contact-graph.html`(contact-graph 票 06 已接真实 API;fetch 层 = API_BASE ?api= + apiGet/apiPost/apiDownload + Result 信封)。
- 目标:`.scratch/customer-e2e/demo/index.html`(主 demo;详情页已有联系人/成员/导入/交割等页签,走旧联系人端点)。
- 收编面(§2.7b 全清单):图谱面板 + 编辑器全套 + 公司边派生渲染(detail/save)、快速添加 quickAdd、页内批量编辑 batchEdit、电话明文 reveal、联系人导出 export、导入三段式六端点。
- 主 demo 客户列表(mine/overview/pool 三视图共用表格)加「关注」星标列,消费票 01 focusFlag 字段;关注/取关动作端点已有(§2.9)。
- 新旧并存策略:主 demo 联系人页签旧端点(列表/新增/编辑)与新增强端点的分工,按原型 A4-4-2 对照拍板(原型第一)。
- 图谱 demo 退役:文件保留为原型底稿,不再是验收入口。
- 自检:Playwright 冒烟先覆盖收编后的新交互(完整冒烟归票 04);视口 1720×1080。
## Answer
**已收编落地,冒烟 35/35 ALL_PASS。**
1. **装配方式**:主 demo `index.html` 960 → 2263 行,`apply_t02.py` 14 锚点替换全断言(count==1)执行成功;CRLF 保持、无 BOM。结构 = `contactsShell` 常驻面板(`switchSub('contacts')` 时隐 subBox 显 shell,互斥显隐),事件 `bindContactsUI()` init 时绑一次;JS 三段注入:p4 图谱核心(G/C 状态、布局派生、渲染)、p5 图谱编辑器(快照/CAS/拖拽)、p6 列表侧(双加载/页内编辑/qa/导入导出)。
2. **新旧并存策略(原型第一,对照 A4-4-2)**:列表 = 旧端点 `/api/customer/contacts`(ContactDTO 全字段,操作列保留旧 contact/edit 弹窗 + check-phone 查重);图谱 = `graph/detail`(脱敏+level+edges);快速添加 `openQa()` 替换详情页旧「+联系人」按钮;页内批量编辑走 `batchEdit`(原子批);删除走旧 `contact/delete` 但升级为 gConfirm + 双刷;`reveal` 双写列表行与图谱节点(服务端埋点一处);导入三段式弹窗 id 全 `cimp` 前缀避让客户导入 tab。
3. **关注星标列**:thead 加「关注」列,`rowHtml` 按 `focusFlag`(票 01 字段)渲染 ★/☆(`.star-link`/`.off`),`toggleFocus()` POST `/focus?id=` / `/unfocus?id=` 后 loadList+loadSummary 重拉;colspan 11→12。批量关注按钮(focus-batch)保留不变。
4. **顺带修复原型潜伏 bug**:`applyCellEdit` 的 jobFull 反查原按类别 code 查 JOB_DICT 恒 miss(页内改职务静默失效),收编版修复为按「类别下的职务 code」反查(`g.jobs.some(j => j.code === v)`)。
5. **67017 冲突处理升级**:graph/save 版本冲突 → `doExitEdit()` 退出编辑态 + 重拉图谱(比原型保留编辑态更稳,避免叠脏改)。
6. **图谱 demo 退役**:`prototype-contact-graph.html` 头注释已加退役标注(保留为原型底稿/设计参照,验收入口 = 主 demo;全量交互回归仍可跑同目录 selfcheck.py)。
7. **冒烟**(`demo_t02_smoke.py`,route 桩 mock-api + init 注入 token/me,视口 1720×1080):35 步全 PASS——关注列双向(桩记账验证重拉翻转)、contactsShell 显隐互斥、双加载(9 行全字段 + 图谱 9 卡/1 手动边/3 公司派生边无 ×)、reveal 双写、quickAdd 双刷 9→10、batchEdit dirty+保存回显、graph/save 版本链路 1→2(quickAdd bump)→3(batchEdit 职务变更 D1 bump)→4(save CAS) 精确匹配、导入三段式(预检 501/轮询终态/失败明细 1 行)、export POST、delContact gConfirm 双刷 10→9;零 console/pageerror、零 PUT/DELETE;12 端点族触发 11/12(import/template 下载流不点,归票 04 全量)。
### 证据
- 装配工件:`patch-t02/`(p1-css ~ p6e + apply_t02.py,可重放);截图:`customer-e2e/shots-t02/`(7 张);结果:`customer-e2e/t02-smoke-result.json`。
- 主 demo 冒烟脚本:`.scratch/customer-e2e/demo_t02_smoke.py`(票 04 全量冒烟的基础)。