Files
gaokao-volunteer-system/SPRINT_6_S6_QUERY_REVIEW.md
Frontend Developer e8b8ad079e feat(sprint-2): V10 选项 B 完整切换 + G1 闸门通过
框架切换:Next.js 16 → Vite 5 + React 19 + React Router 7
状态管理:7 手写 hook → 4 Zustand slice
数据获取:直接 fetch → TanStack Query 5 (15 hooks)
表单:3-step 状态机 → RHF 7 + Zod
测试:0 → 25 单测 + 20 e2e (4 浏览器)
Bundle:192 KB gzip (目标 < 300 KB)
Lint:49 warning → 0 warning
Type:33 any → 0 any

S2-T-01 切 Vite 5 + React 19 框架
S2-T-02 Zustand 4 slice 替代 7 手写 hook
S2-T-03 TanStack Query 5 + 15 hooks
S2-T-04 Vitest + RTL + MSW + Chromatic 配置
S2-T-05 OpenAPI Codegen + Zod schema 复用
S2-T-06 RHF 7 + Zod 重写 FormCard
S2-T-07 Playwright 视觉基线 4 浏览器 5 spec
S2-T-08 Vite build + bundle < 300KB gzip

G1 闸门 (全部通过):
- typecheck: 0 error
- lint: 0 error 0 warning
- test (Vitest): 25/25 passed
- test:e2e (Playwright): 20/20 passed
- build (Vite): 326 modules 4.14s
- codegen:check: OpenAPI types 非占位

Sprint 2 收口报告:SPRINT_2_CLOSEOUT_2026-07-03.md
2026-07-03 15:51:03 +08:00

