# 成绩与诊断模块易用性审计报告 v4 > **审计日期**:2026-06-23 > **审计范围**:成绩模块(grades)+ 诊断模块(diagnostic) > **对标系统**:PowerSchool、Infinite Campus、Skyward、Alma、Gradelink、RenWeb、Google Classroom、Canvas、超星学习通、ClassIn > **前置文档**:[v3 审计报告](./grades-diagnostic-audit-report-v3.md)(5 P1 + 10 P2 已全部完成) --- ## 一、v3 完成确认 v3 审计报告中 **5 个 P1 + 10 个 P2 改进项全部已实现并验证通过**(tsc + lint 通过,架构文档已同步)。 --- ## 二、v4 新增易用性问题(深度分析) 本轮分析从 12 个维度对成绩和诊断模块进行了深度审查,对比 10 个同类 K12 系统,共发现 **48 个易用性问题**(成绩模块 24 项 + 诊断模块 24 项)。 ### 严重程度分布 | 严重程度 | 成绩模块 | 诊断模块 | 合计 | 本次实施 | |---------|---------|---------|------|---------| | P1(核心缺陷) | 12 | 12 | 24 | 12 项 | | P2(易用性增强) | 22 | 20 | 42 | 0 项(下迭代) | | P3(长期优化) | 2 | 7 | 9 | 0 项(记录备查) | ### 本次实施范围 聚焦 P1 中影响**数据安全、通知机制、基础可读性、移动端可用性**的 12 项改进。 --- ## 三、P1 改进项详情(本次实施) ### 数据安全修复(诊断模块,3 项) #### v4-P1-1 getDiagnosticReports 无 dataScope 过滤(数据泄露) | 项 | 内容 | |----|------| | 位置 | [data-access-reports.ts](file:///e:/Desktop/CICD/src/modules/diagnostic/data-access-reports.ts) L115-147 | | 问题 | `getDiagnosticReports` 接收 filters 但无 dataScope 参数,教师调用时返回全校所有报告 | | 对比 | PowerSchool、Infinite Campus 严格按教师所教班级过滤 | | 改进 | 增加 dataScope 参数,教师仅返回所教班级学生报告 | #### v4-P1-2 教师学生诊断页未校验师生关系 | 项 | 内容 | |----|------| | 位置 | [teacher/diagnostic/student/[studentId]/page.tsx](file:///e:/Desktop/CICD/src/app/(dashboard)/teacher/diagnostic/student/[studentId]/page.tsx) L24-32 | | 问题 | 仅校验 class_members 和 children,未校验 class_taught,教师可通过 URL 查看任意学生 | | 对比 | PowerSchool、Infinite Campus 严格校验师生关系 | | 改进 | 增加 class_taught 校验,查询 studentId 是否属于教师所教班级 | #### v4-P1-3 学生可见草稿报告(发布流程缺陷) | 项 | 内容 | |----|------| | 位置 | [student/diagnostic/page.tsx](file:///e:/Desktop/CICD/src/app/(dashboard)/student/diagnostic/page.tsx) L13-16 | | 问题 | 学生/家长调用 getDiagnosticReports 未传 status 过滤,且组件回退到 reports[0](可能是草稿) | | 对比 | 所有对标系统严格区分草稿/已发布 | | 改进 | 学生/家长页面传 status: "published",移除组件回退逻辑 | ### 通知机制修复(3 项) #### v4-P1-4 班级报告发布不通知学生 | 项 | 内容 | |----|------| | 位置 | [actions.ts](file:///e:/Desktop/CICD/src/modules/diagnostic/actions.ts) L96-109 | | 问题 | publishReportAction 仅当 studentId 非空时通知,班级报告 studentId=null 全班不通知 | | 对比 | 所有对标系统班级报告发布均通知全班 | | 改进 | learningDiagnosticReports 表新增 classId 字段,班级报告发布时查询全班学生批量通知 | #### v4-P1-5 家长未收到子女报告发布通知 | 项 | 内容 | |----|------| | 位置 | [actions.ts](file:///e:/Desktop/CICD/src/modules/diagnostic/actions.ts) L102-108 | | 问题 | createNotification 仅通知学生本人,未查询 parent_student_relations 通知家长 | | 对比 | PowerSchool、Infinite Campus、超星学习通同步通知家长 | | 改进 | 发布通知时查询家长 userId 列表,批量发送通知 | #### v4-P1-6 成绩录入无通知机制 | 项 | 内容 | |----|------| | 位置 | [actions.ts](file:///e:/Desktop/CICD/src/modules/grades/actions.ts) L82-130 | | 问题 | createGradeRecordAction 和 batchCreateGradeRecordsAction 录入后仅 revalidatePath,不触发通知 | | 对比 | PowerSchool、Canvas、超星学习通成绩发布自动通知学生和家长 | | 改进 | 录入成功后调用通知模块,通知学生本人和家长 | ### 可读性修复(3 项) #### v4-P1-7 成绩列表缺少颜色编码 | 项 | 内容 | |----|------| | 位置 | [grade-record-list.tsx](file:///e:/Desktop/CICD/src/modules/grades/components/grade-record-list.tsx) L161-163 | | 问题 | 分数展示为纯文本,不及格不标红,优秀不标绿 | | 对比 | PowerSchool、Canvas、超星学习通均按区间着色 | | 改进 | 新增 ScoreCell 组件,根据得分率着色(红<60%/黄60-84%/绿≥85%) | #### v4-P1-8 热力图缺少颜色图例 | 项 | 内容 | |----|------| | 位置 | [class-diagnostic-view.tsx](file:///e:/Desktop/CICD/src/modules/diagnostic/components/class-diagnostic-view.tsx) L166-206 | | 问题 | 热力图渲染了色块但无图例说明颜色含义 | | 对比 | PowerSchool、Infinite Campus、Alma 热力图均带图例 | | 改进 | 热力图卡片底部增加图例条 | #### v4-P1-9 家长页静默丢弃查询失败的子女 | 项 | 内容 | |----|------| | 位置 | [parent/diagnostic/page.tsx](file:///e:/Desktop/CICD/src/app/(dashboard)/parent/diagnostic/page.tsx) L31-48 | | 问题 | Promise.allSettled rejected 状态被静默丢弃,家长不知有子女数据加载失败 | | 对比 | PowerSchool、Infinite Campus 显示错误提示并允许重试 | | 改进 | 保留 rejected 项,渲染错误卡片提供重试按钮 | ### 移动端修复(2 项) #### v4-P1-10 成绩列表表格移动端溢出 | 项 | 内容 | |----|------| | 位置 | [grade-record-list.tsx](file:///e:/Desktop/CICD/src/modules/grades/components/grade-record-list.tsx) L138-196 | | 问题 | 10 列表格无水平滚动容器,手机端溢出 | | 对比 | PowerSchool、Infinite Campus 移动端表格可横向滚动 | | 改进 | 表格容器添加 overflow-x-auto | #### v4-P1-11 诊断模块表格移动端溢出 | 项 | 内容 | |----|------| | 位置 | [class-diagnostic-view.tsx](file:///e:/Desktop/CICD/src/modules/diagnostic/components/class-diagnostic-view.tsx) L242-376 | | 问题 | 多个表格无 overflow-x-auto 包裹,手机端溢出 | | 对比 | 所有对标系统移动端表格可横向滚动 | | 改进 | 所有 Table 外层包裹 overflow-x-auto | ### 家长端导出修复(1 项) #### v4-P1-12 家长端导出按钮为占位实现 | 项 | 内容 | |----|------| | 位置 | [parent-export-button.tsx](file:///e:/Desktop/CICD/src/modules/parent/components/parent-export-button.tsx) L25-31 | | 问题 | handleExport 仅 setTimeout 后 toast "coming soon",无实际导出 | | 对比 | PowerSchool、Infinite Campus 家长端完整导出功能 | | 改进 | 接入 exportGradesAction,支持按 studentId 导出 | --- ## 四、P2 改进项(下迭代规划,本次不实施) 成绩模块 22 项 + 诊断模块 20 项,共 42 项 P2 易用性增强,记录备查。 ### 成绩模块 P2 代表性问题 - v4-P2-1 MAX_SCORE 硬编码与 fullScore 不一致 - v4-P2-2 缺少自动计算与智能填充 - v4-P2-3 成绩表格不支持列排序 - v4-P2-4 班级排名缺少进步/退步趋势标识 - v4-P2-5 趋势图缺少交互式钻取 - v4-P2-6 缺少科目相关性分析 - v4-P2-7 缺少成绩发布状态控制 - v4-P2-8 grade_managed scope 校验过于宽松 - v4-P2-9 历史成绩访问无时间窗口限制 - v4-P2-10 缺少 CSV 导出与打印友好视图 ### 诊断模块 P2 代表性问题 - v4-P2-1 报告内容硬编码无模板系统 - v4-P2-2 雷达图截断知识点名称无 tooltip - v4-P2-3 无学生×知识点掌握度矩阵 - v4-P2-4 无掌握度趋势/历史分析 - v4-P2-5 无预测性分析(at-risk 预警) - v4-P2-6 无掌握度下降预警 - v4-P2-7 通知类型使用 "grade" 而非专用类型 - v4-P2-8 grade_managed 范围未处理 - v4-P2-9 导出 action 未校验报告归属 - v4-P2-10 无 PDF 导出 --- ## 五、P3 长期改进(记录备查) 成绩模块 2 项 + 诊断模块 7 项,共 9 项长期优化。 ### 代表性问题 - v4-P3-1 成绩录入无语音输入 - v4-P3-2 缺少成绩录入指引与新手引导 - v4-P3-3 无定时/自动化报告生成 - v4-P3-4 色盲用户友好性不足 - v4-P3-5 无知识点前置依赖图 - v4-P3-6 雷达图键盘不可达 - v4-P3-7 无数据置信度指示 --- ## 六、实施计划 实施顺序: 1. 数据安全修复(v4-P1-1 ~ v4-P1-3)— 最高优先级 2. 通知机制修复(v4-P1-4 ~ v4-P1-6) 3. 可读性修复(v4-P1-7 ~ v4-P1-9) 4. 移动端修复(v4-P1-10 ~ v4-P1-11) 5. 家长端导出修复(v4-P1-12) 6. 验证:lint + tsc + 架构文档同步 --- ## 七、实施状态跟踪 ### P1(本次实施) | # | 问题 | 改进方向 | 状态 | |---|------|----------|------| | v4-P1-1 | getDiagnosticReports 无 dataScope 过滤 | 增加 dataScope 参数 | ✅ 已完成 | | v4-P1-2 | 教师学生诊断页未校验师生关系 | 增加 class_taught 校验 | ✅ 已完成 | | v4-P1-3 | 学生可见草稿报告 | 传 status: "published" | ✅ 已完成 | | v4-P1-4 | 班级报告发布不通知学生 | 新增 classId 字段 + 批量通知 | ✅ 已完成 | | v4-P1-5 | 家长未收到报告发布通知 | 查询家长 userId 批量通知 | ✅ 已完成 | | v4-P1-6 | 成绩录入无通知机制 | 录入后通知学生和家长 | ✅ 已完成 | | v4-P1-7 | 成绩列表缺少颜色编码 | 新增 ScoreCell 组件 | ✅ 已完成 | | v4-P1-8 | 热力图缺少颜色图例 | 增加图例条 | ✅ 已完成 | | v4-P1-9 | 家长页静默丢弃查询失败 | 渲染错误卡片 | ✅ 已完成 | | v4-P1-10 | 成绩列表表格移动端溢出 | 添加 overflow-x-auto | ✅ 已完成 | | v4-P1-11 | 诊断模块表格移动端溢出 | 添加 overflow-x-auto | ✅ 已完成 | | v4-P1-12 | 家长端导出按钮占位 | 接入 exportGradesAction | ✅ 已完成 | ### P2(下迭代规划) 成绩模块 22 项 + 诊断模块 20 项,共 42 项,本次不实施。 ### P3(长期,本次不实施) 成绩模块 2 项 + 诊断模块 7 项,共 9 项,记录备查。