bindbox-game/.trae/documents/修复订单详情展示与数据补全(活动_期号_支付与中奖信息).md
邹方成 45815bfb7d chore: 清理无用文件与优化代码结构
refactor(utils): 修复密码哈希比较逻辑错误
feat(user): 新增按状态筛选优惠券接口
docs: 添加虚拟发货与任务中心相关文档
fix(wechat): 修正Code2Session上下文传递问题
test: 补充订单折扣与积分转换测试用例
build: 更新配置文件与构建脚本
style: 清理多余的空行与注释
2025-12-18 17:35:55 +08:00

49 lines
3.4 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.

## 问题归因
- 活动/期号为空后端仅在存在抽奖日志时填充活动信息未抽取或刚支付时为0。参考 internal/api/admin/pay_orders_admin.go:167-191。
- 中奖字段与等级:前端直接展示“是否中奖”,但应改为“中奖等级”并基于 `activity.level`/`reward_id` 显示;未抽取时应显示“待开奖”。
- 支付信息不全:只显示 `ActualAmount`,未分解“积分抵扣金额/积分数量”;`PayPreorderID` 为0时未做断言处理。
- 商品价格与金额为0抽奖订单常无商品明细或价格未赋值可根据奖励商品填充价格或以“抽奖价格×次数”为明细。
## 后端改造GetPayOrderDetail
- 文件internal/api/admin/pay_orders_admin.go
- 变更点:
1) 无抽奖日志时,解析 `order.Remark``lottery:activity:<aid>|issue:<iss>|count:<N>` 填充 `activity.activity_id/issue_id`,查询 `issue.issue_number``activity.activity_name`
2) 扩展支付信息:`payment.points_amount`(订单积分抵扣金额,单位分)、`payment.points_used`(抵扣积分数量=points_amount/10`payment.total_amount`(订单总额,单位分)。
3) 返回 `activity.count`(抽次数);若有奖励商品,补充 `activity.product_price`(商品价格,单位分)。
4) 若订单无 `order_items`,在响应中提供 `computed_items`:基于“抽奖价格×次数”构造一条展示用明细(前端优先显示 `computed_items`)。
5) `payment.pay_preorder_id` 为0时仍返回前端据此显示“-”。
## 前端改造(订单详情抽屉)
- 文件web/admin/src/views/…(订单详情抽屉组件,使用 fetchGetOrderDetail
- 变更点:
1) 活动:显示 `activity.activity_name`;下方附 `issue_number`;不显示 `(ID:0)`
2) 状态区:移除“是否中奖”;改为“中奖等级”显示 `activity.level`,若 `reward_id` 为空则显示“待开奖”。
3) 支付区:
- “实付”显示:`payment.actual_amount/100`
- 新增“积分抵扣”:`payment.points_used` 积分(约 `points_amount/100` 元)
- 新增“订单总额”:`payment.total_amount/100`
- “预订单ID”显示 `payment.pay_preorder_id`为0则显示“-”
4) 明细表:
- 优先显示 `computed_items` 的“单价/金额”,否则显示 `items`
- 若有中奖商品,显示 `activity.reward_name``activity.product_price`
## 路由与API契约
- 前端调用不变:`GET admin/pay/orders/:order_no`
- 响应新增字段:
- `activity.count``activity.product_price`
- `payment.points_amount``payment.points_used``payment.total_amount`
- `computed_items: [{name, quantity, unit_price, amount}]`
## 实施步骤
1) 后端:更新 GetPayOrderDetail 填充解析与新增字段;构造 `computed_items`
2) 前端:更新详情组件的数据映射与展示逻辑;删改“是否中奖”,补充字段渲染与空值处理。
3) 验证:
- 无抽奖日志的订单仍能显示活动名称与期号
- 积分全额支付场景显示积分抵扣与总额实付为0预订单ID为“-”
- 即时模式支付后,轮询显示中奖等级与商品信息
- 明细表显示正确单价/金额
## 验收标准
- 所有问题项均有正确数据或合理占位显示
- 即时/定时、积分/金额支付四种组合下展示正确
- 架构不破坏现有接口:前端仅增量使用新增字段