244 lines
7.3 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.
# Sprint 6 任务拆解W10-11 · 12 人天 · 56 子任务)— V10 选项 B
> **技术栈**Vite 5 + React 19 + Zustand 4 + TanStack Query 5 + RHF 7 + Zod
> **目标**:查询/审核业务 UISharePanel / DataQueryForm / ReviewFlow / LLMEnhancement / PosterPreview
> **闸门**G6视觉一致性 design pass + Chromatic 0 像素 diff
> **V10 变化**:保持 12dS6 是业务密集型,工时难压)
> **PM 决策2026-07-03**整体重写为新实现Playwright 视觉回归 + Chromatic 验收
---
## ⚠️ V10 关键变化(与 V2 对比)
| 维度 | V2 | V10 选项 B |
|---|---|---|
| DataQueryForm 4 变体 | 1.0d | **1.0d**(不变) |
| DataQueryResult 4 变体 | 1.0d | **1.0d**(不变) |
| 业务组件库 | 7 | 7不变 |
| a11y 集成 | S6 末 | **S5 已完成**S6 复用 |
| 总估时 | 11d | **12d**(略增:加 1d Chromatic 验证) |
---
## 0. Sprint 6 概览
| 任务 | 主任务 | 估时 | 子任务数 |
|---|---|---|---|
| T-D-11 | axe-core 集成(复用 S5 | 0d | 0 |
| T-D-12 | 屏幕阅读器 + 键盘测试 | 0.5d | 3 |
| T-D-13 | 替换 alert() 为 Toast | 0.25d | 2 |
| T-D-14 | SharePanel 组件 | 0.75d | 5 |
| T-D-15 | ShareStatusPanel 组件 | 0.5d | 4 |
| T-D-16 | DataQueryForm4 变体) | 1.0d | 6 |
| T-D-17 | DataQueryResult4 变体) | 1.0d | 6 |
| T-D-18 | ReviewFlow 组件 | 0.75d | 4 |
| T-D-19 | LLMEnhancement 组件 | 0.75d | 4 |
| T-D-20 | PosterPreview 组件 | 0.5d | 4 |
| T-D-21 | 暗色变体审计 | 1.0d | 4 |
| T-D-22 | Chromatic 视觉回归S6 增量) | 1.0d | 4 |
| T-D-23 | ESLint 0 warning 守门 | 0.5d | 3 |
| **合计** | **13 任务(含 1 复用)** | **9.5d + 缓冲 2.5d = 12d** | **49** |
---
## T-D-11 · axe-core 集成(复用 S5 · 0d · 0 子任务)
> **V10 收益**Sprint 5 已集成S6 直接复用
---
## T-D-12 · 屏幕阅读器 + 键盘测试0.5d · 3 子任务)
### ST-S6-D-12.1 VoiceOver 测试0.25d
- **覆盖**5 业务组件关键路径
### ST-S6-D-12.2 NVDA 测试0.125d
### ST-S6-D-12.3 键盘导航测试0.125d
- **覆盖**Tab / Shift+Tab / Enter / Esc / 方向键
---
## T-D-13 · 替换 alert() 为 Toast0.25d · 2 子任务)
### ST-S6-D-13.1 grep + 替换0.125d
- **命令**`grep -rn "alert(" apps/web/src/`
- **替换**`toast.error(message)` / `toast.success(message)`
### ST-S6-D-13.2 验证无 alert() 残留0.125d
---
## T-D-14 · SharePanel 组件0.75d · 5 子任务)
### ST-S6-D-14.1 写组件骨架0.25d
- **V10 集成**RHF + Zod
- **UI/交互 1:1**:与原型分享面板一致
### ST-S6-D-14.2 写表单字段0.125d
- 分享链接有效期7/30/永久)
- 访问密码
- 备注
### ST-S6-D-14.3 接入 `useShareLinkCreate`0.125d
### ST-S6-D-14.4 写 story0.125d
### ST-S6-D-14.5 写 e2e0.125d
---
## T-D-15 · ShareStatusPanel 组件0.5d · 4 子任务)
### ST-S6-D-15.1 写 3 统计卡片0.125d
### ST-S6-D-15.2 写访问趋势 mini chart0.125d
### ST-S6-D-15.3 写 story0.125d
### ST-S6-D-15.4 写 e2e0.125d
---
## T-D-16 · DataQueryForm4 变体 · 1.0d · 6 子任务)
### ST-S6-D-16.1 写 scoreLine 变体0.125d
- **字段**:省份 / 年份 / 类型
### ST-S6-D-16.2 写 rankEstimator 变体0.125d
- **字段**:位次 / 选科 / 年份
### ST-S6-D-16.3 写 majors 变体0.125d
- **字段**:专业类 / 学历 / 院校
### ST-S6-D-16.4 写 schools 变体0.125d
- **字段**:院校 / 省份 / 类型
### ST-S6-D-16.5 接入 TanStack Query mutations0.25d
- **V10 收益**4 变体复用同一表单骨架
### ST-S6-D-16.6 写 story0.25d
---
## T-D-17 · DataQueryResult4 变体 · 1.0d · 6 子体)
### ST-S6-D-17.1 写 scoreLine 变体0.125d
- **展示**:分数段分布表 + chart
### ST-S6-D-17.2 写 rankEstimator 变体0.125d
- **展示**:等效分数 + 院校推荐
### ST-S6-D-17.3 写 majors 变体0.125d
- **展示**:专业列表 + 院校
### ST-S6-D-17.4 写 schools 变体0.125d
- **展示**:院校卡片
### ST-S6-D-17.5 接入虚拟滚动0.25d
- **V10 收益**TanStack Virtual 万行流畅
### ST-S6-D-17.6 写 story0.25d
---
## T-D-18 · ReviewFlow 组件0.75d · 4 子任务)
### ST-S6-D-18.1 写审核步骤指示器0.25d
- **V10 集成**:复用 S5-D-13 Stepper
### ST-S6-D-18.2 写审核表单RHF 版 · 0.25d
- **字段**:审批意见 / 风险等级 / 备注
### ST-S6-D-18.3 接入 useReview* hooks0.125d
### ST-S6-D-18.4 写 story + e2e0.125d
---
## T-D-19 · LLMEnhancement 组件0.75d · 4 子任务)
### ST-S6-D-19.1 写 Provider 选择器0.25d
- **V10 集成**:复用 T-B-17 LLM provider
### ST-S6-D-19.2 写流式结果展示0.25d
- **V10 集成**SSE + Markdown 渲染
### ST-S6-D-19.3 接入 useAuditEnhanceMutation0.125d
### ST-S6-D-19.4 写 story + e2e0.125d
---
## T-D-20 · PosterPreview 组件0.5d · 4 子任务)
### ST-S6-D-20.1 写海报渲染0.125d
- **V10 集成**html2canvas
### ST-S6-D-20.2 写 QR Code 嵌入0.125d
### ST-S6-D-20.3 接入 usePosterGenerateMutation0.125d
### ST-S6-D-20.4 写 story + e2e0.125d
---
## T-D-21 · 暗色变体审计1.0d · 4 子任务)⚠️ V10 关键
### ST-S6-D-21.1 截图所有 7 业务组件 dark mode0.25d
### ST-S6-D-21.2 Chromatic diff 检测0.25d
- **验收**0 像素 diff
### ST-S6-D-21.3 修复对比度问题0.25d
- **目标**WCAG AA4.5:1
### ST-S6-D-21.4 提交 Chromatic 基线0.25d
---
## T-D-22 · Chromatic 视觉回归S6 增量 · 1.0d · 4 子任务)⚠️ V10 新增
### ST-S6-D-22.1 7 业务组件 × 3 主题0.25d
- light / dark / system × 7 组件 = 21 截图
### ST-S6-D-22.2 移动端 viewport0.25d
- 375px / 768px / 1024px × 7 组件 = 21 截图
### ST-S6-D-22.3 交互态截图0.25d
- hover / focus / active / disabled / loading / error
### ST-S6-D-22.4 提交基线0.25d
---
## T-D-23 · ESLint 0 warning 守门0.5d · 3 子任务)
### ST-S6-D-23.1 清理 S6 引入的 any0.25d
### ST-S6-D-23.2 清理 S6 引入的 unused0.125d
### ST-S6-D-23.3 守住 Sprint 1-5 已修复规则0.125d
---
## V10 验收清单Sprint 6 G6 闸门)
```
G6 闸门(必须全部通过):
[ ] 7 业务组件全部完成 + story 全覆盖
[ ] axe-core 0 critical 0 serious
[ ] pnpm typecheck 0 error 0 any
[ ] pnpm lint 0 error 0 warning
[ ] pnpm test:storybook 全绿
[ ] pnpm chromatic 视觉基线 7 组件 × 3 主题 × 3 viewport × 6 态 = 378 截图
[ ] WCAG AA 对比度全通过
[ ] DataQueryForm 万行结果 < 200ms 渲染
```
---
## V10 风险Sprint 6 特有)
| ID | 风险 | 等级 | 缓解 |
|---|---|---|---|
| V10-S6-R1 | 4 变体 DataQueryForm 代码重复 | 中 | 提取 `<QueryForm variant=...>` 单一组件 |
| V10-S6-R2 | 暗色变体对比度不达标 | 中 | 用 design token 强制S6-D-21 强制审计 |
| V10-S6-R3 | Chromatic 配额超限 | 低 | 累计 S2-S5 用 4 次,剩 6 次给 S6-S8 |
---
**Sprint 6 文档状态**V10 选项 B 重写完成
**总工时**12 人天V2 是 11 人天,+1d Chromatic 验证)
**总子任务**49 个V2 是 55 个)
**下一步**Sprint 5 完成后立即启动