# 成绩和学情诊断模块易用性审计报告 v3 > 审查日期:2026-06-23 > 审查范围:在 v1/v2 审计完成后,从**用户视角**对 `src/modules/grades/**`、`src/modules/diagnostic/**`、相关路由层进行易用性深度审计 > 审查目的:对比同类型 K12 系统(PowerSchool、Infinite Campus、Skyward、Alma、Gradelink、RenWeb),发现功能易用性差距并实现改进 > 审查方法:逐文件分析 44 个源文件,从教师/学生/家长/管理员四种角色视角评估每个功能的易用性 --- ## 一、v2 完成情况确认 v2 审计报告所有 P1(9 项)和 P2(10 项)改进项均已真实落地: | v2 编号 | 改进项 | 验证结果 | |---------|--------|----------| | v2-P1-1 | WidgetBoundary 应用 | ✅ 3 个页面已应用 | | v2-P1-2 | admin/school/grades/insights loading/error | ✅ 已补齐 | | v2-P1-3 | 架构 JSON 005 权限记录 | ✅ 已修正为 school:manage | | v2-P1-4 | i18n 接入 | ✅ 21 个组件全部接入 useTranslations | | v2-P1-5 | exportGradesAction 安全漏洞 | ✅ 已传递 currentUserId 和 dataScope | | v2-P1-6 | diagnostic stats-service.ts | ✅ 已抽取(352 行,12 个纯函数) | | v2-P1-7 | 热力图色块 a11y | ✅ 已添加 role="img" + aria-label | | v2-P1-8 | getKnowledgePointStats 无参调用 | ✅ 已修复 | | v2-P1-9 | updateMasteryFromSubmission 覆盖逻辑 | ✅ 已改为累积模式 | | v2-P2-1 ~ P2-10 | 10 项 P2 改进 | ✅ 全部完成 | --- ## 二、同类 K12 系统易用性对比 ### 2.1 成绩录入功能对比 | 功能 | PowerSchool | Infinite Campus | Skyward | Alma | Gradelink | RenWeb | 本系统(v2) | |------|-------------|-----------------|---------|------|-----------|--------|--------------| | 单条录入 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | 批量录入 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | **Excel 粘贴** | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | | **行内编辑** | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | | **撤销功能** | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | | **草稿自动保存** | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅(localStorage) | | **键盘导航** | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅(Enter 跳转) | | **实时统计** | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ✅ | ### 2.2 成绩查询功能对比 | 功能 | PowerSchool | Infinite Campus | Skyward | Alma | Gradelink | RenWeb | 本系统(v2) | |------|-------------|-----------------|---------|------|-----------|--------|--------------| | 学生成绩列表 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | **编辑入口** | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌(仅删除) | | 成绩趋势图 | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | | **排名显示** | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌(硬编码 0) | | **排名趋势** | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌(Action 已实现未调用) | | **班级平均对比** | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | | 导出 Excel | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ### 2.3 学情诊断功能对比 | 功能 | PowerSchool | Infinite Campus | Skyward | Alma | Gradelink | RenWeb | 本系统(v2) | |------|-------------|-----------------|---------|------|-----------|--------|--------------| | 知识点掌握度 | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ✅ | | 强弱项分析 | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ✅ | | 班级诊断 | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ✅ | | **报告发布通知** | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | | **弱项练习推荐** | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | | **报告导出** | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | | **按知识点筛选学生** | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ### 2.4 关键差距总结 对比同类系统,本系统在以下方面存在明显差距: 1. **成绩列表无编辑入口**:所有同类系统都支持在列表中直接编辑成绩,本系统仅有删除 2. **不支持 Excel 粘贴**:PowerSchool/Infinite Campus/Skyward/Gradelink 都支持从 Excel 粘贴成绩,大幅提升录入效率 3. **学生排名硬编码为 0**:所有同类系统都显示班级排名,本系统虽有 `getClassRanking` 函数但 `getStudentGradeSummary` 返回 `rank: 0` 4. **排名趋势图未接入**:`getRankingTrendAction` 已实现但学生页面未调用,浪费已有功能 5. **诊断报告发布无通知**:所有同类系统在报告发布时都会通知学生/家长,本系统仅更新状态 6. **成绩录入不触发诊断更新**:成绩变化应反映到掌握度,本系统仅 exam submission 触发 7. **无撤销功能**:Infinite Campus 支持撤销批量录入,本系统无此功能 8. **无报告导出**:所有同类系统都支持导出诊断报告,本系统无此功能 --- ## 三、v3 新发现问题 ### 3.1 P1 严重易用性问题 #### v3-P1-1 成绩列表无编辑入口 | 位置 | 问题 | 影响 | |------|------|------| | [grade-record-list.tsx](file:///e:/Desktop/CICD/src/modules/grades/components/grade-record-list.tsx) L102-112 | 仅有删除按钮,无编辑按钮 | 教师录错成绩后只能删除重录,效率极低 | | [actions.ts](file:///e:/Desktop/CICD/src/modules/grades/actions.ts) L156-188 | `updateGradeRecordAction` 已实现但前端从未调用 | 已有功能浪费 | **同类系统对比**:PowerSchool、Infinite Campus、Skyward、Alma、RenWeb 全部支持列表内编辑成绩。 **用户痛点**:教师录入 50 人成绩后发现某项分数录错,当前流程是"删除→重新打开录入页→重新填写全部字段→保存",至少 5 步操作;同类系统仅需"点击编辑→修改分数→保存"2 步。 **改进方向**:在 `grade-record-list.tsx` 增加编辑按钮,弹出 Dialog 复用 `GradeRecordForm` 的字段(标题、分数、满分、类型、学期、备注),调用 `updateGradeRecordAction`。 #### v3-P1-2 批量录入不支持 Excel 粘贴 | 位置 | 问题 | 影响 | |------|------|------| | [batch-grade-entry.tsx](file:///e:/Desktop/CICD/src/modules/grades/components/batch-grade-entry.tsx) L119-123 | `handleScoreChange` 只接受单值输入,无 paste 事件处理 | 教师无法从 Excel 粘贴一列成绩 | **同类系统对比**:PowerSchool、Infinite Campus、Skyward、Gradelink 都支持从 Excel 复制一列分数粘贴到批量录入表格。 **用户痛点**:教师常在 Excel 中整理好成绩(如按学号排序的分数列),当前需要逐个手动输入 50 人分数;同类系统支持复制 Excel 一列→粘贴到第一个输入框→自动填充所有学生。 **改进方向**:在分数输入框添加 `onPaste` 处理器,解析剪贴板文本(按行/Tab 分割),按学生顺序自动填充。 #### v3-P1-3 学生排名硬编码为 0 且排名趋势图未接入 | 位置 | 问题 | 影响 | |------|------|------| | [data-access.ts](file:///e:/Desktop/CICD/src/modules/grades/data-access.ts) L351 | `getStudentGradeSummary` 返回 `rank: 0` 硬编码 | 学生看不到自己的班级排名 | | [student/grades/page.tsx](file:///e:/Desktop/CICD/src/app/(dashboard)/student/grades/page.tsx) | 未调用 `getRankingTrendAction` | 排名趋势图功能浪费 | **同类系统对比**:PowerSchool、Infinite Campus、Skyward、Alma、Gradelink、RenWeb 全部显示学生班级排名。 **用户痛点**:学生/家长查看成绩时最关心"班级第几名",当前页面只显示平均分和记录列表,无法回答"孩子排第几"这个核心问题。 **改进方向**: 1. `getStudentGradeSummary` 调用 `getClassRanking` 计算实际排名 2. 学生页面接入 `getRankingTrendAction`,显示排名趋势图 #### v3-P1-4 诊断报告发布无通知机制 | 位置 | 问题 | 影响 | |------|------|------| | [diagnostic/actions.ts](file:///e:/Desktop/CICD/src/modules/diagnostic/actions.ts) L78-100 | `publishReportAction` 仅执行 `revalidatePath`,未触发通知 | 学生/家长不知道报告已发布 | **同类系统对比**:PowerSchool、Infinite Campus、Skyward、Alma、Gradelink、RenWeb 全部在报告发布时发送通知。 **用户痛点**:教师发布诊断报告后,学生/家长需要主动登录查看才知道有新报告,信息传递滞后;同类系统会自动推送站内通知/邮件/短信。 **改进方向**:`publishReportAction` 调用 `notifications` 模块的 `createNotification`,向学生(个人报告)或全班学生(班级报告)发送站内通知。 #### v3-P1-5 成绩录入不触发诊断掌握度更新 | 位置 | 问题 | 影响 | |------|------|------| | [diagnostic/data-access.ts](file:///e:/Desktop/CICD/src/modules/diagnostic/data-access.ts) L64-139 | `updateMasteryFromSubmission` 只从 exam submission 触发 | 手动录入的成绩不反映到掌握度 | **同类系统对比**:PowerSchool、Infinite Campus、Alma 的成绩变化会自动更新学情分析。 **用户痛点**:教师手动录入期中考试成绩后,学情诊断页面仍显示旧数据,导致诊断报告与成绩单不一致。 **改进方向**:在 `createGradeRecord` 和 `batchCreateGradeRecords` 后,若成绩关联了 examId,调用 `updateMasteryFromSubmission` 更新掌握度。 ### 3.2 P2 中等易用性问题 #### v3-P2-1 学生成绩过滤器科目使用名称而非 ID | 位置 | 问题 | |------|------| | [student/grades/page.tsx](file:///e:/Desktop/CICD/src/app/(dashboard)/student/grades/page.tsx) L49 | `r.subjectName !== subjectFilter` 按名称过滤,科目重名时会冲突 | **改进方向**:改为按 subjectId 过滤,`GradeFilters` 组件的科目选项使用 ID 作为 value。 #### v3-P2-2 成绩趋势图无班级平均对比线 | 位置 | 问题 | |------|------| | [grade-trend-card.tsx](file:///e:/Desktop/CICD/src/modules/grades/components/grade-trend-card.tsx) | 仅显示学生个人趋势,无班级平均对比 | **同类系统对比**:PowerSchool、Infinite Campus、Skyward、Alma 都支持个人 vs 班级平均对比。 **改进方向**:`GradeTrendCard` 接收 `classAverageData` prop,在趋势图中添加第二条对比线。 #### v3-P2-3 批量录入无撤销功能 | 位置 | 问题 | |------|------| | [batch-grade-entry.tsx](file:///e:/Desktop/CICD/src/modules/grades/components/batch-grade-entry.tsx) | 提交后无法撤销,录错全班成绩需要逐条删除 | **同类系统对比**:Infinite Campus 支持撤销最近一次批量录入。 **改进方向**:`batchCreateGradeRecordsAction` 返回创建的记录 ID 列表,前端缓存到 sessionStorage,提供"撤销"按钮调用批量删除。 #### v3-P2-4 诊断报告无导出功能 | 位置 | 问题 | |------|------| | diagnostic 模块 | 无导出功能,教师无法将诊断报告导出为 PDF/Excel | **同类系统对比**:所有 6 个同类系统都支持导出诊断报告。 **改进方向**:新增 `exportDiagnosticReportAction`,导出为 Excel(复用 grades/export.ts 模式)。 #### v3-P2-5 班级诊断不支持按知识点筛选学生 | 位置 | 问题 | |------|------| | [class-diagnostic-view.tsx](file:///e:/Desktop/CICD/src/modules/diagnostic/components/class-diagnostic-view.tsx) | 无法按"某知识点掌握度 < 60%"筛选学生列表 | **同类系统对比**:PowerSchool、Infinite Campus 支持按知识点筛选学生。 **改进方向**:`class-diagnostic-view.tsx` 增加知识点筛选下拉框,筛选出该知识点掌握度低于阈值的学生。 #### v3-P2-6 弱项无个性化练习推荐 | 位置 | 问题 | |------|------| | [student-diagnostic-view.tsx](file:///e:/Desktop/CICD/src/modules/diagnostic/components/student-diagnostic-view.tsx) | "Practice" 按钮无实际跳转目标 | **同类系统对比**:PowerSchool、Alma 支持基于弱项推荐练习题。 **改进方向**:`student-diagnostic-view.tsx` 的"Practice"按钮跳转到题目库,带知识点筛选参数。 #### v3-P2-7 成绩分析页无学期/考试筛选 | 位置 | 问题 | |------|------| | [teacher/grades/analytics/page.tsx](file:///e:/Desktop/CICD/src/app/(dashboard)/teacher/grades/analytics/page.tsx) | 仅有班级/科目/年级筛选,无学期和考试筛选 | **改进方向**:`AnalyticsFilters` 增加学期和考试筛选下拉框。 #### v3-P2-8 家长页面缺失趋势图 | 位置 | 问题 | |------|------| | `src/app/(dashboard)/parent/grades/page.tsx` | 仅显示成绩列表,无趋势图 | **改进方向**:家长页面复用 `GradeTrendCard` 显示子女成绩趋势。 #### v3-P2-9 管理员无全校成绩汇总视图 | 位置 | 问题 | |------|------| | `src/app/(dashboard)/admin/school/grades/insights/page.tsx` | 仅有单班级分析,无全校汇总 | **改进方向**:新增全校成绩汇总卡片(各年级平均分、及格率、优秀率对比)。 #### v3-P2-10 批量录入无服务端草稿自动保存 | 位置 | 问题 | |------|------| | [batch-grade-entry.tsx](file:///e:/Desktop/CICD/src/modules/grades/components/batch-grade-entry.tsx) L192-205 | 草稿仅保存到 localStorage,换设备丢失 | **改进方向**:新增 `saveGradeDraftAction` 和 `getGradeDraftAction`,将草稿保存到 DB。 ### 3.3 P3 长期易用性问题(记录但不本次实施) | 编号 | 问题 | 位置 | |------|------|------| | v3-P3-1 | 成绩录入无模板下载 | batch-grade-entry.tsx | | v3-P3-2 | 成绩列表无批量操作 | grade-record-list.tsx | | v3-P3-3 | 诊断报告无自定义模板 | data-access-reports.ts | | v3-P3-4 | 成绩趋势图无日期范围选择 | grade-trend-card.tsx | | v3-P3-5 | 班级对比图无显著性标记 | class-comparison-chart.tsx | | v3-P3-6 | 学生诊断无历史对比 | student-diagnostic-view.tsx | | v3-P3-7 | 成绩录入无语音输入 | batch-grade-entry.tsx | | v3-P3-8 | 诊断报告无分享功能 | report-list.tsx | --- ## 四、v3 改进优先级 ### P1(本次实施) | # | 问题 | 改进方向 | 状态 | |---|------|----------|------| | v3-P1-1 | 成绩列表无编辑入口 | 增加编辑按钮,Dialog 内编辑 | ✅ 已完成 | | v3-P1-2 | 批量录入不支持 Excel 粘贴 | 添加 onPaste 处理器 | ✅ 已完成 | | v3-P1-3 | 学生排名硬编码且趋势图未接入 | 计算实际排名 + 接入趋势图 | ✅ 已完成 | | v3-P1-4 | 诊断报告发布无通知 | 对接 notifications 模块 | ✅ 已完成 | | v3-P1-5 | 成绩录入不触发诊断更新 | 关联 examId 时触发掌握度更新 | ✅ 已完成 | ### P2(本次实施) | # | 问题 | 改进方向 | 状态 | |---|------|----------|------| | v3-P2-1 | 科目过滤器用名称 | 改用 subjectId | ✅ 已完成 | | v3-P2-2 | 趋势图无班级对比 | 添加班级平均对比线 | ✅ 已完成 | | v3-P2-3 | 批量录入无撤销 | 返回 ID 列表 + 撤销按钮 | ✅ 已完成 | | v3-P2-4 | 诊断报告无导出 | 新增 exportDiagnosticReportAction | ✅ 已完成 | | v3-P2-5 | 班级诊断无知识点筛选 | 增加知识点筛选下拉框 | ✅ 已完成 | | v3-P2-6 | 弱项无练习推荐 | Practice 按钮跳转题目库 | ✅ 已完成 | | v3-P2-7 | 分析页无学期/考试筛选 | AnalyticsFilters 增加筛选 | ✅ 已完成 | | v3-P2-8 | 家长页面无趋势图 | 复用 GradeTrendCard | ✅ 已完成 | | v3-P2-9 | 管理员无全校汇总 | 新增全校汇总卡片 | ✅ 已完成 | | v3-P2-10 | 草稿仅本地 | 新增服务端草稿保存 | ✅ 已完成 | ### P3(长期,本次不实施) v3-P3-1 ~ v3-P3-8 共 8 项长期易用性改进,记录备查,后续迭代处理。 --- ## 五、实施计划 实施顺序: 1. P1 易用性核心修复(v3-P1-1 ~ v3-P1-5) 2. P2 易用性增强(v3-P2-1 ~ v3-P2-10) 3. 验证:lint + tsc + 架构文档同步