From 5f3a1a466260a32ddcc044f611e63a779ae9e971 Mon Sep 17 00:00:00 2001 From: SpecialX <47072643+wangxiner55@users.noreply.github.com> Date: Mon, 22 Jun 2026 17:07:32 +0800 Subject: [PATCH] =?UTF-8?q?refactor(grades,diagnostic):=20=E5=AE=8C?= =?UTF-8?q?=E6=88=90=E6=88=90=E7=BB=A9=E5=92=8C=E5=AD=A6=E6=83=85=E8=AF=8A?= =?UTF-8?q?=E6=96=AD=E6=A8=A1=E5=9D=97=E5=AE=A1=E8=AE=A1=20P1+P2=20?= =?UTF-8?q?=E6=94=B9=E8=BF=9B=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit P1-1: 抽取 stats-service.ts,将 8 个统计计算纯函数从 data-access 层分离 P1-5: 创建 WidgetBoundary 组件 + 补齐 teacher 路由 loading.tsx/error.tsx (14 文件) P1-6: 同步架构图文档 004/005,新增 stats-service 与 widget-boundary 节点 P2-1: 补充 a11y ARIA 属性(5 图表 role=img + aria-label,2 表格 caption,3 列表 role=list,3 按钮 aria-label) P2-3: 修复班级报告 studentId 字段语义错误(schema 改为可空 + 迁移 + 代码适配) P2-4: 修复 grade_managed scope 返回空数据(改为子查询 classes 表按 gradeId 过滤) P2-5: 新增 /parent/diagnostic/ 页面(多子女学情诊断聚合 + loading + error) P2-6: 统一 SearchParams 工具(student/grades 和 management/grade/insights 改用 @/shared/lib/search-params) --- .../004_architecture_impact_map.md | 7 +- docs/architecture/005_architecture_data.json | 196 +- .../audit/grades-diagnostic-audit-report.md | 32 +- drizzle/0003_diagnostic_student_nullable.sql | 45 + drizzle/meta/0003_snapshot.json | 7562 +++++++++++++++++ .../management/grade/insights/page.tsx | 102 +- .../(dashboard)/parent/diagnostic/error.tsx | 27 + .../(dashboard)/parent/diagnostic/loading.tsx | 32 + .../(dashboard)/parent/diagnostic/page.tsx | 70 + src/app/(dashboard)/student/grades/page.tsx | 13 +- .../diagnostic/class/[classId]/error.tsx | 27 + .../diagnostic/class/[classId]/loading.tsx | 30 + .../(dashboard)/teacher/diagnostic/error.tsx | 27 + .../teacher/diagnostic/loading.tsx | 23 + .../diagnostic/student/[studentId]/error.tsx | 27 + .../student/[studentId]/loading.tsx | 30 + .../teacher/grades/analytics/error.tsx | 27 + .../teacher/grades/analytics/loading.tsx | 31 + .../teacher/grades/entry/error.tsx | 27 + .../teacher/grades/entry/loading.tsx | 23 + src/app/(dashboard)/teacher/grades/error.tsx | 27 + .../(dashboard)/teacher/grades/loading.tsx | 28 + .../teacher/grades/stats/error.tsx | 27 + .../teacher/grades/stats/loading.tsx | 33 + .../components/mastery-radar-chart.tsx | 60 +- .../diagnostic/components/report-list.tsx | 5 +- .../components/student-diagnostic-view.tsx | 6 +- src/modules/diagnostic/data-access-reports.ts | 15 +- src/modules/diagnostic/types.ts | 4 +- .../components/class-comparison-chart.tsx | 36 +- .../components/grade-distribution-chart.tsx | 64 +- .../grades/components/grade-record-list.tsx | 16 +- .../grades/components/grade-trend-chart.tsx | 34 +- .../components/subject-comparison-chart.tsx | 46 +- .../grades/components/widget-boundary.tsx | 139 + src/modules/grades/data-access-analytics.ts | 107 +- src/modules/grades/data-access-ranking.ts | 38 +- src/modules/grades/data-access.ts | 40 +- src/modules/grades/lib/grade-utils.ts | 14 +- src/modules/grades/stats-service.ts | 305 + src/shared/db/schema.ts | 22 +- 41 files changed, 9043 insertions(+), 381 deletions(-) create mode 100644 drizzle/0003_diagnostic_student_nullable.sql create mode 100644 drizzle/meta/0003_snapshot.json create mode 100644 src/app/(dashboard)/parent/diagnostic/error.tsx create mode 100644 src/app/(dashboard)/parent/diagnostic/loading.tsx create mode 100644 src/app/(dashboard)/parent/diagnostic/page.tsx create mode 100644 src/app/(dashboard)/teacher/diagnostic/class/[classId]/error.tsx create mode 100644 src/app/(dashboard)/teacher/diagnostic/class/[classId]/loading.tsx create mode 100644 src/app/(dashboard)/teacher/diagnostic/error.tsx create mode 100644 src/app/(dashboard)/teacher/diagnostic/loading.tsx create mode 100644 src/app/(dashboard)/teacher/diagnostic/student/[studentId]/error.tsx create mode 100644 src/app/(dashboard)/teacher/diagnostic/student/[studentId]/loading.tsx create mode 100644 src/app/(dashboard)/teacher/grades/analytics/error.tsx create mode 100644 src/app/(dashboard)/teacher/grades/analytics/loading.tsx create mode 100644 src/app/(dashboard)/teacher/grades/entry/error.tsx create mode 100644 src/app/(dashboard)/teacher/grades/entry/loading.tsx create mode 100644 src/app/(dashboard)/teacher/grades/error.tsx create mode 100644 src/app/(dashboard)/teacher/grades/loading.tsx create mode 100644 src/app/(dashboard)/teacher/grades/stats/error.tsx create mode 100644 src/app/(dashboard)/teacher/grades/stats/loading.tsx create mode 100644 src/modules/grades/components/widget-boundary.tsx create mode 100644 src/modules/grades/stats-service.ts diff --git a/docs/architecture/004_architecture_impact_map.md b/docs/architecture/004_architecture_impact_map.md index 62d65da..dc176ce 100644 --- a/docs/architecture/004_architecture_impact_map.md +++ b/docs/architecture/004_architecture_impact_map.md @@ -694,7 +694,10 @@ src/auth.ts ──▶ import { ... } from "@/shared/lib/permissions" - ✅ P1-3 已修复:~~12 个查询/分析 Action 缺少 Zod 校验~~ 新增 12 个查询 schema(DeleteGradeRecordSchema/GetGradeRecordByIdSchema/GradeQuerySchema/ClassGradeStatsQuerySchema/StudentGradeSummaryQuerySchema/ClassRankingQuerySchema/ExportGradesSchema/GradeTrendQuerySchema/ClassComparisonQuerySchema/SubjectComparisonQuerySchema/GradeDistributionQuerySchema/RankingTrendQuerySchema),所有 Action 使用 safeParse 校验 - ✅ P1-4 已修复:~~`batch-grade-entry.tsx`/`grade-record-form.tsx`/`grade-distribution-chart.tsx` 中存在 `as` 断言~~ 改用类型守卫函数(isGradeType/isSemester/isDistributionTooltipPayload) - ✅ P1-5 已修复:~~teacher/grades 与 teacher/diagnostic 路由缺少 loading.tsx/error.tsx~~ 已为 7 个路由补齐 loading.tsx + error.tsx,并新增 `WidgetBoundary` 通用组件 +- ✅ P2-1 已修复:~~图表/表格/列表缺少 a11y ARIA 属性~~ 为 4 个成绩图表添加 `role="img"` + `aria-label`,2 个表格添加 `
View grade-level homework statistics for grades you lead.
+{t("classManagement.grade.insights.description")}
Homework statistics aggregated across all classes in a grade.
+{t("classManagement.grade.insights.description")}