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

7.3 KiB
Raw Blame History

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 接入 useShareLinkCreate0.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 完成后立即启动