Files
vscode-workbench/PLANNING/tasks/E-01-分享战报.md
T

67 lines
2.8 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.
# E-01 · 分享战报(周报图 + 邀请二维码)
| 字段 | 值 |
|---|---|
| 项目 | EnglishDrill · `Desktop/english-drill`(backend + frontend) |
| 优先级 | P0 · M1 |
| 建议模型 | deepseek-v4.1-flash(主)/ gemini-3.8-flash(出图视觉验收) |
| 依赖 | 无 |
| 预估 | 1.5 天 |
## 一、背景(为什么做)
增长分析报告给它的定性是"**最高 ROI**"(`docs/AGI增长点分析-2026-09-11.md` P0-1):现在用户学得再好,没有任何可外发的物料——传播段为零。图里带邀请码和二维码,天然把"分享"接上"邀请裂变"。
数据全部现成:`Attempt` + `ExpLog` + `ProgressBar` 都有聚合基础。
## 二、目标(交付物)
**后端**
- `GET /api/accounts/report/week` → `{ attempted, correct_rate, streak_days, words_mastered, rank, invite_code }`(本周窗口 = 最近 7 天;排名复用本轮排行榜逻辑)
**前端**
- `/report` 新页面:
- 数据卡(本周战绩)
- **Canvas 绘制 750×1000 战报图**:战绩数据 + 邀请码 + 二维码(二维码库复用项目现有依赖,若无则引入轻量 `qrcode` 生成 dataURL 再 drawImage)
- 「保存图片」(`canvas.toBlob` → download)与「分享」(`navigator.share`,不支持时降级保存)
- 移动端视口适配
- 入口:个人中心/学习统计页加入口按钮
## 三、执行步骤
```text
1. 侦察现有统计接口与邀请码字段(复用,不重造聚合)
2. 周报接口 + 用例(窗口边界、无数据用户空态)
3. /report 页 + Canvas 绘制(DPR 处理防模糊、字体加载等待 document.fonts.ready)
4. 保存/分享链路(含降级)
5. 移动端视口验证 + 出图视觉验收
```
## 四、验收标准
- [ ] 周报接口字段全部正确(含无数据用户返回零值不报错)
- [ ] 窗口边界正确:7 天内记录计入、7 天+1 秒外不计入
- [ ] Canvas 产出 750×1000 完整图:战绩 + 邀请码 + **二维码可扫(扫码指向注册链接)**
- [ ] 保存下载文件名语义化(如 `englishdrill-report-2026-09-11.png`)
- [ ] `navigator.share` 可用时调起分享;不可用时降级为保存
- [ ] 移动端(390×844)完整可用
- [ ] E2E 新增用例(report 接口 + 页面可达);既有 84/84 不回归
## 五、验收命令(参考)
```bash
cd backend && python tests/e2e/run_e2e.py -k report
python tests/e2e/run_e2e.py --http # 真实 granian 交叉验证
# 视觉验收:浏览器打开 /report → 生成图 → 交付截图给视觉模型检查
```
## 六、边界(不许做)
- 不新增收费点(增长期约束,报告明确"零收费")
- 不改现有排行榜/统计逻辑(复用其函数)
- 不引重量级图表库(Canvas 手绘即可)
## 七、交接
写 `PROGRESS_E-01.md`(含接口用例输出、出图截图说明、扫码验证结论)。