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.

78 lines
14 KiB

2 days ago
# 客户模块全功能单文件 Demo「正确传参照」— wayfinder map
Labels: wayfinder:map
1 day ago
Status: done
2 days ago
Created: 2026-09-11
## Destination
交付一个零构建的单文件静态前端 Demo(HTML+JS,纯 fetch 直连后端),覆盖客户模块全功能(核心域 + 重流程 + 规则族),作为联调与用户验收的「正确传参照」;随附 Playwright UI 冒烟脚本(≥30 步)与 PASS/FAIL 报告。验收四标准:功能覆盖(原型可见入口全部可点且触发对应端点)、字段对齐(与 Bruno 出参一致,含脱敏与 "--" 口径)、流程闭环(新增→归档/抛公海全链路 + 操作日志留痕)、交付物齐备。已知 P1/P2 缺陷只展示现象不修代码;双仓未提交变更清单留待用户审查。
1 day ago
**验收对照(2026-09-12,票 15;详见 assets/acceptance-selfcheck.md)**:
- ✅ 功能覆盖:69 入口对账零缺口(33+9 新增+16 改造+14 豁免全落地);冒烟唯一路径 91。
- ✅ 字段对齐:field-alignment.md #1-#69 + K1-K11 校准全落 demo;40 步 note 字段级实证。
- ✅ 流程闭环:冒烟步 9-25 全链 PASS(含商机 67007 阻断链、交割 assignStatus、oplog 留痕、规则族还原)。
- ✅ 齐备:demo/index.html + smoke.py + smoke-report.json(40/0 ALL_PASS,176.4s)+ 5 assets + shots 9 张。
- 纪律达成:GET 147+POST 79 零 PUT/DELETE;console error=0;http_fails=0;缺陷只呈现不修(14 现象三档呈现+冒烟断言)。
- 遗留移交:双仓未提交变更清单 assets/uncommitted-changes.md(agent 不提交 git,待用户审查)。
2 days ago
## Notes
- **第一依据**:蓝湖 v29 原型 A4 页族(`.scratch/api-docs-reorg/lanhu-tree-v29.md`)决定功能逻辑与字段回显;不追求样式高保真。
- **契约权威**:`.scratch/customer-module/API-SUMMARY.md`(85 端点)+ Bruno 文档仓 `D:\code\crm-api-docs`(注意:不是 E 盘);envelope `{code,success,message,data}`
- **形态参照/潜在基线**:`.scratch/customer-e2e/demo/index.html`(2264 行,单文件 fetch 层 apiGet/apiPost、`?api=` 覆盖、debug token 登录、五页签+图谱+导入+交割+设置)。
- **已知缺陷台账**:`.scratch/customer-frontend-handover/gap-report.md`(P2 G1-G6、P3×6、豁免 9 类)+ `customer-defectfix/FIX-REPORT.md` + contact-graph D-G1 + incr I-06(pool·board 契约漂移)+ heavy F-15。
- **Seed 数据**:`e2c-` 前缀,权威 id 清单 `.scratch/customer-e2e/seed-ids.json`(17 客户);增量夹具 `e2c-r2i-*`、图谱夹具 `e2c-cgd*`
- **本地起服**:`SPRING_PROFILES_ACTIVE=verify` + `CRM_MINIO_AK=admin` / `CRM_MINIO_SK=Itc@123456`,`java -jar crm-app\target\crm-app-1.0.0-SNAPSHOT.jar`,端口 8080;debug token `GET /api/auth/debug/token?userId=739564171091247104`(admin 罗伟健;BUDDY=744842318024015872)。
- **DB 是远程共享库(8.129.84.155)**:Demo 流程会写真实数据;还原口诀见 `.scratch/customer-frontend-handover/map.md:38`
- **纪律**:只测不修(缺陷仅展示现象);ADR-0017(零 PUT/DELETE、flat 动词、查询参传 id);console error=0;4xx/5xx 弹窗提示。
- **本 effort 全票 AFK**:用户离席,决策票由代理依证据决断并在 Answer 中记录理由,事后由用户统一审查;不设 HITL grilling 票。
- **Playwright**:系统 Python 3.13 + playwright sync API(chromium 已缓存 ms-playwright),`page.route` 反代注入 Bearer;报告形态沿用 `{steps:[{step,ok,note}], errors:[], api_urls:[]}`
- **架构事实**:13 个 Controller 在 `crm-customer/src/main/java/com/crm/customer/controller/`;错误码段 67xxx 已用到 67024;Maven 禁 `-pl`/`-rf`。
## Decisions so far
- [01 全功能覆盖对账矩阵](issues/01-coverage-matrix.md) — 69 入口逐行对账(assets/coverage-matrix.md):无缺口 33 / 新增 9 / 改造 16 / 豁免 14(均有台账依据);姊妹票交叉项已被 02/03/04 收口。**brief 口径修正**:详情实为 8 页签(brief 6 页签少计关联项目+战略协议);「换负责人」无独立契约(由 assign/transfer 承载,豁免);saved-view 有后端无 A4 文档(契约源=API-SUMMARY §2.14);assign-batch 有契约 demo 零调用。
- [03 商机侧硬依赖契约](issues/03-opportunity-hard-deps.md) — 关联商机页签实际恒 7 字段(G2 的 13 列是原型期望,Demo 按 7 真名渲染缺列显 "--";旧 demo 有 oppName/ownerNameSnapshot/statusName 三处字段名漂移须修正);客户侧无挂商机端点,Demo 用 `POST /api/opportunity` 预填 customerId 合成「从客户发起建商机」入口;级联矩阵:claim/抛公海被进行中商机 67007 前置阻断、归档 67006、交割发起整批原子强级联刷客户+商机+项目 owner——级联闭环链已定(建商机→抛公海被拒→商机关闭→放行→交割跟随)。详见 assets/opp-deps.md。
- [02 规则族契约摸底](issues/02-rule-family-contract.md) — 查重设置(/api/rule/customer/dedup,5 字段,宽松70/标准80/严格90 预设)与超期提醒(/api/rule/customer/reminder,首触30天/间隔7天)均已实现且有 Bruno+menuBindings,demo 调用一致;**公海池配置后端未实现且 v29 原型无此配置页**(客户公海=固定准入规则的虚拟池;/api/rule/pool 是线索域不得混入)——Demo 按纪律做只读占位卡片明示未实现,现象文案交 06 号票。
- [04 saved-view 与看板视图契约](issues/04-savedview-board-contract.md) — saved-view 后端齐全(crm-preference CRUD + workspace/page 的 savedViewId 已接线,save 是全平台唯一 @RequestBody 例外),P3「未接」纯属 demo 没挂 UI;board 数据端点白名单 stage/star/relation,pool 硬拒 67001,I-06 漂移真身是形态偏好 view-form/save 放行 pool+board——Demo 建议:saved-view 直接接线,overview/mine 加 stage 看板,pool 不给看板入口只摆「记忆成功+数据拒绝」双现象。
- [05 Demo 基线策略](issues/05-baseline-strategy.md) — **方案 A fork 演化**:`customer-e2e/demo/index.html`(2264 行)原样复制为本 effort `demo/index.html`,fork 头注来源+日期,行号可平移对照矩阵。理由:端点级零缺口已实证(59 唯一路径全落 85 端点)、33/69 入口无缺口、缺口全在呈现层是增量叠加,图谱/联系人导入两轮 effort 成果沉没成本高。边界=原样复用骨架+16 改造+9 新增+14 豁免;迁移风险 7 条(汇总卡挪用拆分、分配弹窗整批化勿破坏 BatchResult、pool 越界视图空集不硬拒、F6 stub 保留明示 NO_HIT、fork 平移零改动、I-06 双现象静态注记不实调、枚举硬编码待 07 核对后统一改)。
- [06 缺陷展示设计](issues/06-defect-phenomenon-design.md) — 三档呈现全用:**①渲染即现象**(默认,缺列/恒 null/空态如实渲染)+ **②角标** `data-defect="<id>"` 原生 title 悬浮(只加在易误读处)+ **③顶栏「已知缺陷」面板**(DEFECT_LEDGER 常量纯静态渲染,零网络请求)。面板四分区:A 开放现象 14 条(G1-G6/P3-3/4/5/6/D-G1/I-06 双现象静态注记/公海池只读占位卡 POOL-CFG/工商 stub STUB-LOOKUP)、B 已修复与本次接线 4 条、C 豁免清单 14 项、D 环境观察(F-15)。文案中性纪律(漂移/未实现/环境观察,不写 bug);全部带 data-defect 断言钩子供冒烟。
1 day ago
- [07 逐入口字段对齐清单](issues/07-field-alignment-checklist.md) — 产出 `assets/field-alignment.md`(1091 行两部分:核心域 #1-#49 / 联系人族+重流程+规则族 #31-#69),逐入口请求参数/出参字段/空值"--"与枚举字典口径三表 + .bru/DTO 权威出处;**头部 K1-K11 校准注记覆盖矩阵与 AS 旧口径**(G4 收窄两件、关联项目真端点 CustomerProjectQueryPort·Noop、看板 summary=cnt/groupValue、oplog action 18 种、contact_source 字典真值、focus-batch Void、quick-create DTO 七必填、联系人电话全读路径脱敏 138****1234、transfer status 0/1 等)。收口回写:demo G4 条目文案、冒烟步 13/14/34、票 11 scope 均已按 K 口径校准。
2 days ago
- [08 冒烟步骤表](issues/08-smoke-step-plan.md) — **40 步**(assets/smoke-plan.md):A 核心域 19 + B 重流程 6(含商机联动链 67007 阻断→关闭→放行、交割两段式)+ C 规则族 4 + D 缺陷现象 7(data-defect 钩子断言,FAIL=Demo 缺陷非后端缺陷)+ E 全局 4(console=0/零 PUT-DELETE/端点广度≥50/清扫还原)。4xx 弹窗通道用真实业务拒绝三处验证(67007/67003/64023)。seed:写夹具 e2c-dr-* 用后正门硬删、e2c- 只读、偏好/规则写后 API 正门还原、交割只动夹具无 F-13 负担。报告=demo/smoke-report.json(t04 形态+summary.verdict,全 ok 即 PASS)。
1 day ago
- [12 联系人独立菜单+商机侧入口](issues/12-contacts-opp-entry.md) — nav 第 3 位顶级「联系人」页签:contact/page 真端点(姓名固定+7 可隐藏列,K10 服务端脱敏直显、K6 source 字典驱动)+ contact.list 形态/列偏好双接线(列偏好 preference/get|save visibleKeys 重复键)+ 行点开 contact/detail 弹窗回显(子页签日志空态 G6)+ contact/search 演示入口;商机侧三入口 panel:quick-create(K9 七必填+needConfirm→confirmSimilar=true 重发)、customer/search(三维模糊+excludeCustomerIds 重复键,真请求实证三维度+排除生效)、「从客户发起建商机」dlgOppCreate(POST /api/opportunity 预填 customerId,写操作留冒烟步 23);K6 顺手修正 dlgContact source 硬编码→字典驱动。**环境观察**:共享库存量 source=旧 code 未迁移(sourceName 回退显 code);张关键/e2c seed 不在共享库,冒烟须重建 seed(票 14)。
- [13 重流程+规则族收尾](issues/13-flow-rules-tail.md) — #24 工商联想接线(companyName 参数;stub 恒 `[]` 实证→NO_HIT 现象+STUB-LOOKUP 注记;applyLookup 只回填空字段+回填即 check-credit-code);F6 按钮明示「F6 stub」+钩子;#63 导入任务列表 status/importMode 过滤(真请求过滤命中);#69 POOL-CFG 只读禁用占位卡(readonly+disabled,文案引票 02);P3-3 导入注记+D-G1 批量编辑注记落 UI。至此矩阵改造/新增入口全部出票完成,I-06 由票 10 覆盖。
- [09 缺陷呈现基建](issues/09-defect-infra.md) — DEFECT_LEDGER 常量 + 顶栏「已知缺陷」面板四分区(A 开放现象/B 已修复/C 豁免/D 环境观察)+ `data-defect` 角标钩子落 demo;面板纯静态渲染零网络请求,文案中性(漂移/未实现/环境观察),全部钩子供冒烟断言(票 14 步 31 采样累计 11 类目 87 角标)。
- [10 核心域·列表层](issues/10-core-list.md) — fork 基线 2350→2492 行:workspace/page POST 全参数接线(五视图+savedViewId+pool 无负责人列+进入公海时间列)、列形态/字段口径全按 field-alignment K 注记(星级--口径、枚举字典翻译、脱敏直显)、I-06 双现象静态注记、claim/release/archive/restore/assign 扁平动作接线;快验 pageerror=0。
- [11 核心域·详情层](issues/11-core-detail.md) — demo/index.html → 2597 行:详情头部 4 金额卡恒 "--"〔P3-6〕+ 8 页签(补关联项目 project/page 真端点恒空 Noop)、联系人列表/图谱双视图(编辑态 batchEdit 原子批+quickAdd 查重确认)、跟进/商机/项目/协议/成员/oplog 子页签接线;K1/K2/K4/K5/K10 校准全落;快验 pageerror=0。
- [14 Playwright 冒烟](issues/14-smoke-script.md) — demo/smoke.py 40 步八轮迭代全绿:**第八跑 40/0(176.4s)ALL_PASS=true,GET 147+POST 79 零 PUT/DELETE,console=0,http_fails=0,唯一路径 91**。关键根因与修法:ensure_seeds 必须先 sweep 后自举(否则查重基线被 sweep 清掉);共享库查重模式被步 26 写成 EXACT→2d 幂等归位 FUZZY(2)+save 前 loadDedup 填充 dpMode;旧 seed 联系人职务不在字典→saveListAll「职务必填」拦截 batchEdit→2f 按 dict_item 归位;quickAdd 后显式 loadContacts 重拉;pool+ASSIGNED 视图与公海口径恒互斥(Mapper L83)→冒烟呈现默认视图空现象后清 fViewType;404 project/page=jar 旧于源码→重建 fat jar 重启;**demo onclick 陷阱**(dlgOpen 把 fn 挂 btn.onclick,事件对象作首参)→doEdit/doCreate 首参防御+doEdit 补 L2 needConfirm simbox 分支(六跑「toast 保存成功 DB 没变」假成功实锤)。后端行为只呈现不修。
2 days ago
## Not yet specified
1 day ago
- ~~构建实施拆票~~ **已落票(09-15)并全部 resolved**:09 缺陷呈现基建 → 10 核心域·列表层 → 11 核心域·详情层 → 12 联系人菜单+商机侧入口 → 13 重流程+规则族收尾 → 14 冒烟脚本(40 步,八轮迭代全绿 40/0)→ 15 报告+双仓清单+收尾。
- ~~双仓未提交变更清单~~ 已随 15 号票落盘:assets/uncommitted-changes.md(backend 全属本 effort;文档仓 E:\code\crm-api-docs 仅 2 个前序迁移遗留目录)。
- ~~PASS/FAIL 报告~~ 已交付:demo/smoke-report.json(第八跑 40/0 ALL_PASS=true)。
- ~~四标准自检~~ 已交付:assets/acceptance-selfcheck.md(四项全达标,map 已关)。
2 days ago
## Out of scope
- 高保真样式还原(brief 明示低保真即可)。
- 修复后端已知缺陷(P1/P2 只展示现象);实化 stub(company-lookup 恒 NO_HIT、详情汇总卡 5 字段恒 null)。
- 前端工程化(框架/构建链/组件库/Node)。
- 移动端/响应式适配。
- A4-6 独立查重页入口(豁免台账已划出:与新增查重流合并,company-lookup 为 stub)。