5.9 KiB
5.9 KiB
name, overview, todos
| name | overview | todos | |||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 前端与后端一致性修复 | 根据上一轮全量检查报告,修复前端代码使其与已更新的后端完全一致(广告激励功能暂不实现、通知筛选后端已配合无需改前端),覆盖虚拟支付轮询、收藏状态初始化、类型字段补齐、错误码补充等。 |
|
用户需求
用户已修复后端两点:通知列表 msg_type 筛选、新增 GET /collect/:targetUUID 收藏状态查询接口。现要求前端按修复后的后端对齐,其中「广告激励额度发放」功能暂不实现,其余按上一轮一致性检查报告的结论修复前端。
核心修复项
- 补齐前端类型定义与错误码:
OrderItem补pay_channel、GoodsItem补ai_recommend_quota/valid_days、vip_type注释补体验会员、错误码表补70007。 - 收藏状态正确初始化:穿搭详情页调用新增的收藏状态查询接口,不再写死为「未收藏」。
- 虚拟支付成功后轮询订单确认到账:支付组件
success不再直接刷新权益,而是轮询订单直到order_status=2。 - 订单页区分支付渠道:虚拟支付订单禁用「取消订单」入口。
- AI 推荐生成前提示将消耗 1 次 AI 额度。
- 新用户登录后引导完善生日。
边界
- 只改前端代码,不改后端。
- 广告激励(
/ad-reward/grant)不实现。 - 通知列表前端无需改动(后端已配合支持
msg_type)。 - 保持现有小程序原生 + TypeScript 风格,金额单位分、时间单位秒的换算不变。
技术栈
- 前端:微信小程序原生 + TypeScript
- 复用现有
miniprogram/utils/request.ts的request<T>封装与utils/config.ts的枚举/错误码表
实现方案
1. 类型与错误码补齐(models.ts + config.ts)
types/models.tsOrderItem增补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的fetchListmap 逻辑增补:_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仍作为兜底,双保险。 - 不修改金额/时间换算、枚举值、请求字段名等已确认一致的部分,避免扩大改动面。