feat(dashboard): optimize teacher dashboard ui and layout

- Refactor layout: move Needs Grading to main column, Homework to sidebar
- Enhance TeacherStats: replace static counts with actionable metrics (Needs Grading, Active Assignments, Avg Score, Submission Rate)
- Update RecentSubmissions: table view with quick grade actions and late status
- Update TeacherSchedule: vertical timeline view with scroll hints
- Update TeacherHomeworkCard: compact list view
- Integrate Recharts: add TeacherGradeTrends chart and shared chart component
- Update documentation
This commit is contained in:
SpecialX
2026-01-12 11:38:27 +08:00
parent 8577280ab2
commit ade8d4346c
17 changed files with 1383 additions and 234 deletions

View File

@@ -165,7 +165,7 @@ Seed 脚本已覆盖班级相关数据,以便在开发环境快速验证页面
- 运行命令:`npm run db:seed`
### 6.5 开发过程中的问题与处理
- 端口占用EADDRINUSE开发服务器端口被占用时通过更换端口启动规避例如 `next dev -p <port>`)。
- Next dev 锁文件:出现 `.next/dev/lock` 无法获取锁时,需要确保只有一个 dev 实例在运行,并清理残留 lock。
- 头像资源 404移除 Header 中硬编码的本地头像资源引用,避免 `public/avatars/...` 不存在导致的 404 噪音(见 `src/modules/layout/components/site-header.tsx`)。
@@ -199,33 +199,38 @@ Seed 脚本已覆盖班级相关数据,以便在开发环境快速验证页面
**日期**: 2026-01-08
**范围**: 为班级新增 6 位邀请码,支持学生通过输入邀请码加入班级;教师可查看与刷新邀请码
#### 6.7.1 数据结构
- 表:`classes`
- 字段:`invitation_code`varchar(6)unique可为空
- 迁移:`drizzle/0007_add_class_invitation_code.sql`
---
#### 6.7.2 教师端能力
- 在「我的班级」卡片中展示邀请码。
- 提供“刷新邀请码”操作:生成新的 6 位码并写入数据库(确保唯一性)。
## 7. 教师仪表盘体验优化 (2026-01-12)
#### 6.7.3 学生端能力
- 提供“通过邀请码加入班级”的入口,输入 6 位码后完成报名。
- 写库操作设计为幂等:重复提交同一个邀请码不会生成重复报名记录,已有记录会被更新为有效状态。
**目标**: 提升教师仪表盘的信息密度与易用性,优化核心指标展示,调整布局以符合教师工作流。
#### 6.7.4 Seed 支持
- `scripts/seed.ts` 为示例班级补充 `invitationCode`,便于在开发环境直接验证加入流程
### 7.1 核心指标卡片重构 (TeacherStats)
- **原有问题**: 展示的总学生数、总课程数等静态指标对日常教学决策帮助有限
- **优化方案**: 替换为高频动态指标,并增强视觉提示。
- **Needs Grading (待批改)**: 高亮显示待处理事项,使用 Amber 色彩引起注意。
- **Active Assignments (活跃作业)**: 显示当前发布的作业数量,反映教学负载。
- **Average Score (平均分)**: 展示近期作业平均分,快速了解学情。
- **Submission Rate (提交率)**: 展示整体作业完成度,反映学生参与度。
### 6.8 更新记录2026-01-09
### 7.2 布局调整 (Layout Restructuring)
- **原有问题**: "Needs Grading" 位于侧边栏,空间受限;"Homework" 列表占据主栏,信息密度低。
- **优化方案**:
- **Needs Grading 移至主栏**: 给予更多宽幅空间,展示详细的学生、作业信息及操作按钮。
- **Homework 移至侧边栏**: 改为紧凑列表视图,作为快速导航入口。
- **Schedule 优化**: 引入时间轴 (Timeline) 视图,支持滚动提示与当前状态指示。
#### 6.8.1 班级创建权限收紧
- 目标:仅允许年级组长与 admin 创建班级。
- 后端:`createTeacherClassAction` 增加权限校验,非 admin 必须是对应年级的 `gradeHead``createAdminClassAction` 强制仅 admin 可调用(`src/modules/classes/actions.ts`
- 前端教师端「My Classes」页基于当前用户是否为任一年级 `gradeHead` 计算 `canCreateClass`,并禁用创建入口(`src/app/(dashboard)/teacher/classes/my/page.tsx``src/modules/classes/components/my-classes-grid.tsx`
### 7.3 组件功能增强
- **RecentSubmissions (Needs Grading)**:
- 升级为 Table 视图,展示头像、作业名、提交时间
- 增加 "Grade" 快捷按钮,一键进入批改页面
- 增加 "Late" 状态标记。
- **TeacherSchedule**:
- 采用垂直时间轴设计。
- 增加滚动提示 (Scroll Hint) 与 "No more classes" 状态提示。
- **TeacherHomeworkCard**:
- 优化为紧凑型列表,显示发布状态 (Published/Draft) 与截止日期。
#### 6.8.2 注册页面从演示提交改为真实注册
- `/register` 增加服务端注册动作:校验输入、邮箱查重、插入 `users` 表,默认 `role=student``src/app/(auth)/register/page.tsx`
- 注册表单接入注册动作并展示成功/失败提示,成功后跳转至 `/login``src/modules/auth/components/register-form.tsx`
#### 6.8.3 生产环境登录 UntrustedHost 修复
- 问题:服务器上访问 `/api/auth/session``[auth][error] UntrustedHost`
- 修复Auth.js 配置开启 `trustHost: true` 并显式设置 `secret``src/auth.ts`)。
### 7.4 技术细节
- 引入 `recharts` 替换手写 SVG 图表,统一图表风格
- 优化 Grid 布局响应式表现 (`lg:grid-cols-12`)