13 KiB
13 KiB
教师端页面实现分析文档
日期: 2026-03-03
范围: Teacher 路由与页面实现(src/app/(dashboard)/teacher)
1. 总览
教师端页面采用服务端组件为主、按页面聚合数据的方式实现,页面负责:
- 读取数据(模块 data-access)
- 组装 UI(模块 components)
- 处理空状态与跳转
所有页面路由位于 src/app/(dashboard)/teacher,各业务能力落在 src/modules/* 中。
2. 路由总表
2.1 教师工作台
/teacher/dashboard
实现:dashboard/page.tsx
2.2 班级
/teacher/classes→/teacher/classes/my
实现:classes/page.tsx/teacher/classes/my
实现:classes/my/page.tsx/teacher/classes/my/[id]
实现:classes/my/[id]/page.tsx/teacher/classes/students
实现:classes/students/page.tsx/teacher/classes/schedule
实现:classes/schedule/page.tsx
2.3 作业
/teacher/homework→/teacher/homework/assignments
实现:homework/page.tsx/teacher/homework/assignments
实现:homework/assignments/page.tsx/teacher/homework/assignments/create
实现:homework/assignments/create/page.tsx/teacher/homework/assignments/[id]
实现:homework/assignments/[id]/page.tsx/teacher/homework/assignments/[id]/submissions
实现:homework/assignments/[id]/submissions/page.tsx/teacher/homework/submissions
实现:homework/submissions/page.tsx/teacher/homework/submissions/[submissionId]
实现:homework/submissions/[submissionId]/page.tsx
2.4 考试
/teacher/exams→/teacher/exams/all
实现:exams/page.tsx/teacher/exams/all
实现:exams/all/page.tsx/teacher/exams/create
实现:exams/create/page.tsx/teacher/exams/[id]/build
实现:exams/[id]/build/page.tsx/teacher/exams/grading→/teacher/homework/submissions
实现:exams/grading/page.tsx/teacher/exams/grading/[submissionId]→/teacher/homework/submissions
实现:exams/grading/[submissionId]/page.tsx
2.5 题库
/teacher/questions
实现:questions/page.tsx
2.6 教材
/teacher/textbooks
实现:textbooks/page.tsx/teacher/textbooks/[id]
实现:textbooks/[id]/page.tsx
3. 页面详解(逐页)
3.1 教师工作台 /teacher/dashboard
- 目的: 教师总览工作台,展示班级、课表、作业、提交、成绩趋势与教师姓名。
- 数据来源:
- 班级与课表:
getTeacherClasses、getClassSchedule - 作业与提交:
getHomeworkAssignments、getHomeworkSubmissions - 教师姓名:
users表查询 - 成绩趋势:
getTeacherGradeTrends
- 班级与课表:
- 关键组件:
TeacherDashboardView - 渲染策略:
dynamic = "force-dynamic"
3.2 班级入口 /teacher/classes
- 目的: 跳转入口,统一导向“我的班级”。
- 行为:
redirect("/teacher/classes/my")
3.3 我的班级 /teacher/classes/my
- 目的: 展示教师负责班级的卡片列表,并支持学科筛选/加入。
- 数据来源:
- 班级:
getTeacherClasses - 学科选项:
getClassSubjects
- 班级:
- 关键组件:
MyClassesGrid - 渲染策略:
dynamic = "force-dynamic"
3.4 班级详情 /teacher/classes/my/[id]
- 目的: 展示班级概览(作业趋势、学生、课表、作业摘要)。
- 数据来源:
- 班级作业洞察:
getClassHomeworkInsights - 学生列表:
getClassStudents - 课表:
getClassSchedule - 学科成绩:
getClassStudentSubjectScoresV2
- 班级作业洞察:
- 关键组件:
ClassHeaderClassOverviewStatsClassTrendsWidgetClassStudentsWidgetClassScheduleWidgetClassAssignmentsWidget
- 空状态:
insights缺失返回notFound() - 渲染策略:
dynamic = "force-dynamic"
3.5 学生列表 /teacher/classes/students
- 目的: 按班级、关键词、状态筛选学生,并显示学科成绩。
- 数据来源:
- 教师班级:
getTeacherClasses - 学生列表:
getClassStudents - 学科成绩:
getStudentsSubjectScores
- 教师班级:
- 关键组件:
StudentsFiltersStudentsTableEmptyState/Skeleton
- 筛选逻辑: 未显式选择班级时默认第一班级
- 渲染策略:
dynamic = "force-dynamic"
3.6 课表 /teacher/classes/schedule
- 目的: 按班级查看课表。
- 数据来源:
- 班级:
getTeacherClasses - 课表:
getClassSchedule
- 班级:
- 关键组件:
ScheduleFiltersScheduleViewEmptyState/Skeleton
- 渲染策略:
dynamic = "force-dynamic"
3.7 作业入口 /teacher/homework
- 目的: 统一导向作业列表。
- 行为:
redirect("/teacher/homework/assignments")
3.8 作业列表 /teacher/homework/assignments
实现:homework/assignments/page.tsx
- 目的: 查看作业列表与状态,支持按班级筛选,提供创建入口。
- 数据来源:
- 作业列表:
getHomeworkAssignments - 班级列表(用于显示名称):
getTeacherClasses
- 作业列表:
- 关键组件:
Table、Badge、EmptyState - 空状态: 无作业时提示创建
- 渲染策略:
dynamic = "force-dynamic"
3.9 创建作业 /teacher/homework/assignments/create
实现:homework/assignments/create/page.tsx
- 目的: 从 Exam 派发作业。
- 数据来源:
- 可派发的 Exam:
getExams - 班级列表:
getTeacherClasses
- 可派发的 Exam:
- 关键组件:
HomeworkAssignmentForm - 空状态:
- 无 Exam:提示先创建考试
- 无班级:提示先创建班级
3.10 作业详情 /teacher/homework/assignments/[id]
实现:homework/assignments/[id]/page.tsx
- 目的: 展示作业详情、错题概览与试卷内容。
- 数据来源:
getHomeworkAssignmentAnalytics - 关键组件:
HomeworkAssignmentQuestionErrorOverviewCardHomeworkAssignmentExamContentCard
- 空状态: 查不到作业时
notFound()
3.11 作业提交列表 /teacher/homework/assignments/[id]/submissions
实现:homework/assignments/[id]/submissions/page.tsx
- 目的: 按作业查看提交与评分进度。
- 数据来源:
- 作业信息:
getHomeworkAssignmentById - 提交列表:
getHomeworkSubmissions
- 作业信息:
- 关键组件:
Table、Badge - 空状态: 作业不存在时
notFound()
3.12 全部提交 /teacher/homework/submissions
实现:homework/submissions/page.tsx
- 目的: 按作业汇总查看所有提交与批改入口。
- 数据来源:
- 教师身份:
getTeacherIdForMutations - 作业审阅列表:
getHomeworkAssignmentReviewList
- 教师身份:
- 关键组件:
Table、Badge、EmptyState
3.13 提交批改 /teacher/homework/submissions/[submissionId]
实现:homework/submissions/[submissionId]/page.tsx
- 目的: 作业批改视图,按题打分与反馈。
- 数据来源:
getHomeworkSubmissionDetails - 关键组件:
HomeworkGradingView - 空状态: 查不到提交时
notFound()
3.14 考试入口 /teacher/exams
- 目的: 统一导向考试列表。
- 行为:
redirect("/teacher/exams/all")
3.15 考试列表 /teacher/exams/all
- 目的: 列出考试并支持筛选、统计、创建入口。
- 数据来源:
getExams(按关键词/状态/难度过滤) - 关键组件:
ExamFiltersExamDataTableEmptyState/Skeleton
- 统计: 对列表结果进行状态数量统计(draft/published/archived)
3.16 创建考试 /teacher/exams/create
- 目的: 创建考试基础信息。
- 关键组件:
ExamForm
3.17 组卷 /teacher/exams/[id]/build
- 目的: 从题库选择题目并构建考试结构。
- 数据来源:
- 考试数据:
getExamById - 题库数据:
getQuestions
- 考试数据:
- 关键组件:
ExamAssembly - 关键逻辑:
- 读取已选题并初始化
initialSelected - 将题目数据映射为
Question类型 - 归一化
structure并保证节点id唯一
- 读取已选题并初始化
3.18 阅卷入口 /teacher/exams/grading*
实现:exams/grading/page.tsx、exams/grading/[submissionId]/page.tsx
- 目的: 统一重定向至作业批改视图。
- 行为:
redirect("/teacher/homework/submissions")
3.19 题库 /teacher/questions
- 目的: 题库管理与筛选。
- 数据来源:
getQuestions(按关键词/题型/难度过滤) - 关键组件:
QuestionFiltersQuestionDataTableCreateQuestionButtonEmptyState/Skeleton
3.20 教材列表 /teacher/textbooks
- 目的: 教材管理与筛选,创建入口。
- 数据来源:
getTextbooks - 关键组件:
TextbookFiltersTextbookCardTextbookFormDialogEmptyState
- 渲染策略:
dynamic = "force-dynamic"
3.21 教材详情 /teacher/textbooks/[id]
- 目的: 教材章节与知识点结构阅读与维护。
- 数据来源:
- 教材:
getTextbookById - 章节:
getChaptersByTextbookId - 知识点:
getKnowledgePointsByTextbookId
- 教材:
- 关键组件:
TextbookReaderTextbookSettingsDialog
- 空状态: 教材不存在时
notFound()
4. 依赖模块清单
教师端页面主要依赖以下模块:
- 班级与排课:
src/modules/classes - 作业:
src/modules/homework - 考试:
src/modules/exams - 题库:
src/modules/questions - 教材:
src/modules/textbooks - 工作台:
src/modules/dashboard