refactor(grades,diagnostic): 成绩和学情诊断模块审计修复

P0-1: 10 个页面补充 requirePermission 权限校验
P0-2: diagnostic/data-access-reports.ts 移除直查 users 表,改用 getUserNamesByIds
P0-3: 新增 grade/grades/diagnostic 三组 i18n 翻译文件(zh-CN/en)
P0-4: 新增 /management/grade 重定向页面

P1-2: 抽取 toNumber/normalize/buildScopeClassFilter 到 lib/grade-utils.ts
P1-3: 为 12 个 Action 新增 Zod safeParse 校验(schema.ts +12 查询 schema)
P1-4: 修复 as 断言违规,改用类型守卫函数

P2-2: 移除 diagnostic 组件中 Tailwind 任意值

同步更新架构图文档 004 和 005
This commit is contained in:
SpecialX
2026-06-22 16:23:34 +08:00
parent 20691f53ce
commit 45ee1ae43c
29 changed files with 2276 additions and 186 deletions

View File

@@ -7941,6 +7941,102 @@
"usedBy": [
"updateGradeRecordAction"
]
},
{
"name": "DeleteGradeRecordSchema",
"type": "ZodSchema",
"file": "schema.ts",
"usedBy": [
"deleteGradeRecordAction"
]
},
{
"name": "GetGradeRecordByIdSchema",
"type": "ZodSchema",
"file": "schema.ts",
"usedBy": [
"getGradeRecordByIdAction"
]
},
{
"name": "GradeQuerySchema",
"type": "ZodSchema",
"file": "schema.ts",
"usedBy": [
"getGradeRecordsAction"
]
},
{
"name": "ClassGradeStatsQuerySchema",
"type": "ZodSchema",
"file": "schema.ts",
"usedBy": [
"getClassGradeStatsAction"
]
},
{
"name": "StudentGradeSummaryQuerySchema",
"type": "ZodSchema",
"file": "schema.ts",
"usedBy": [
"getStudentGradeSummaryAction"
]
},
{
"name": "ClassRankingQuerySchema",
"type": "ZodSchema",
"file": "schema.ts",
"usedBy": [
"getClassRankingAction"
]
},
{
"name": "ExportGradesSchema",
"type": "ZodSchema",
"file": "schema.ts",
"usedBy": [
"exportGradesAction"
]
},
{
"name": "GradeTrendQuerySchema",
"type": "ZodSchema",
"file": "schema.ts",
"usedBy": [
"getGradeTrendAction"
]
},
{
"name": "ClassComparisonQuerySchema",
"type": "ZodSchema",
"file": "schema.ts",
"usedBy": [
"getClassComparisonAction"
]
},
{
"name": "SubjectComparisonQuerySchema",
"type": "ZodSchema",
"file": "schema.ts",
"usedBy": [
"getSubjectComparisonAction"
]
},
{
"name": "GradeDistributionQuerySchema",
"type": "ZodSchema",
"file": "schema.ts",
"usedBy": [
"getGradeDistributionAction"
]
},
{
"name": "RankingTrendQuerySchema",
"type": "ZodSchema",
"file": "schema.ts",
"usedBy": [
"getRankingTrendAction"
]
}
],
"types": [
@@ -8154,6 +8250,48 @@
"migratedTo": "shared/lib/utils.formatDateForFile"
}
],
"lib": [
{
"name": "toNumber",
"signature": "(v: unknown) => number",
"file": "lib/grade-utils.ts",
"purpose": "安全将 unknown 值转换为有限数字,非有限值返回 0P1-2 新增:从 data-access/data-access-analytics/data-access-ranking 抽取)",
"usedBy": [
"data-access.serializeRecord",
"data-access.getClassGradeStats",
"data-access-analytics.getGradeTrend",
"data-access-analytics.getClassComparison",
"data-access-analytics.getSubjectComparison",
"data-access-analytics.getGradeDistribution",
"data-access-ranking.getRankingTrend"
]
},
{
"name": "normalize",
"signature": "(score: number, fullScore: number) => number",
"file": "lib/grade-utils.ts",
"purpose": "将原始分数归一化到 0-100 分制P1-2 新增:从 data-access-analytics/data-access-ranking 抽取)",
"usedBy": [
"data-access-analytics.getGradeTrend",
"data-access-analytics.getSubjectComparison",
"data-access-analytics.getGradeDistribution",
"data-access-ranking.getRankingTrend"
]
},
{
"name": "buildScopeClassFilter",
"signature": "(scope: DataScope) => SQL | null",
"file": "lib/grade-utils.ts",
"purpose": "根据 DataScope 构建 gradeRecords 表的行级权限过滤条件P1-2 新增:从 data-access/data-access-analytics 抽取)",
"usedBy": [
"data-access.getGradeRecords",
"data-access-analytics.getGradeTrend",
"data-access-analytics.getClassComparison",
"data-access-analytics.getSubjectComparison",
"data-access-analytics.getGradeDistribution"
]
}
],
"components": [
{
"name": "GradeRecordForm",