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

5.9 KiB
Raw Permalink Blame History

name, overview, todos
name overview todos
前端与后端一致性修复 根据上一轮全量检查报告,修复前端代码使其与已更新的后端完全一致(广告激励功能暂不实现、通知筛选后端已配合无需改前端),覆盖虚拟支付轮询、收藏状态初始化、类型字段补齐、错误码补充等。
id content status
fix-types-errors 补齐 models.ts 类型字段与 config.ts 70007 错误码 completed
id content status dependencies
fix-collect-status outfit-detail.ts 调用收藏状态接口初始化 isCollected completed
fix-types-errors
id content status dependencies
fix-pay-polling mall.ts 支付成功后按 order_no 轮询订单确认到账 completed
fix-types-errors
id content status dependencies
fix-order-channel order.ts 与 order.wxml 区分支付渠道并禁用虚拟订单取消 completed
fix-types-errors
id content status
fix-ai-quota-tip ai-recommend.ts 生成前弹窗提示消耗 AI 额度 completed
id content status
fix-login-guide login.ts 新用户登录后引导完善生日 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 仍作为兜底,双保险。
  • 不修改金额/时间换算、枚举值、请求字段名等已确认一致的部分,避免扩大改动面。