2026-10-13-mobile-protocol-price-total-sync-design.md 2.7 KB

移动端协议单:优惠价 → 合同 → 协议总金额联动 — 设计说明

日期: 2026-10-13
状态: 已确认(P2-B)
范围: mobile-oa-h5 细胞存储协议新增/编辑;对齐 Web SamplePaymentPanel + ProtocolFormDialog 金额联动
前置: P1 缴费面板、P2-A 客户检索

1. 目标

  1. 样本优惠价(sample.price)变更时,按 Web 规则同步对应样本的 contractAmount(及趸交应缴重建)。
  2. 协议总金额在未手改偏离时,跟随各样本合同合计;手改后停止跟随,直到再次与合计一致。
  3. 表单展示样本合同合计与不一致提示(保存前已有校验,编辑过程也可见)。

2. 决策摘要

项 决策
优惠价→合同 移植 Web applyPreferentialPriceToPayment:有已确认转账(yjf)不改;首次对齐仅补空合同;已跟踪且价变则强制覆盖
趸交 / 分期 dj:改合同后 rebuildSampleSchedules;fq/fgd:只改合同,不自动改各期金额
协议总金额跟随 protocolTotalFollowSamples:默认 true;用户编辑后若与合计差 >0.015 则 false;合计变化时若 follow 则写回总金额
UI 协议信息区:protocolTotalAmount 可编;只读展示「样本合同合计」+ mismatch hint
非目标 意向金;v1 整单缴费;Web 改动

3. 实现要点

3.1 纯函数(protocol-sample-payment.js)

  • 导出 applyPreferentialPriceToPayment(pay, sample, force, { rebuild })(或拆成可测纯函数 + panel 内 rebuild 回调)。
  • 已有 shouldReplaceContractWithPreferentialPrice / parsePreferentialPrice / sumSampleContractAmounts / protocolTotalMismatchHint 复用。
  • 新增 shouldFollowProtocolTotal(total, sampleSum)、nextProtocolTotalFromSamples(follow, sampleSum)。

3.2 ProtocolSamplePaymentPanel

  • 扩展 samples watch:维护 lastPreferentialByCode;对已有支付行调用 applyPreferentialPriceToPayment。
  • 对齐 Web 的 same 比较,避免无意义 emit。

3.3 MarketModuleForm

  • 细胞存储:watch sumSampleContractAmounts(samplePayments) → 若 follow 则更新 protocolTotalAmount。
  • protocolTotalAmount 字段变更时更新 follow 标志。
  • UI:在缴费面板上方或协议区展示合计与 hint(可用 computed + 简单文案块)。

4. 测试

  • 纯函数:空合同补价;手填合同不因首次对齐被盖;force 时覆盖;yjf 锁定不改;follow 开关。
  • Panel/契约:samples price 变化触发合同更新(可通过导出函数单测覆盖主逻辑)。

5. 非目标

  • 意向金(下一项)。
  • 列表卡片金额字段扩展。