` 模式(dashboard 页面已使用) | 同上 |
+
+#### P2 修复(3/23)
+
+| # | 问题 | 修复方式 | 涉及文件 |
+|---|------|----------|----------|
+| 3.7 | 作业列表无科目颜色标识 | 添加基于科目名哈希的稳定颜色映射(10 色),科目标题前显示彩色圆点+数量 | `student/learning/assignments/page.tsx` |
+| 3.8 | 作业列表不显示"已过期但未提交" | AssignmentCard 显示 TriangleAlert 图标 + "Overdue" 红色徽章 | `student/learning/assignments/page.tsx` |
+| 7.1 | 课表无当前时间高亮 | 今日卡片添加 `border-primary ring-1 ring-primary/30` 高亮 + "Today" 徽章 | `student/components/student-schedule-view.tsx` |
+
+### 保留/后续迭代(32 项)
+
+#### P1 保留(2 项)
+
+| # | 问题 | 原因 |
+|---|------|------|
+| 4.2 | 缺少班级详情页 | 需要新建路由页面+数据访问函数,属于功能新增,建议产品评审后纳入迭代 |
+| 12.1 | 缺少学习目标/计划功能 | 属于新功能模块,需要产品定义目标模型和进度展示逻辑 |
+
+#### P2 保留(20 项)
+
+- 1.4 通知中心、2.4 未读消息摘要、2.5 当前进行课程高亮、3.2 作业分页、3.6 断网恢复、4.4 课程搜索、5.2 成绩趋势图、5.3 成绩分页、6.2 考勤日历视图、7.2 课表周次切换、8.1 教材阅读进度、9.2 诊断报告历史、9.3 弱项去练习、10.2 选课搜索、10.3 选课结果通知、11.3 全屏页面 overflow、12.2 同伴学习、12.3 家长反馈通道 等
+
+#### P3 保留(10 项)
+
+- 1.5 Breadcrumb 根节点、2.6 学习时长统计、3.9 题目导航跳转、3.10 答案对比、5.4 排名显示、7.3 课表点击跳转、8.2 书签、8.3 笔记、10.4 课程详情、12.4 移动端优化
+
+### 验证结果
+
+#### TypeScript 类型检查
+
+```bash
+npx tsc --noEmit
+```
+
+结果:**0 错误**(exit code 0)
+
+#### ESLint 检查
+
+```bash
+npm run lint
+```
+
+结果:**本次修改文件 0 错误 0 警告**。报告中出现的 6 errors + 5 warnings 均为预存在问题,分布于:
+- `attendance/components/attendance-sheet.tsx`(1 warning,useEffect 依赖)
+- `grades/components/batch-grade-entry.tsx`(1 warning,未使用的 eslint-disable)
+- `homework/data-access-write.ts`(3 warnings,未使用参数)
+- `tests/webapp/debug_drizzle.js`(6 errors,require 导入)
+
+以上文件均不在本次 v4 修复范围内。
+
+### 架构文档同步
+
+本次修复未涉及导出函数、组件签名、权限点、数据库表、路由结构、模块依赖的变更,仅涉及:
+- 页面容器 className 调整(不影响架构)
+- 组件内部 UI 增强(AlertDialog、颜色标识、高亮)
+- 新建页面 `student/learning/page.tsx`(已在 v4 修复过程中创建,路由已存在)
+
+因此无需更新 004/005 架构文档。
+
+### 修改文件清单
+
+**新建文件(3 个)**:
+1. `src/app/(dashboard)/student/learning/page.tsx` — Learning 聚合页
+2. `src/modules/homework/components/assignment-filters.tsx` — 作业筛选器
+3. `src/modules/grades/components/grade-filters.tsx` — 成绩筛选器
+
+**修改文件(16 个)**:
+1. `src/app/(dashboard)/student/dashboard/page.tsx`
+2. `src/app/(dashboard)/student/grades/page.tsx`
+3. `src/app/(dashboard)/student/learning/assignments/page.tsx`
+4. `src/app/(dashboard)/student/learning/assignments/[assignmentId]/page.tsx`
+5. `src/app/(dashboard)/student/learning/courses/page.tsx`
+6. `src/app/(dashboard)/student/learning/textbooks/page.tsx`
+7. `src/app/(dashboard)/student/learning/textbooks/[id]/page.tsx`
+8. `src/app/(dashboard)/student/schedule/page.tsx`
+9. `src/app/(dashboard)/student/attendance/page.tsx`
+10. `src/app/(dashboard)/student/elective/page.tsx`
+11. `src/app/(dashboard)/student/diagnostic/page.tsx`
+12. `src/app/(dashboard)/student/learning/courses/loading.tsx`
+13. `src/app/(dashboard)/student/schedule/loading.tsx`
+14. `src/app/(dashboard)/student/learning/textbooks/[id]/loading.tsx`
+15. `src/modules/homework/components/homework-take-view.tsx`
+16. `src/modules/student/components/student-courses-view.tsx`
+17. `src/modules/student/components/student-schedule-view.tsx`
+18. `src/modules/elective/components/student-selection-view.tsx`
+19. `src/modules/diagnostic/components/student-diagnostic-view.tsx`
+20. `src/modules/dashboard/components/student-dashboard/student-dashboard-header.tsx`
+21. `src/modules/dashboard/components/student-dashboard/student-stats-grid.tsx`
+22. `src/modules/dashboard/components/student-dashboard/student-grades-card.tsx`
+23. `src/modules/dashboard/components/student-dashboard/student-today-schedule-card.tsx`
+24. `src/shared/components/charts/chart-card-shell.tsx`
+25. `src/app/api/search/route.ts`
+
+### v4 修复总结
+
+本次修复聚焦于 P0 功能断裂和 P1 体验问题,共完成 19 项修复(3 P0 + 13 P1 + 3 P2):
+- **功能完整性**:修复作业作答页面的虚假文案、缺失的离开警告、提交确认和返回导航
+- **信息架构**:修复导航死链、Dashboard 标题重复、Stats Grid 链接错误
+- **筛选能力**:为作业列表和成绩页面添加搜索+筛选
+- **安全防护**:添加退课二次确认、作业提交二次确认、作答离开警告
+- **权限控制**:全局搜索按角色过滤,学生不可搜索题目/考试
+- **视觉体验**:课表今日高亮、作业科目颜色标识、过期作业警告
+- **布局一致性**:统一所有学生页面的容器 className,消除双重 padding
+
+剩余 32 项(2 P1 + 20 P2 + 10 P3)多为新功能模块或产品决策类问题,建议纳入后续产品迭代。
diff --git a/bugs/teacher_bug_v4.md b/bugs/teacher_bug_v4.md
new file mode 100644
index 0000000..d367d45
--- /dev/null
+++ b/bugs/teacher_bug_v4.md
@@ -0,0 +1,525 @@
+# `src/app/(dashboard)/teacher` 产品体验与功能审查报告 v4
+
+> 核查日期:2026-06-20(第四轮·产品/UX 视角)
+> 核查范围:`src/app/(dashboard)/teacher/` 全部功能模块的页面布局、交互流程、信息架构、用户习惯契合度
+> 对标产品:Canvas LMS、PowerSchool、钉钉教育版、企业微信教育版、ClassIn、晓黑板、希沃白板
+> 对比基准:[v1](./teacher_bug.md)、[v2](./teacher_bug_v2.md)、[v3](./teacher_bug_v3.md)(前三轮聚焦代码规范,本轮聚焦产品体验)
+> 应用技能:`web-design-guidelines`(Web 界面规范)、`web-artifacts-builder`(界面优化)
+
+---
+
+## 一、审查维度与方法
+
+本轮审查跳出代码规范层面,从**教师用户真实使用场景**出发,按以下维度评估:
+
+| 维度 | 评估要点 |
+|------|----------|
+| 信息架构 | 导航结构、功能分组、入口路径是否合理 |
+| 核心流程 | 高频任务(布置作业/批改/录分/考勤)的操作步数与心智负担 |
+| 数据呈现 | 列表/详情/统计的信息密度、可读性、可操作性 |
+| 反馈机制 | 操作后反馈、状态变化、错误恢复 |
+| 移动适配 | 教师移动端使用场景支持 |
+| 对标差距 | 与主流 LMS 产品的功能缺失与体验差距 |
+
+---
+
+## 二、信息架构问题
+
+### 2.1 【P0·严重】导航项过多且分组混乱,违背教师工作流
+
+**位置**:[navigation.ts](../src/modules/layout/config/navigation.ts#L108-L232) teacher 导航配置
+
+**问题**:teacher 侧边栏共有 **17 个一级导航项**(Dashboard / Textbooks / Exams / Homework / Grades / Question Bank / Class Management / Course Plans / Lesson Plans / Attendance / Schedule Changes / Diagnostic / Electives / Management / Announcements / Messages),远超人脑短时记忆容量(7±2)。
+
+**对标分析**:
+- Canvas:6 个主入口(Dashboard / Courses / Calendar / Inbox / History / Account)
+- 钉钉教育:5 个主入口(消息 / 工作 / 通讯录 / 日程 / 我的)
+- PowerSchool:7 个主入口(Start Page / Classes / Students / Reports / Setup / System / District)
+
+**具体缺陷**:
+1. `Textbooks` 与 `Lesson Plans` 与 `Course Plans` 三个备课相关功能分散在不同位置,教师备课需要在三个入口间切换
+2. `Schedule Changes`(调课申请)与 `Class Management > Schedule`(课表查看)功能相关却分属不同一级入口
+3. `Management`(年级管理)入口对普通教师而言语义模糊,且其子项 `Grade Classes` / `Grade Insights` 实际是年级主任功能
+4. `Electives`(选修课)对非选修课教师是噪音,应按需显示
+
+**建议**:
+- 将导航项收敛到 8 个以内:Dashboard / 教学(含备课+教材+课程计划)/ 作业考试 / 成绩 / 考勤 / 班级 / 诊断 / 消息
+- `Schedule Changes` 合并到 `Class Management` 子菜单
+- `Electives` / `Management` 按角色权限动态显示,非默认可见
+- `Textbooks` / `Lesson Plans` / `Course Plans` 合并为「教学资源」折叠组
+
+### 2.2 【P1·重要】Exams 与 Homework 模块割裂,违背「出题-下发-批改」一体化心智
+
+**位置**:[exams/page.tsx](../src/app/(dashboard)/teacher/exams/page.tsx) redirect 到 `exams/all`;[homework/page.tsx](../src/app/(dashboard)/teacher/homework/page.tsx) redirect 到 `homework/assignments`
+
+**问题**:
+- 教师创建 Exam 后,需要手动跳到 Homework 模块才能下发为作业
+- `exams/grading` redirect 到 `homework/submissions`,说明系统已意识到两者关联,但仍保留两个独立入口
+- 作业详情页 [homework/assignments/[id]/page.tsx](../src/app/(dashboard)/teacher/homework/assignments/[id]/page.tsx) 显示「Source Exam」字段,但无法反向跳转到原 Exam
+
+**对标分析**:Canvas 的「Assignments」统一管理作业(可关联 Quiz),教师在一个列表里完成创建/下发/批改,无需在两个模块间跳转。
+
+**建议**:
+- 在 Exam 详情页增加「下发为作业」按钮,直接跳转到 `homework/assignments/create?examId=xxx`
+- 在 Homework 列表的「Source Exam」列增加链接,点击跳回 Exam 详情
+- 长期考虑合并为「作业考试」一级入口,子菜单区分类型
+
+### 2.3 【P1·重要】Dashboard 缺少「待办聚合」,教师需多入口查找待处理事项
+
+**位置**:[teacher-dashboard-view.tsx](../src/modules/dashboard/components/teacher-dashboard/teacher-dashboard-view.tsx)
+
+**问题**:Dashboard 展示了 4 个统计卡片 + 成绩趋势 + 待批改 + 今日课表 + 作业 + 班级,但**没有统一的「今日待办」列表**。教师需要:
+- 去 `homework/submissions` 看待批改
+- 去 `attendance/sheet` 看今天是否要考勤
+- 去 `schedule-changes` 看调课申请是否被批准
+- 去 `grades/entry` 看是否要录成绩
+
+**对标分析**:
+- Canvas Dashboard 顶部有「To Do」侧栏,聚合所有待办(待批改/待提交/待评分)
+- 钉钉教育首页有「待办」卡片,按紧急程度排序
+
+**建议**:在 Dashboard 左栏顶部增加「今日待办」卡片,聚合:
+- 待批改作业(N 份)→ 点击跳转
+- 今日待考勤班级(N 个)→ 点击跳转
+- 待处理调课申请(N 条)
+- 近 3 天到期的作业未提交学生提醒
+
+---
+
+## 三、核心流程问题
+
+### 3.1 【P0·严重】作业创建流程强制依赖 Exam,无法独立出题
+
+**位置**:[homework/assignments/create/page.tsx](../src/app/(dashboard)/teacher/homework/assignments/create/page.tsx) + [homework-assignment-form.tsx](../src/modules/homework/components/homework-assignment-form.tsx)
+
+**问题**:创建作业的表单**必须选择一个已存在的 Exam** 作为来源(`sourceExamId` 必填),如果没有 Exam 则直接显示空状态「No exams available - Create an exam first」。这意味着教师布置一次日常作业的流程是:
+1. 去 Question Bank 建题
+2. 去 Exams 创建考试
+3. 去 Homework 创建作业(关联 Exam)
+4. 等待学生提交
+5. 去 Homework Submissions 批改
+
+**5 步才能布置一次作业,严重违背教师工作习惯**。日常作业(如抄写、阅读、小测验)根本不需要走「考试」流程。
+
+**对标分析**:
+- 钉钉教育:教师直接在「作业」里发文本/图片/文件即可,1 步完成
+- Canvas:Assignment 可独立创建,关联 Quiz 是可选的
+- 晓黑板:支持快速发布口头作业/书面作业/打卡作业
+
+**建议**:
+- 支持两种作业创建模式:「快速作业」(直接输入标题+描述+附件,不走 Exam)和「考试派生作业」(现有流程)
+- 快速作业模式允许教师直接粘贴题目文本或上传图片
+
+### 3.2 【P0·严重】考勤批量录入缺少快捷操作,逐人下拉选择效率极低
+
+**位置**:[attendance-sheet.tsx](../src/modules/attendance/components/attendance-sheet.tsx#L178-L208)
+
+**问题**:考勤表每个学生一行,每行一个 Select 下拉框选状态。一个 40 人的班级要点 40 次下拉框。虽然有「Mark All Present」按钮,但实际场景中教师通常需要标记 2-3 个缺席/迟到学生,现状是:
+- 点「Mark All Present」→ 再逐个改 2-3 个异常学生
+- 或者逐个选 40 次
+
+**对标分析**:
+- 钉钉教育:支持「一键全部到齐」+ 点击学生头像快速切换状态(弹出 5 个状态按钮)
+- ClassIn:支持快捷键(P=Present, A=Absent, L=Late)+ 批量框选
+
+**建议**:
+- 每个学生行改为 5 个状态按钮组(单选),一键点击切换,无需下拉
+- 支持键盘快捷键:P/A/L/E/X
+- 默认全部 Present,教师只需点击异常学生
+- 支持搜索学生姓名快速定位
+
+### 3.3 【P0·严重】成绩批量录入无校验、无快捷键、无保存草稿
+
+**位置**:[batch-grade-entry.tsx](../src/modules/grades/components/batch-grade-entry.tsx)
+
+**问题**:
+1. **无分数范围校验**:Input 接受任意数字,教师可能输入 150 分(满分 100)或负数,只在提交后才报错
+2. **无 Tab 键跳转**:输入完一个学生分数后,Tab 键应自动跳到下一个输入框,现状未验证是否支持
+3. **无草稿保存**:40 个学生分数输入到一半,刷新页面全部丢失
+4. **无 Excel 粘贴**:教师常在 Excel 里整理好分数,希望直接粘贴整列
+5. **无平均分/最高分实时统计**:输入过程中看不到班级整体情况
+
+**对标分析**:
+- PowerSchool Gradebook:支持 Tab 跳转、自动保存、分数范围校验、Excel 粘贴
+- Canvas SpeedGrader:支持键盘快捷键批量评分
+
+**建议**:
+- 输入框 `min={0} max={maxScore}` + `onBlur` 校验
+- 支持 Tab 键自动跳转下一行
+- 每 30 秒自动保存草稿到 localStorage
+- 支持从 Excel 粘贴一列分数
+- 顶部实时显示「已录入 N/M,平均 X 分,最高 Y 分」
+
+### 3.4 【P1·重要】批改作业缺少「下一位」快捷跳转,需返回列表再进入
+
+**位置**:[homework/submissions/[submissionId]/page.tsx](../src/app/(dashboard)/teacher/homework/submissions/[submissionId]/page.tsx)
+
+**问题**:批改页面虽然传入了 `prevSubmissionId` / `nextSubmissionId`,但需确认 `HomeworkGradingView` 组件是否渲染了「下一位」按钮。即使有,批改完一个学生后需要:保存 → 点击「下一位」→ 等待加载。40 个学生要重复 40 次。
+
+**对标分析**:Canvas SpeedGrader 批改时,右侧栏可快速切换学生,分数自动保存,支持键盘 `[` / `]` 切换。
+
+**建议**:
+- 批改界面右侧增加学生列表抽屉,可快速跳转
+- 保存分数后自动跳到下一位未批改的学生
+- 支持键盘快捷键切换学生
+
+---
+
+## 四、数据呈现问题
+
+### 4.1 【P1·重要】列表页普遍缺少分页,数据量大时性能与体验双降
+
+**位置**:
+- [questions/page.tsx#L44](../src/app/(dashboard)/teacher/questions/page.tsx) `pageSize: 200` 硬编码 200 条
+- [homework/assignments/page.tsx](../src/app/(dashboard)/teacher/homework/assignments/page.tsx) 无分页
+- [homework/submissions/page.tsx](../src/app/(dashboard)/teacher/homework/submissions/page.tsx) 无分页
+- [attendance/page.tsx](../src/app/(dashboard)/teacher/attendance/page.tsx) 无分页
+- [grades/page.tsx](../src/app/(dashboard)/teacher/grades/page.tsx) 无分页
+
+**问题**:题库硬编码 200 条,作业/提交/考勤/成绩列表均无分页。教师使用 1 年后,作业列表可能有几百条,成绩记录可能上千条,一次性渲染会导致:
+- 首屏加载慢(>2s)
+- DOM 节点过多导致滚动卡顿
+- 无法快速定位历史数据
+
+**对标分析**:Canvas 所有列表均分页(10/20/50 条/页),支持排序与搜索。
+
+**建议**:
+- 统一引入分页组件(10/20/50 条/页可选)
+- 题库改为无限滚动或分页
+- 列表默认按时间倒序,支持按状态/班级/日期范围筛选
+
+### 4.2 【P1·重要】列表筛选条件不持久化,刷新即丢失
+
+**位置**:所有使用 `searchParams` 的列表页
+
+**问题**:筛选条件通过 URL searchParams 传递(这是正确做法),但:
+- 教师点击列表中的「查看详情」再返回,浏览器 back 能保留筛选(✅)
+- 但点击侧边栏导航再回来,筛选丢失(❌)
+- 教师切换标签页再回来,无法恢复上次筛选
+
+**建议**:
+- 将筛选条件同步到 sessionStorage,2 小时内有效
+- 或在列表页顶部增加「最近筛选」快捷标签
+
+### 4.3 【P1·重要】作业列表缺少关键列:提交率、平均分、是否逾期
+
+**位置**:[homework/assignments/page.tsx#L85-L92](../src/app/(dashboard)/teacher/homework/assignments/page.tsx)
+
+**问题**:当前列表只有 5 列:Title / Status / Due / Source Exam / Created。教师最关心的「提交率(已交/应交)」「平均分」「是否有学生逾期未交」都没有展示。
+
+**对比**:`homework/submissions/page.tsx` 的列表反而有 Targets / Submitted / Graded 三列,两个列表信息维度不一致。
+
+**建议**:作业列表增加列:
+- 提交率(Submitted/Targets,带进度条)
+- 平均分(已批改的均分)
+- 逾期人数(红色徽标)
+- 操作列(查看详情 / 提醒未交学生)
+
+### 4.4 【P1·重要】成绩统计页默认无数据引导,教师不知如何开始
+
+**位置**:[grades/stats/page.tsx](../src/app/(dashboard)/teacher/grades/stats/page.tsx)
+
+**问题**:页面默认选择第一个班级,但如果该班级没有成绩记录,`ClassGradeReport` 组件显示什么?没有空状态引导。教师看到空白图表会困惑。
+
+**建议**:无数据时显示「该班级暂无成绩记录,去录入成绩」的引导卡片。
+
+### 4.5 【P2·次要】日期格式不统一,部分页面用英文全称
+
+**位置**:
+- [teacher-dashboard-header.tsx#L8-L13](../src/modules/dashboard/components/teacher-dashboard/teacher-dashboard-header.tsx) `toLocaleDateString("en-US", { weekday: "long", ... })` 显示「Monday, June 20, 2026」
+- 其他页面用 `formatDate()` 工具函数
+
+**问题**:Dashboard 顶部显示长英文日期,但项目面向中文用户(从 lesson-plans 页面用中文「我的备课」可见)。日期格式应本地化为「2026年6月20日 周一」。
+
+**建议**:统一使用 `toLocaleDateString("zh-CN", ...)` 或自定义中文格式。
+
+---
+
+## 五、交互细节问题
+
+### 5.1 【P1·重要】空状态 CTA 按钮全部是「主按钮」,视觉噪音过大
+
+**位置**:[empty-state.tsx#L46-L54](../src/shared/components/ui/empty-state.tsx)
+
+**问题**:所有空状态都渲染一个 `variant="default"` 的主按钮(实心蓝色)。当列表上方已有多个主按钮时,空状态再放一个主按钮,视觉焦点混乱。
+
+**建议**:
+- 空状态 CTA 默认用 `variant="outline"`
+- 仅在「无任何数据」的首次引导场景用主按钮
+- 「筛选无结果」场景不显示 CTA,只显示「清除筛选」次级链接
+
+### 5.2 【P1·重要】表单提交后无 loading 遮罩,可能重复提交
+
+**位置**:[attendance-sheet.tsx](../src/modules/attendance/components/attendance-sheet.tsx)、[batch-grade-entry.tsx](../src/modules/grades/components/batch-grade-entry.tsx)、[homework-assignment-form.tsx](../src/modules/homework/components/homework-assignment-form.tsx)
+
+**问题**:虽然 `SubmitButton` 有 `disabled={pending}`,但整个表单没有遮罩,教师仍可修改输入框内容。批量录入 40 人考勤时,提交过程中误触输入框可能导致数据不一致。
+
+**建议**:提交期间在表单区域覆盖半透明 loading 遮罩。
+
+### 5.3 【P1·重要】考勤/成绩录入切换班级后输入的数据丢失
+
+**位置**:[attendance-sheet.tsx#L71](../src/modules/attendance/components/attendance-sheet.tsx) `const [classId, setClassId] = useState(...)`
+
+**问题**:教师在 A 班录了一半考勤,切换到 B 班查看,`statuses` state 保留但学生列表变了,A 班的数据可能被 B 班学生覆盖。成绩录入同理。
+
+**建议**:
+- 切换班级前弹确认框「当前班级有未保存的考勤记录,确认切换?」
+- 或为每个班级缓存独立的 statuses/scores
+
+### 5.4 【P2·次要】详情页返回路径不一致
+
+**位置**:
+- [textbooks/[id]/page.tsx](../src/app/(dashboard)/teacher/textbooks/[id]/page.tsx) 用 `ArrowLeft` 图标按钮
+- [grades/analytics/page.tsx](../src/app/(dashboard)/teacher/grades/analytics/page.tsx) 用「Back to Grades」文字按钮
+- [homework/assignments/[id]/page.tsx](../src/app/(dashboard)/teacher/homework/assignments/[id]/page.tsx) 用面包屑「< Assignments / Details」
+- [course-plans/[id]/page.tsx](../src/app/(dashboard)/teacher/course-plans/[id]/page.tsx) 无返回按钮(依赖浏览器 back)
+
+**问题**:4 种不同的返回交互模式,教师无法形成肌肉记忆。
+
+**建议**:统一为面包屑 + 浏览器 back 支持,或统一为左上角 ArrowLeft 按钮。
+
+### 5.5 【P2·次要】Dashboard 问候语固定为「Good morning」
+
+**位置**:[teacher-dashboard-header.tsx#L18](../src/modules/dashboard/components/teacher-dashboard/teacher-dashboard-header.tsx)
+
+**问题**:`Good morning, {teacherName}` 硬编码 morning,不根据当前时间切换。下午访问显示「Good morning」很突兀。
+
+**建议**:根据 `new Date().getHours()` 动态切换:上午 Good morning / 下午 Good afternoon / 晚上 Good evening。中文版可用「早上好/下午好/晚上好」。
+
+---
+
+## 六、移动端适配问题
+
+### 6.1 【P1·重要】表格在移动端横向溢出,无优化方案
+
+**位置**:所有使用 `
` 组件的页面(作业列表、提交列表、学生列表、成绩列表、考勤记录列表、题库列表)
+
+**问题**:Table 组件在窄屏下会出现横向滚动条,但:
+- 滚动条不明显,教师可能不知道可以横滑
+- 关键操作列(如「Grade」按钮)可能被滚出视口
+- 表头不固定,滚动后看不到列名
+
+**对标分析**:Canvas 移动端将表格转为卡片列表,每条记录一张卡片。
+
+**建议**:
+- 窄屏(<768px)将表格转为卡片布局
+- 或至少固定表头 + 首列
+- 操作列固定在右侧
+
+### 6.2 【P1·重要】考勤/成绩批量录入在移动端几乎不可用
+
+**位置**:[attendance-sheet.tsx](../src/modules/attendance/components/attendance-sheet.tsx)、[batch-grade-entry.tsx](../src/modules/grades/components/batch-grade-entry.tsx)
+
+**问题**:40 行表格 + 每行一个 Select/Input,在手机上需要大量滚动和点击。教师移动端巡课时无法快速考勤。
+
+**建议**:
+- 移动端考勤改为「学生头像网格」,点击头像切换状态
+- 移动端成绩录入改为「逐个学生卡片」模式,滑动切换下一位
+
+### 6.3 【P2·次要】Dashboard 双栏布局在移动端堆叠顺序不合理
+
+**位置**:[teacher-dashboard-view.tsx#L65-L81](../src/modules/dashboard/components/teacher-dashboard/teacher-dashboard-view.tsx)
+
+**问题**:左栏(成绩趋势 + 待批改)在移动端会显示在右栏(今日课表 + 作业 + 班级)之前。但教师移动端最关心的是「下一节课是什么」和「待批改多少」,成绩趋势优先级应降低。
+
+**建议**:移动端顺序调整为:今日课表 → 待批改 → 作业 → 班级 → 成绩趋势。
+
+---
+
+## 七、对标产品的功能缺失
+
+### 7.1 【P0·严重】缺少「通知/提醒」机制
+
+**缺失场景**:
+- 学生提交作业后,教师无实时通知(需主动刷新 Dashboard)
+- 作业即将到期,教师无法一键提醒未提交学生
+- 调课申请被批准/拒绝,教师无通知
+- 成绩录入后,无通知家长/学生的入口
+
+**对标分析**:
+- Canvas:站内消息 + 邮件通知 + 移动端推送
+- 钉钉教育:Ding 一下强提醒学生
+- 晓黑板:自动通知家长
+
+**建议**:
+- 站内消息中心已有 `/messages` 入口,但未与业务事件联动
+- 作业详情页增加「提醒未提交学生」按钮(发站内信)
+- 关键状态变更(调课审批、作业提交)触发站内通知
+
+### 7.2 【P0·严重】缺少「作业模板/复用」功能
+
+**缺失场景**:教师每周布置类似作业(如「背诵第 N 课课文」),每次都要重新创建。
+
+**对标分析**:Canvas 支持作业模板 + 一键复制历史作业。
+
+**建议**:
+- 作业列表增加「复制」操作
+- 支持保存为模板,下次创建时可选「从模板创建」
+
+### 7.3 【P1·重要】缺少「学生画像」聚合页
+
+**缺失场景**:教师想了解某个学生的整体情况(成绩趋势 + 考勤率 + 作业提交率 + 知识点掌握),需要分别去 Grades / Attendance / Homework / Diagnostic 四个模块查询。
+
+**对标分析**:Canvas 的 Student Context Card 在一处展示学生的所有信息。
+
+**建议**:在 `classes/students` 列表点击学生姓名,打开学生画像页,聚合:
+- 基本信息卡片
+- 成绩趋势图
+- 考勤统计
+- 作业提交率
+- 知识点掌握雷达图
+- 历史评语
+
+### 7.4 【P1·重要】缺少「班级对比」功能
+
+**缺失场景**:教师同时教 4 个班,想对比哪个班掌握得差,需要逐个切换班级查看统计。
+
+**现状**:`grades/analytics` 有 `ClassComparisonChart`,但需要选择年级(gradeId),而非教师自己的班级对比。
+
+**建议**:在 `grades/analytics` 增加「我的班级对比」模式,默认对比教师所教的所有班级。
+
+### 7.5 【P1·重要】缺少「导出报告」的完整体系
+
+**现状**:
+- `grades/page.tsx` 有 `ExportButton`(导出成绩)
+- `grades/stats/page.tsx` 有 `ExportButton`(导出统计)
+- 其他页面无导出功能
+
+**缺失**:
+- 考勤统计无法导出
+- 作业提交情况无法导出
+- 学生诊断报告无法导出
+- 班级学情报告无法导出 PDF
+
+**建议**:统一导出能力,支持 Excel + PDF 两种格式。
+
+### 7.6 【P2·次要】缺少「评语库」功能
+
+**缺失场景**:批改作业时写评语,教师常重复输入「做得好」「请认真订正」等。
+
+**对标分析**:Canvas SpeedGrader 支持保存评语库,一键插入。
+
+**建议**:批改界面的评语输入框增加「从评语库选择」按钮。
+
+---
+
+## 八、可访问性与国际化
+
+### 8.1 【P1·重要】中英文混杂严重,违背用户预期
+
+**位置**:全模块
+
+**问题**:
+- 导航项全英文(Dashboard / Textbooks / Exams...)
+- `lesson-plans/page.tsx` 用中文(「我的备课」「新建课案」)
+- `proctoring/page.tsx` 权限提示用中文(「您没有监考权限」)
+- `grades/stats/page.tsx` 导出按钮用中文(「导出成绩」)
+- 空状态文案全英文(「No assignments」「You haven't created any assignments yet.」)
+
+**影响**:中文教师用户看到混杂的中英文会感到不专业,且无法形成统一的语言心智。
+
+**建议**:
+- 确定产品语言策略:全中文 or 全英文 or 双语切换
+- 若面向中国 K12 市场,建议全中文(含导航、按钮、空状态、日期格式)
+- 引入 i18n 框架(如 next-intl)支持未来多语言
+
+### 8.2 【P2·次要】Dashboard 问候语未本地化
+
+见 5.5 节,`Good morning` 应改为「早上好」。
+
+---
+
+## 九、问题汇总与优先级
+
+### 9.1 按严重程度分布
+
+| 级别 | 数量 | 说明 |
+|------|------|------|
+| P0(严重,阻断核心流程) | 6 | 导航混乱、作业创建强制依赖Exam、考勤录入低效、成绩录入无校验、缺通知机制、缺作业模板 |
+| P1(重要,影响体验与效率) | 14 | 模块割裂、Dashboard无待办、列表无分页、筛选不持久、移动端表格溢出、缺学生画像等 |
+| P2(次要,优化项) | 6 | 日期格式、返回路径、问候语、移动端堆叠顺序、评语库等 |
+| **合计** | **26** | |
+
+### 9.2 按模块分布
+
+| 模块 | 问题数 | 主要问题 |
+|------|--------|----------|
+| 全局导航 | 3 | 导航项过多、分组混乱、Exams/Homework割裂 |
+| Dashboard | 3 | 无待办聚合、问候语硬编码、移动端堆叠顺序 |
+| 作业/考试 | 5 | 强制依赖Exam、无模板复用、列表缺关键列、无分页、无通知 |
+| 成绩 | 4 | 录入无校验/草稿/粘贴、统计无空状态引导、导出不完整 |
+| 考勤 | 3 | 录入低效、切换班级丢数据、移动端不可用 |
+| 班级/学生 | 2 | 缺学生画像、缺班级对比 |
+| 列表通用 | 3 | 无分页、筛选不持久、空状态CTA过重 |
+| 移动端 | 3 | 表格溢出、批量录入不可用、堆叠顺序 |
+| 国际化 | 2 | 中英文混杂、问候语未本地化 |
+
+---
+
+## 十、改进路线建议
+
+### 10.1 第一阶段(P0 修复,1-2 周)
+
+1. **导航重构**:收敛到 8 个一级入口,合并备课相关功能
+2. **作业创建解耦**:支持「快速作业」模式,不强制依赖 Exam
+3. **考勤录入优化**:改为状态按钮组 + 默认全到 + 快捷键
+4. **成绩录入加固**:分数校验 + 草稿保存 + Tab 跳转
+5. **通知机制 MVP**:作业提交触发站内通知
+
+### 10.2 第二阶段(P1 修复,2-4 周)
+
+1. **Dashboard 待办聚合**:统一待办卡片
+2. **列表分页**:统一分页组件
+3. **学生画像页**:聚合成绩/考勤/作业/诊断
+4. **移动端表格优化**:卡片布局
+5. **作业列表补列**:提交率/平均分/逾期
+6. **语言统一**:全中文或引入 i18n
+
+### 10.3 第三阶段(P2 优化,4-6 周)
+
+1. **作业模板/复用**
+2. **评语库**
+3. **导出体系完善**
+4. **班级对比模式**
+5. **返回路径统一**
+6. **日期格式本地化**
+
+---
+
+## 十一、与 v1-v3 的关系
+
+| 轮次 | 视角 | 问题数 | 修复率 |
+|------|------|--------|--------|
+| v1 | 代码规范 | 64 | 1.6% |
+| v2 | 代码规范(复审) | 74 | 1.6% |
+| v3 | 代码规范(终审) | 74 | 100% |
+| **v4** | **产品/UX** | **26** | **0%(待规划)** |
+
+v1-v3 解决了「代码是否符合规范」的问题,v4 发现的是「产品是否符合用户习惯」的问题。两者互补:代码规范是底线,产品体验是上限。建议在 v3 代码规范已闭环的基础上,按 v4 路线图推进产品体验升级。
+
+---
+
+## 十二、核查结论
+
+### 12.1 核心优势(保持)
+
+1. ✅ **架构合规**:三层架构清晰,数据访问通过 data-access 层
+2. ✅ **权限完备**:每个页面有权限校验,DataScope 数据范围控制
+3. ✅ **性能基础**:Promise.all 并行查询,force-dynamic 声明
+4. ✅ **空状态覆盖**:所有列表页有 EmptyState 引导
+5. ✅ **Suspense 流式加载**:exams/questions/textbooks 等页面有骨架屏
+
+### 12.2 核心缺陷(待改进)
+
+1. ❌ **导航信息过载**:17 个一级入口远超同类产品(Canvas 6 个)
+2. ❌ **作业流程断裂**:强制依赖 Exam,5 步才能布置作业
+3. ❌ **批量录入低效**:考勤逐人下拉、成绩无校验无草稿
+4. ❌ **列表无分页**:数据量增长后性能与体验双降
+5. ❌ **缺通知机制**:教师需主动刷新发现待办
+6. ❌ **中英文混杂**:面向中文用户却用英文 UI
+
+### 12.3 总体评价
+
+当前 teacher 模块在**代码工程质量**上已达到企业级标准(v3 100% 通过),但在**产品体验**上与主流 LMS(Canvas/钉钉教育)仍有明显差距。核心差距不在技术实现,而在**对教师真实工作流的理解**:系统按「数据模型」组织功能(Exam/Homework/Grade 分表),而非按「教师任务」组织(布置作业/批改/反馈)。
+
+建议产品团队优先解决 P0 的 6 个流程阻断问题,可显著提升教师日均使用效率。
diff --git a/bugs/test_v3_audit.py b/bugs/test_v3_audit.py
new file mode 100644
index 0000000..21cd03e
--- /dev/null
+++ b/bugs/test_v3_audit.py
@@ -0,0 +1,117 @@
+"""v3 审查:测试节点图编辑器各功能"""
+from playwright.sync_api import sync_playwright
+
+with sync_playwright() as p:
+ browser = p.chromium.launch(headless=True)
+ context = browser.new_context(viewport={"width": 1400, "height": 900})
+ page = context.new_page()
+
+ errors = []
+ console_msgs = []
+ page.on("console", lambda msg: console_msgs.append(f"[{msg.type}] {msg.text}"))
+ page.on("pageerror", lambda err: errors.append(str(err)))
+
+ # 登录
+ print("=== 登录 ===")
+ page.goto("http://localhost:3000/login", wait_until="networkidle", timeout=30000)
+ page.locator("input[name='email']").fill("t_chinese_1@xiaoxue.edu.cn")
+ page.locator("input[name='password']").fill("123456")
+ page.get_by_role("button", name="Sign In", exact=False).click()
+ try:
+ page.wait_for_url("**/dashboard**", timeout=15000)
+ except Exception:
+ page.wait_for_load_state("networkidle", timeout=10000)
+ print(f"登录后: {page.url}")
+
+ # 新建课案
+ print("\n=== 新建课案 ===")
+ page.goto("http://localhost:3000/teacher/lesson-plans/new", wait_until="networkidle", timeout=30000)
+ page.locator("input[placeholder*='秋天']").fill("v3审查测试")
+ page.locator("button[type='button']:has-text('常规课')").click()
+ page.wait_for_timeout(500)
+ page.get_by_role("button", name="创建课案", exact=False).click()
+ try:
+ page.wait_for_url("**/edit**", timeout=15000)
+ except Exception:
+ pass
+ print(f"编辑页: {page.url}")
+
+ if "/edit" in page.url:
+ page.wait_for_timeout(5000)
+ page.screenshot(path="e:/Desktop/CICD/bugs/v3_01_initial.png", full_page=True)
+
+ # 测试1:节点渲染
+ nodes = page.locator(".react-flow__node")
+ edges = page.locator(".react-flow__edge")
+ print(f"节点数: {nodes.count()}, 边数: {edges.count()}")
+
+ # 测试2:节点选中
+ print("\n=== 节点选中 ===")
+ nodes.first.click()
+ page.wait_for_timeout(1000)
+ page.screenshot(path="e:/Desktop/CICD/bugs/v3_02_selected.png", full_page=True)
+ # 检查侧边面板
+ panel = page.locator("text=删除此节点")
+ print(f"侧边面板可见: {panel.count() > 0}")
+
+ # 测试3:编辑节点标题
+ print("\n=== 编辑节点标题 ===")
+ title_input = page.locator("input").nth(1) # 侧边面板的标题输入
+ if title_input.count() > 0:
+ title_input.fill("修改后的标题")
+ page.wait_for_timeout(500)
+ print("标题已修改")
+
+ # 测试4:添加节点
+ print("\n=== 添加节点 ===")
+ page.get_by_role("button", name="添加节点", exact=False).click()
+ page.wait_for_timeout(500)
+ add_items = page.locator("button:has-text('教学目标')")
+ if add_items.count() > 0:
+ add_items.first.click()
+ page.wait_for_timeout(1000)
+ nodes_after = page.locator(".react-flow__node")
+ print(f"添加后节点数: {nodes_after.count()}")
+
+ # 测试5:测试连线(拖拽创建)
+ print("\n=== 测试连线 ===")
+ # React Flow 的连线需要拖拽 handle
+ handles = page.locator(".react-flow__handle")
+ print(f"Handle 数量: {handles.count()}")
+
+ # 测试6:版本抽屉
+ print("\n=== 版本抽屉 ===")
+ page.get_by_role("button", name="版本", exact=True).click()
+ page.wait_for_timeout(2000)
+ page.screenshot(path="e:/Desktop/CICD/bugs/v3_03_versions.png", full_page=True)
+ loading = page.locator("text=加载中")
+ no_version = page.locator("text=暂无版本")
+ print(f"loading 可见: {loading.count() > 0}, 无版本: {no_version.count() > 0}")
+
+ # 关闭抽屉
+ page.locator(".fixed.inset-0 .flex-1").click()
+ page.wait_for_timeout(500)
+
+ # 测试7:保存版本
+ print("\n=== 保存版本 ===")
+ page.get_by_role("button", name="保存版本", exact=True).click()
+ page.wait_for_timeout(2000)
+ print(f"保存后 URL: {page.url}")
+
+ page.screenshot(path="e:/Desktop/CICD/bugs/v3_04_final.png", full_page=True)
+
+ # 错误输出
+ print("\n=== 页面错误 ===")
+ for e in errors:
+ if "Performance" not in e and "measure" not in e:
+ print(f" ERROR: {e[:300]}")
+ if not errors:
+ print(" 无(排除 Performance 测量噪声)")
+
+ print("\n=== 控制台 error/warning ===")
+ for m in console_msgs:
+ if (m.startswith("[error]") or m.startswith("[warning]")) and "Performance" not in m:
+ print(f" {m[:300]}")
+
+ browser.close()
+ print("\n完成")
diff --git a/bugs/v3_01_initial.png b/bugs/v3_01_initial.png
new file mode 100644
index 0000000000000000000000000000000000000000..07961a754e25164500b2b7e99ab531e2c56b7461
GIT binary patch
literal 94872
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