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.
 
 
 
 
 
 

7.0 KiB

10 · demo/index.html 同步到返工后契约

  • Status: resolved
  • Type: task
  • Blocked by: —(纯机械改,可随时开工)
  • 来源: 2026-09-05 客户模块验收返工(.scratch/customer-rework/map.md,已收官)会话审计发现;用户拍板「开票挂账,暂不改」

背景

demo/index.html(票 07 产出,2026-09-04 19:16)的 API 层整体停在返工前旧契约。返工票 02 已把客户域全量重塑为扁平动作动词(POST 表单 + 查询参数,零 PUT/DELETE/@PathVariable),demo 对现行后端基本全数 404/405。

现状盘点(2026-09-05 枚举,36 处 api() 调用,~20 处需改)

旧契约 → 新契约对照(权威基准 = .scratch/customer-module/API-SUMMARY.md,73 端点对账零差异):

demo 现调用(旧) 应改为(新)
POST /api/customer/workspace/{ws}/page/{ws}/board/summary POST /api/customer/workspace/page/board/summaryworkspace=mine/overview/pool 改为表单字段
POST /api/customer(新建) POST /api/customer/create
PUT /api/customer/{id}(编辑) POST /api/customer/edit?id=必带 version + isBizNegotiated + isChild,冒烟实证)
GET /api/customer/{id}(详情/页签 1) GET /api/customer/detail?id=
GET /{id}/detail-head GET /api/customer/detail-head?id=
GET /{id}/contacts GET /api/customer/contacts?customerId=
GET /{id}/follow/page GET /api/customer/follow/page?id=
POST /{id}/follow POST /api/customer/follow/add?id=
GET /{id}/opportunities GET /api/customer/opportunity/page?id=
GET /{id}/members GET /api/customer/member/list?id=
POST /{id}/members POST /api/customer/member/add?id= + MemberAddDTO{memberUserIds[]} 数组表单
DELETE /{id}/members/{uid} POST /api/customer/member/remove?id=&memberUserId=
GET /{id}/oplog/page GET /api/customer/oplog/page?id=
POST /api/customer/contact/{cid}(编辑)/ DELETE /contact/{cid} POST /api/customer/contact/edit?id= / POST /api/customer/contact/delete?id=(必填 name/jobTitleName/phone)
POST /api/customer/import/{taskId}/confirm POST /api/customer/import/confirm?taskId=
GET /api/customer/import/{taskId} GET /api/customer/import/result?taskId=
GET /api/customer/import/{taskId}/failures GET /api/customer/import/failures?taskId=
GET /api/customer/transfer/{id} GET /api/customer/transfer/detail?id=
POST /transfer/{tid}/assign?... POST /api/customer/transfer/assign?id=&customerIds=&assignUserId=
GET /transfer/{tid}/assignable GET /api/customer/transfer/assignable?id=D-07 稳定超时,演示按缺陷模式处理)
PUT /api/rule/customer/reminder(JSON) POST /api/rule/customer/reminder/save(表单:masterEnabled/firstTriggerEnabled/firstTriggerDays/secondIntervalEnabled/secondIntervalDays)

无需动的调用:check-name / check-credit-code / contact/check-phone / import upload/page/template / transfer preview/initiate/page / GET /api/rule/customer/reminder(新旧契约同形)。

改造说明

  • 改动范围限 demo/index.html 的 fetch 层(api 调用 URL + method + 表单字段名),页面结构/交互不动。
  • 全部新契约以 API-SUMMARY.md 对应节为准(workspace §2.1、客户 §2.3、详情 §2.5、成员 §2.8、联系人 §2.7、导入 §2.12、交割 §2.11、提醒规则 §2.13)。
  • demo 不补新能力页签(战略协议/view-form/focus/claim 等 demo 本就没有,超出本票范围)。

验收

  • grep 复核:PUT|DELETE|/api/customer/\{/{id}|/{taskId}|/{cid}|/{tid} 拼接风格调用零残留;
  • 逐调用与 API-SUMMARY.md 端点表对得上(可复用 .scratch/customer-rework/dump_api_out.txt 作基准);
  • 服务起(verify profile,环境见本图环境事实段)后 demo 主流程可点通:列表/新建/编辑/详情页签/成员/导入/交割预览;
  • deploy\demo\index.html 为线索模块 demo(无客户端点),本票不涉及

Comments

Answer(2026-09-05 落地收官)

改动(全部在 demo/index.html,页面结构/交互未动):

  1. 对照表 21 处 api() 全改新契约:workspace×2(workspace 转表单字段)、create、detail、edit(POST edit?id= 必带 version+isBizNegotiated+isChild,值取自 detail 回显存 window._editBiz/_editChild)、detail-head、详情页签×6(contacts 用 customerId=、follow/opportunity/oplog 带 id=&current=&size=)、contact edit/create/delete、follow/add、member add/remove(数组表单原样保留)、import confirm/result/failures(?taskId=)、transfer detail/assign/assignable(?id=)、reminder save(PUT JSON → POST 表单五字段)。
  2. 对照表未列、实测同批修正 3 处(否则点不通):
    • focus 族扁平化:票 08 时代加的 PATH_OP 路径变量特例(POST /{id}/focus)返工后已变 POST /api/customer/focus?id=(§2.9 权威),oneBy 简化为全 flat ?id=
    • create 返回形状POST /api/customer/create 返回 CustomerSaveResultDTO(非裸 id),toast 改取 d.id(BaseDTO)回退 customerNo
    • 成员行渲染CustomerMemberDTO 字段 roleTyperoleOWNER/COLLABORATOR),旧判定失效导致 owner 行也渲染「移除」按钮,已修 isOwner()
  3. 3 处 UI 文案勘误(PUT 字样随契约消失:「PUT 为全量覆盖」→「保存为全量覆盖」等),不改结构。

验收逐项

  • grep 复核:PUT|DELETE|PATH_OP = 0 命中;+ <idVar> + '/ 路径变量拼接 = 0 命中;
  • 逐调用对账:36 处调用(24 行)逐一命中 dump_api_out.txt(73 端点基准),另 2 处 auth 调用不在客户域范围;
  • 起服实测(verify profile,fat jar 全量重建 67s):demo_smoke10.py Playwright chromium headless 11 步全 PASS——登录/列表/汇总卡/新建(含 L2 相似命中 confirmSimilar 确认流实测)/编辑 CAS/详情五页签/联系人 rows=3/成员加+移除/导入预检(taskId=751484670884970496,suspect=1 疑似判定正常)/交割列表 5 单+预览 48 行/网络层零旧契约形态(/api/customer/<digits>/ 与 PUT/DELETE 均 0);console_errors=0、page_errors=0;结果 demo-smoke10-result.json、截图 shots10/×7;
  • deploy\demo\index.html 为线索模块 demo,未触碰。

实测数据与痕迹

  • 测试新建客户 6 个(含 crashed 轮次)全部正门清理归档archive 批量,见脚本 cleanup 段);成员测试在 e2c-成员-样例 上加/移除曾偲青后复原;导入预检留 1 条 DRAFT 任务(无业务写入,无污染)。
  • 测试基建:.scratch/customer-e2e/.venv10(py3.13 venv,playwright 版本恰配本机已缓存 chromium-1234,零浏览器下载)保留复用;8080 服务验证完已停(pid 17532)。
  • 无新缺陷、无新 fog;U/W 观察点无变化。