Files
zt-closet-wxmini-frontend/.codebuddy/plans/前端与后端一致性修复_7752e310.md
T
2026-09-11 01:45:04 +08:00

101 lines
5.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
name: 前端与后端一致性修复
overview: 根据上一轮全量检查报告,修复前端代码使其与已更新的后端完全一致(广告激励功能暂不实现、通知筛选后端已配合无需改前端),覆盖虚拟支付轮询、收藏状态初始化、类型字段补齐、错误码补充等。
todos:
- id: fix-types-errors
content: 补齐 models.ts 类型字段与 config.ts 70007 错误码
status: completed
- id: fix-collect-status
content: outfit-detail.ts 调用收藏状态接口初始化 isCollected
status: completed
dependencies:
- fix-types-errors
- id: fix-pay-polling
content: mall.ts 支付成功后按 order_no 轮询订单确认到账
status: completed
dependencies:
- fix-types-errors
- id: fix-order-channel
content: order.ts 与 order.wxml 区分支付渠道并禁用虚拟订单取消
status: completed
dependencies:
- fix-types-errors
- id: fix-ai-quota-tip
content: ai-recommend.ts 生成前弹窗提示消耗 AI 额度
status: completed
- id: fix-login-guide
content: login.ts 新用户登录后引导完善生日
status: completed
---
## 用户需求
用户已修复后端两点:通知列表 `msg_type` 筛选、新增 `GET /collect/:targetUUID` 收藏状态查询接口。现要求前端按修复后的后端对齐,其中「广告激励额度发放」功能暂不实现,其余按上一轮一致性检查报告的结论修复前端。
## 核心修复项
1. 补齐前端类型定义与错误码:`OrderItem` 补 `pay_channel`、`GoodsItem` 补 `ai_recommend_quota`/`valid_days`、`vip_type` 注释补体验会员、错误码表补 `70007`。
2. 收藏状态正确初始化:穿搭详情页调用新增的收藏状态查询接口,不再写死为「未收藏」。
3. 虚拟支付成功后轮询订单确认到账:支付组件 `success` 不再直接刷新权益,而是轮询订单直到 `order_status=2`。
4. 订单页区分支付渠道:虚拟支付订单禁用「取消订单」入口。
5. AI 推荐生成前提示将消耗 1 次 AI 额度。
6. 新用户登录后引导完善生日。
## 边界
- 只改前端代码,不改后端。
- 广告激励(`/ad-reward/grant`)不实现。
- 通知列表前端无需改动(后端已配合支持 `msg_type`)。
- 保持现有小程序原生 + TypeScript 风格,金额单位分、时间单位秒的换算不变。
## 技术栈
- 前端:微信小程序原生 + TypeScript
- 复用现有 `miniprogram/utils/request.ts` 的 `request<T>` 封装与 `utils/config.ts` 的枚举/错误码表
## 实现方案
### 1. 类型与错误码补齐(models.ts + config.ts)
- `types/models.ts`
- `OrderItem` 增补 `pay_channel: number`(注释:1=微信支付 2=虚拟支付)。
- `GoodsItem` 增补 `ai_recommend_quota: number`(赠送 AI 推荐额度)、`valid_days: number`(加量包有效期天数)。
- `UserInfo.vip_type` 注释由「1 非会员 2 月度会员 3 年度会员」补齐为「1 非会员 2 月度会员 3 年度会员 4 体验会员」。
- `utils/config.ts` 的 `ERROR_MESSAGES` 增补 `70007: '虚拟支付订单不支持取消'`。
### 2. 收藏状态初始化(outfit-detail.ts)
- 在 `fetchDetail()` 中与点赞状态一起并行请求,新增调用 `request<{ is_collected: boolean; collect_count: number }>({ url: '/collect/' + this.data.uuid, showError: false })`。
- 用响应 `is_collected` 初始化 `this.data.isCollected`;`collect_count` 可存入 `data` 备用,失败静默保持 `false`,不影响原有点赞与详情加载。
### 3. 支付后轮询订单确认(mall.ts)
- 将 `doPayment(res)` 的 `success` 回调改为调用新增的 `pollOrder(res.order_no)`。
- `pollOrder(orderNo)` 实现:每 1.5s 调用 `request<PagedResult<OrderItem>>({ url: '/order', data: { page: 1, page_size: 50 } })`,利用后端 `Order("id DESC")` 新订单在第一页的特性,在 `list` 中按 `order_no` 匹配:
- `order_status === 2`:停止轮询,`showToast('支付成功')` 并 `fetchQuota()` + `fetchUser()`。
- `order_status` 为 3/4/5:停止轮询,提示对应结果。
- `order_status === 1`:继续轮询。
- 超过约 10 次:停止,`showToast('到账可能有延迟')` 并 `fetchQuota()` + `fetchUser()`。
- 保留现有「先关闭订单弹窗再支付」交互;`fail` 回调保持静默处理不变。
### 4. 订单支付渠道区分(order.ts + order.wxml)
- `order.ts` 的 `fetchList` map 逻辑增补:
- `_canCancel: it.order_status === 1 && it.pay_channel !== 2`
- `_payChannelText: it.pay_channel === 2 ? '虚拟支付' : '微信支付'`
- `order.wxml` 中「取消订单」按钮由直接展示改为 `wx:if="{{item._canCancel}}"` 控制,虚拟支付订单不再展示取消入口;订单信息区可选展示 `_payChannelText`。
### 5. AI 推荐额度提示(ai-recommend.ts)
- 在 `startGenerate(sceneType, scene)` 执行生成前增加 `wx.showModal` 确认,文案「本次将消耗 1 次 AI 推荐额度」,`confirm` 后才执行原有生成逻辑,`cancel` 则恢复场景选择态;`onSkipScene` 与 `onStartGenerate` 均复用该确认,避免重复弹窗。
### 6. 新用户生日引导(login.ts)
- 登录成功并保存 token/user_info 后,先按现有逻辑 `switchTab` 到衣橱页,再判断 `data.user_info.is_new_user || !data.user_info.birth_day`:满足条件时弹 `wx.showModal` 引导「完善生日可解锁今日运势」,确认后 `switchTab` 到 `pages/profile/profile`,取消则留在衣橱页。
## 实现要点(防回归)
- 所有新接口调用沿用 `request<T>` 的 `showError: false` 模式,收藏/轮询失败不打断主流程。
- 支付轮询必须按 `order_no` 精确匹配,不能只看列表是否非空,避免误判他人订单或历史订单。
- 订单取消禁用仅控制前端入口,后端 `70007` 仍作为兜底,双保险。
- 不修改金额/时间换算、枚举值、请求字段名等已确认一致的部分,避免扩大改动面。