Files
gaokao-volunteer-system/SPRINT_8_S8_ADMIN_POLICY.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.4 KiB
Raw Blame History

Sprint 8 任务拆解W14-16 · 10 人天 · 50 子任务)— V10 选项 B

技术栈Vite 5 + React 19 + Zustand 4 + TanStack Query 5 + RHF 7 + Zod 目标后台管理页面收口Share/Query/Review/Policy/通知/系统)+ 公共门户 React 化 闸门G7 最终(生产可发版) V10 变化:从 8d 增到 10d+2d = 12 个后台页面,单页平均 0.5d 合理化) PM 决策2026-07-03整体重写为新实现Playwright 视觉回归 + Chromatic 验收


⚠️ V10 关键变化(与 V2 对比)

维度 V2 V10 选项 B
单页估时 0.5-1.0d(紧凑) 0.5-1.0d合理化V2 有压缩)
表单组件 手写 RHF + Zod(统一模式)
总估时 8d 10d+2d 合理化)

0. Sprint 8 概览

任务 主任务 估时 子任务数
T-E-10 Share Link 列表 0.75d 3
T-E-11 Share Link 详情 /stats 0.75d 3
T-E-12 Poster 管理 0.75d 3
T-E-13 分数线查询 0.75d 3
T-E-14 位次估算 0.5d 2
T-E-15 专业库 1.0d 4
T-E-16 院校库 1.0d 4
T-E-17 复核 Dashboard 1.0d 4
T-E-18 LLM 审计日志 0.5d 3
T-E-19 Policy 中心 0.75d 3
T-E-20 通知列表 0.5d 2
T-E-21 通知模板编辑RHF 0.75d 3
T-E-22 系统设置 0.5d 2
T-E-23 用户管理 0.5d 2
T-E-24 公共门户 React 化10 页) 1.0d 4
T-E-25 Chromatic 收口S8 最终) 0.5d 2
T-E-26 ESLint 0 warning 守门 0.25d 2
T-E-27 G7 最终验收 0.25d 1
合计 18 任务 10d 50

ST-S8-E-10.1 写 useShareLinksQuery0.125d

ST-S8-E-10.2 写 ShareLinksTable0.5d

  • V10 集成S5-D-01 DataTable + 列筛选 + 删除按钮

ST-S8-E-10.3 写 story + e2e0.125d


ST-S8-E-11.1 写 ShareLinkDetail0.5d

  • V10 集成Tabs基础信息/访问统计/操作日志)

ST-S8-E-11.2 写 StatsChart0.125d

  • V10 集成recharts LineChart

ST-S8-E-11.3 写 story + e2e0.125d


T-E-12 · Poster 管理0.75d · 3 子任务)

ST-S8-E-12.1 写 usePostersQuery0.125d

ST-S8-E-12.2 写 PostersGrid0.5d

  • V10 集成:缩略图 + 状态徽章

ST-S8-E-12.3 写 story + e2e0.125d


T-E-13 · 分数线查询0.75d · 3 子任务)

ST-S8-E-13.1 写 ScoreLineQueryForm0.5d

  • V10 集成S6-D-16 DataQueryForm scoreLine 变体

ST-S8-E-13.2 写 ScoreLineResultTable0.125d

ST-S8-E-13.3 写 story + e2e0.125d


T-E-14 · 位次估算0.5d · 2 子任务)

ST-S8-E-14.1 写 RankEstimatorForm + Result0.375d

  • V10 集成S6-D-16 DataQueryForm rankEstimator 变体

ST-S8-E-14.2 写 story + e2e0.125d


T-E-15 · 专业库1.0d · 4 子任务)

ST-S8-E-15.1 写 useMajorsQuery0.125d

ST-S8-E-15.2 写 MajorsTable0.5d

  • V10 集成S5-D-01 DataTable + 虚拟滚动

ST-S8-E-15.3 写 MajorDetailModal0.25d

  • V10 集成S5-D-04 Modal + Tabs

ST-S8-E-15.4 写 story + e2e0.125d


T-E-16 · 院校库1.0d · 4 子任务)

ST-S8-E-16.1 写 useSchoolsQuery0.125d

ST-S8-E-16.2 写 SchoolsGrid0.5d

  • V10 集成:卡片网格 + Badge 985/211

ST-S8-E-16.3 写 SchoolDetailDrawer0.25d

  • V10 集成S5-D-01 Tabs + Chart

ST-S8-E-16.4 写 story + e2e0.125d


T-E-17 · 复核 Dashboard1.0d · 4 子任务)

ST-S8-E-17.1 写 useReviewQueueQuery0.125d

