feat: add portal recharge page

This commit is contained in:
QiuSW
2026-07-03 14:49:45 +08:00
parent 4a10c2bb92
commit c2e411fe45
18 changed files with 518 additions and 31 deletions
+24
View File
@@ -801,3 +801,27 @@
- 阻塞:无。测试阶段仍有 allauth `account.EmailAddress` 条件唯一约束在 MySQL 上不可创建的 `models.W036` 警告;本项目账本邮箱唯一性由 `user.email` 唯一约束承担。
- 决策:T-503 页面只读,不写 `UserWallet.points_balance`;余额用 `get_balance_snapshot()`,充值总额按 paid `RechargeOrder.amount_money` 汇总,入账点数按 `PointsLedger(recharge)` 汇总,消费记录直接展示 `PointsLedger(consume/refund)` 并关联 `CallRecord`,保证记录与流水同源。
- 下一步:领取 T-504 充值页(扫码 + 轮询到账)。
## 2026-07-03 T-504 充值页(扫码 + 轮询到账)
- 状态:DONE
- 变更:
- `apps/portal/forms.py`:新增 `RechargeCreateForm`,校验充值金额、支付方式和 `RECHARGE_MAX_AMOUNT_CNY` 单笔上限。
- `apps/portal/views.py` / `urls.py`:新增 `/recharge` 用户端页面;GET 展示余额、充值表单、当前订单和最近充值;POST 复用 `create_recharge_order()` 创建 pending 订单并重定向到当前订单页,避免刷新重复下单。
- `apps/portal/templates/portal/recharge.html`:新增充值页,展示支付二维码票据,保留可复制票据兜底;浏览器轮询 `/api/v1/recharge/status`,订单 paid 后刷新页面重新读取余额。
- `apps/portal/templates/portal/base.html` / `dashboard.html`:新增充值入口。
- `apps/portal/tests.py`:新增充值页测试,覆盖登录保护、创建订单不加点不写流水、当前订单仅见本人、金额上限和 CSRF 保护。
- 同步更新 `README.md`、`docs/00-ai-start-here.md`、`docs/03-tech-stack.md`、`docs/04-architecture.md`、`docs/api.md`、`docs/routes.md`、`docs/06-tasks.md`、`docs/current-state.md`、`docs/project-brief.md`、`docs/project-onepager.md`。
- 验证:
- `./init.ps1`:开工前通过,Python 3.12.3、依赖已满足、`manage.py check` 0 issues。
- `py -3.12 -m py_compile apps\portal\forms.py apps\portal\views.py apps\portal\urls.py apps\portal\tests.py`:通过。
- `py -3.12 manage.py check`:通过,0 issues。
- `py -3.12 manage.py makemigrations --check --dry-run`:通过,No changes detected。
- `py -3.12 -m compileall apps config`:通过。
- `py -3.12 manage.py test apps.portal --noinput --keepdb --verbosity 2`:通过,19 tests OK。
- `py -3.12 manage.py test apps.users apps.portal apps.api --noinput --keepdb --verbosity 2`:首次因远程 MySQL 连接中断失败;拉长 MySQL 超时并在网络恢复后复跑通过,60 tests OK。
- `./init.ps1`:收尾通过,依赖已满足、`manage.py check` 0 issues。
- `git diff --check`:通过,仅 Windows CRLF 提示。
- 阻塞:T-504 功能无阻塞。测试阶段仍有 allauth `account.EmailAddress` 条件唯一约束在 MySQL 上不可创建的 `models.W036` 警告;本项目账本邮箱唯一性由 `user.email` 唯一约束承担。真实支付仍需微信 / 支付宝商户密钥、证书、生产 SDK 依赖与公网回调地址。
- 决策:`/recharge` 页面 POST 直接复用 billing 层 `create_recharge_order()` 创建订单,JSON `POST /api/v1/recharge/create` 继续保留给用户端脚本或后续前端调用;页面本身不写钱包和流水,到账只认回调或主动查单入账后的本地订单状态。
- 下一步:领取 T-401 运营后台完善。