## 1. 接口与工具 - [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. 套餐历史展示 - [x] 2.1 `PackageHistoryNode.vue` 增加沉默期区域:状态名、截止日期、沉默期天数、累计延期天数、"调整审批中";`silence` 为空不渲染 - [x] 2.2 `extendable = true` 时显示"延期"入口,跳转延期页并带 `package_usage_id` - [x] 2.3 有 `silence` 的套餐显示"沉默期记录"入口 - [x] 2.4 套餐历史页增加"我的延期订单"入口;从延期成功返回时刷新列表 ## 3. 延期页 - [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 新建延期订单列表页(分页、按支付时间筛选、默认当前资产)(已做分页与默认当前资产;按支付时间筛选未做) - [x] 4.2 新建延期订单详情页:订单号、套餐、输入/计费天数、金额、状态、支付方式、截止时间变化、支付与生效时间;`pending_payment` 且有 `qr_content` 时"继续支付" - [x] 4.3 新建沉默期流水页:按时间展示 `event_name`、截止时间变化、天数,空状态 ## 5. 测试与验证 - [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 未触发构建的原因)