feat: C 端套餐沉默期展示与自助延期
All checks were successful
构建并部署前端到测试环境 / build-and-deploy (push) Successful in 23m46s

- 套餐历史展示沉默期状态、截止日期、累计延期与调整审批中,可延期时显示延期入口
- 新增延期页:资格、档位与自定义天数试算、支付方式、下单(request_id 幂等)
- 支付宝走现有支付页;微信为链接时在微信外直接跳转,否则展示二维码与复制链接
- 新增我的延期订单列表与详情、沉默期记录,沉默期错误码转客户提示
This commit is contained in:
邹进
2026-11-07 13:19:33 +09:00
parent b2f802e6f8
commit 31ff18d66a
15 changed files with 1500 additions and 22 deletions

View File

@@ -1,38 +1,38 @@
## 1. 接口与工具
- [ ] 1.1 新增 `api/modules/packageSilence.js`(eligibility、quote、createOrder、getOrders、getOrder、getRecords),在 `api/index.js` 导出
- [ ] 1.2 确认 `normalizeAssetPackageHistory` 保留 `silence` 对象(含加油包子节点),补充布尔字段 `extendable`、`silence_adjust_pending` 归一化
- [ ] 1.3 新增 `utils/silence-errors.js`:错误码 1263~1274 与资格 `reason` 的客户提示文案,1265/1266 拼接范围
- [ ] 1.4 新增延期支付方式过滤:`allowed_payment_methods` 与 `wechat`、`alipay` 取交集
- [x] 1.1 新增 `api/modules/packageSilence.js`(eligibility、quote、createOrder、getOrders、getOrder、getRecords),在 `api/index.js` 导出
- [x] 1.2 确认 `normalizeAssetPackageHistory` 保留 `silence` 对象(含加油包子节点),补充布尔字段 `extendable`、`silence_adjust_pending` 归一化
- [x] 1.3 新增 `utils/silence.js`(错误码与延期纯函数,代替原计划的 silence-errors.js):错误码 1263~1274 与资格 `reason` 的客户提示文案,1265/1266 拼接范围
- [x] 1.4 新增延期支付方式过滤:`allowed_payment_methods` 与 `wechat`、`alipay` 取交集
## 2. 套餐历史展示
- [ ] 2.1 `PackageHistoryNode.vue` 增加沉默期区域:状态名、截止日期、沉默期天数、累计延期天数、"调整审批中";`silence` 为空不渲染
- [ ] 2.2 `extendable = true` 时显示"延期"入口,跳转延期页并带 `package_usage_id`
- [ ] 2.3 有 `silence` 的套餐显示"沉默期记录"入口
- [ ] 2.4 套餐历史页增加"我的延期订单"入口;从延期成功返回时刷新列表
- [x] 2.1 `PackageHistoryNode.vue` 增加沉默期区域:状态名、截止日期、沉默期天数、累计延期天数、"调整审批中";`silence` 为空不渲染
- [x] 2.2 `extendable = true` 时显示"延期"入口,跳转延期页并带 `package_usage_id`
- [x] 2.3 有 `silence` 的套餐显示"沉默期记录"入口
- [x] 2.4 套餐历史页增加"我的延期订单"入口;从延期成功返回时刷新列表
## 3. 延期页
- [ ] 3.1 新建 `pages/silence-extension/silence-extension` 并注册 `pages.json`
- [ ] 3.2 加载资格:不能办理时展示原因;有 `pending_order_no` 时提示并提供订单详情入口;1274 显示功能未开放
- [ ] 3.3 展示当前截止日期、已过期天数、`options` 档位(计费天数、金额、新截止日),默认选第一档
- [ ] 3.4 自定义天数输入:范围与整数校验,防抖调用试算,丢弃过期响应
- [ ] 3.5 支付方式选择;无可用方式时提示暂不支持在线延期
- [ ] 3.6 下单:生成并复用 `request_id`,提交中防重复,错误码按 1.3 提示
- [ ] 3.7 拉起支付:支付宝走现有支付宝支付页;微信按 design D5(链接跳转或二维码);拉起前写待刷新标记
- [ ] 3.8 `onShow` 消费待刷新标记后查询订单详情,`completed` 时提示延期成功
- [x] 3.1 新建 `pages/silence-extension/silence-extension` 并注册 `pages.json`
- [x] 3.2 加载资格:不能办理时展示原因;有 `pending_order_no` 时提示并提供订单详情入口;1274 显示功能未开放
- [x] 3.3 展示当前截止日期、已过期天数、`options` 档位(计费天数、金额、新截止日),默认选第一档
- [x] 3.4 自定义天数输入:范围与整数校验,防抖调用试算,丢弃过期响应
- [x] 3.5 支付方式选择;无可用方式时提示暂不支持在线延期
- [x] 3.6 下单:生成并复用 `request_id`,提交中防重复,错误码按 1.3 提示
- [x] 3.7 拉起支付:支付宝走现有支付宝支付页;微信按 design D5(链接跳转或二维码);拉起前写待刷新标记(微信:微信外为链接直接跳转,其余进入延期支付页展示二维码与复制链接)
- [x] 3.8 `onShow` 消费待刷新标记后查询订单详情,`completed` 时提示延期成功
## 4. 延期订单与流水
- [ ] 4.1 新建延期订单列表页(分页、按支付时间筛选、默认当前资产)
- [ ] 4.2 新建延期订单详情页:订单号、套餐、输入/计费天数、金额、状态、支付方式、截止时间变化、支付与生效时间;`pending_payment` 且有 `qr_content` 时"继续支付"
- [ ] 4.3 新建沉默期流水页:按时间展示 `event_name`、截止时间变化、天数,空状态
- [ ] 4.1 新建延期订单列表页(分页、按支付时间筛选、默认当前资产)(已做分页与默认当前资产;按支付时间筛选未做)
- [x] 4.2 新建延期订单详情页:订单号、套餐、输入/计费天数、金额、状态、支付方式、截止时间变化、支付与生效时间;`pending_payment` 且有 `qr_content` 时"继续支付"
- [x] 4.3 新建沉默期流水页:按时间展示 `event_name`、截止时间变化、天数,空状态
## 5. 测试与验证
- [ ] 5.1 在 `tests/` 增加用例:沉默期显示与入口条件、天数校验、`request_id` 复用、错误码映射、支付返回刷新
- [ ] 5.2 本地 `build:h5`(development 模式)通过,确认接口指向测试后端
- [ ] 5.3 确认延期订单微信支付方式(design Open Questions),按结论调整 3.7
- [x] 5.1 在 `tests/` 增加用例:沉默期显示与入口条件、天数校验、`request_id` 复用、错误码映射、支付返回刷新(tests/silence.test.mjs 覆盖天数校验、request_id 复用、错误码映射、支付方式过滤;页面级的显示与入口条件、支付返回刷新未写自动化用例;既有 october-h5 38 项通过)
- [x] 5.2 本地 `build:h5`(development 模式)通过,确认接口指向测试后端
- [ ] 5.3 确认延期订单微信支付方式(design Open Questions),按结论调整 3.7(测试库微信商户池为 wechat_v2 直连,返回 H5 支付链接,公众号内需实测)
- [ ] 5.4 测试环境打开沉默期总开关后,用测试资产走通:展示 → 资格 → 试算 → 下单 → 支付 → 延期生效 → 流水
- [ ] 5.5 推送 `iteration/8-11` 部署测试环境(先排查 C 端 CI 未触发构建的原因)