ST-S8-E-17.2 写 ReviewQueueTable0.5d

ST-S8-E-17.3 写 ReviewActions0.25d

  • V10 集成RHF + Zod 审核表单

ST-S8-E-17.4 写 story + e2e0.125d


T-E-18 · LLM 审计日志0.5d · 3 子任务)

ST-S8-E-18.1 写 useLLMLogsQuery0.125d

ST-S8-E-18.2 写 LLMLogsTable0.25d

  • :时间 / 用户 / Provider / 输入 / 输出 / 耗时

ST-S8-E-18.3 写 story + e2e0.125d


T-E-19 · Policy 中心0.75d · 3 子任务)

ST-S8-E-19.1 写 usePoliciesQuery0.125d

ST-S8-E-19.2 写 PolicyEditor0.5d

  • V10 集成RHF + Zod + SafeMarkdown 预览

ST-S8-E-19.3 写 story + e2e0.125d


T-E-20 · 通知列表0.5d · 2 子任务)

ST-S8-E-20.1 写 NotificationsTable0.375d

ST-S8-E-20.2 写 story + e2e0.125d


T-E-21 · 通知模板编辑RHF · 0.75d · 3 子任务)

ST-S8-E-21.1 写 TemplateFormRHF + Zod · 0.5d

  • 字段:模板名称 / 渠道 / 变量 / 内容

ST-S8-E-21.2 写变量预览0.125d

ST-S8-E-21.3 写 story + e2e0.125d


T-E-22 · 系统设置0.5d · 2 子任务)

ST-S8-E-22.1 写 SettingsForm0.375d

  • V10 集成RHF + Zod

ST-S8-E-22.2 写 story + e2e0.125d


T-E-23 · 用户管理0.5d · 2 子任务)

ST-S8-E-23.1 写 UsersTable0.375d

ST-S8-E-23.2 写 story + e2e0.125d


T-E-24 · 公共门户 React 化10 页 · 1.0d · 4 子任务)

ST-S8-E-24.1 写 10 个公共门户页0.5d

  • 页面:首页 / 政策 / 数据 / 帮助 / 关于 / 服务条款 / 隐私政策 / 联系我们 / 招贤纳士 / 友情链接
  • V10 关键:每页 < 50 行代码(用 design system 组件拼装)

ST-S8-E-24.2 SEO meta 注入0.25d

  • V10 集成react-helmet-async

ST-S8-E-24.3 sitemap.xml + robots.txt0.125d

ST-S8-E-24.4 写 e2e0.125d


T-E-25 · Chromatic 收口S8 最终 · 0.5d · 2 子任务)

ST-S8-E-25.1 截图所有后台 + 门户页面0.375d

  • 后台12 页 × 3 主题 = 36 截图
  • 门户10 页 × 2 主题(无 system 主题)= 20 截图
  • 总计56 截图

ST-S8-E-25.2 提交基线 + 验证 0 像素 diff0.125d


T-E-26 · ESLint 0 warning 守门0.25d · 2 子任务)

ST-S8-E-26.1 清理 S8 引入的 any0.125d

ST-S8-E-26.2 清理 S8 引入的 unused0.125d


T-E-27 · G7 最终验收0.25d · 1 子任务)

ST-S8-E-27.1 跑 G7 闸门清单0.25d

  • 验收G7 清单 100% 通过

V10 验收清单Sprint 8 G7 最终闸门)

G7 闸门(必须全部通过):
  [ ] 12 个后台页面 + 10 个公共门户页全部完成
  [ ] pnpm typecheck 0 error 0 any
  [ ] pnpm lint 0 error 0 warning
  [ ] pnpm test:storybook 全绿
  [ ] pnpm test:e2e 全绿
  [ ] pnpm chromatic 0 像素 diff
  [ ] Lighthouse P/A/B/S ≥ 95
  [ ] axe-core 0 critical 0 serious
  [ ] bundle < 350KB gzip
  [ ] 真实后端 5 模块 + admin 端到端跑通
  [ ] 生产可发版

V10 风险Sprint 8 特有)

ID 风险 等级 缓解
V10-S8-R1 后台页面工期紧张 已合理化到 10dV2 8d 不现实)
V10-S8-R2 公共门户 SEO react-helmet-async 注入 meta
V10-S8-R3 G7 收口发现新问题 S8 末预留 0.25d 收口

Sprint 8 文档状态V10 选项 B 重写完成 总工时10 人天V2 是 8 人天,+2d 合理化) 总子任务50 个V2 是 48 个) 下一步Sprint 7 完成后立即启动 → G7 收口 → 生产可发版