- 学生域 32 页全量迁移(含作答/自动保存/提交/诊断) - 补齐 4 个 MSW mock 缺口,修 diagnostic case 名 - 修 4 处 Tailwind 任意值;新增共享组件与路由
51 KiB
教师域(Teacher)待完成功能分析
参考项目:
e:\desktop\CICD\src\app\(dashboard)\teacher\(CICD 原版,53 个 page.tsx) 当前项目:e:\Desktop\Edu\apps\portal-shell\src\app\shell\teacher\(63 个 page.tsx) 规划依据:apps\portal-shell\ARCHITECTURE.md§9.1(教师域 56 页规划,B1+B2+B2末) 分析日期:2026-08-04 分析方式:逐页面读取 page.tsx 文件内容 + features/*-client.tsx 集成核查 + lib/api hooks + mocks/graphql-data.ts 覆盖核查
〇、方法论与对比基线
- CICD 单体(Next.js App Router + Server Actions + Drizzle)作为功能基线,反映"老版单体已实现"的教师功能完整态。
- portal-shell 作为目标态,遵循 ARCH §9.1 的契约与批次规划(B1+B2+B2末)。
- portal-shell 普遍采用「Server Component page.tsx 仅做
<Suspense>边界包裹 + Client Component*-client.tsx承载业务」的统一架构;CICD 多为「Server Component 直接拉数据 + Rich Client Component 渲染」。 - ARCH §9.1 规划 56 页,portal-shell 已实现 63 页(含 5 个路径别名
/classes/my、/classes/my/[id]、/exams/all、/exams/create、/homework/assignments/create复用同一 client,+ 3 个占位页/classes/students、/exams/grading、/exams/grading/[submissionId],+ 2 个 ARCH §9.1 原未规划但已补做/exams/[id]/proctoring、/diagnostic/student/[studentId])。 - CICD 中
exams/page.tsx、classes/page.tsx、exams/grading/*、exams/create等为重定向/等价路径,不算独立功能缺口。 - CICD 中
diagnostic/student/[studentId]在 ARCH §9.1 中原未规划(ARCH 仅规划diagnostic+diagnostic/class/[classId]共 2 页),属 CICD 历史功能,portal-shell 已补做(待同步更新 ARCH §9.1 + 004 + arch.db)。
0.1 三态分类严格定义(本次核查采用)
| 状态 | 定义 | 判据 |
|---|---|---|
| ✅ 完整实现 | page.tsx 引入并渲染 features/teacher/*-client.tsx 客户端组件,或 page.tsx 自身包含真实业务逻辑(调用 lib/api hooks、渲染数据、处理 loading/error/empty 三态) |
文件内 import 了 *-client.tsx 并 <XxxClient /> 渲染;或直接调用 useXxx hook |
| 🟡 占位空态 | page.tsx 仅用 ListPageShell / DetailPageShell / FormPageShell / WorkbenchPageShell 等 page-templates 直接渲染空态(如 empty 属性或无 children 内容),没有引入任何 *-client.tsx,也没有真实业务逻辑 |
文件内仅 import { ListPageShell } from "@/shared/components/page-templates",无 client 组件 |
| ❌ 缺失 | 文件不存在 | 路径下无 page.tsx |
重要说明:本核查的"完整实现"指页面骨架与数据流闭环(client 组件已集成、hooks 已接入、三态已处理),不代表与 CICD 功能完全对等。与 CICD 的功能差距详见 §三.B(原 §3.4-§3.18 内容保留,归类为"功能差距"而非"占位空态")。
0.2 配套资产核查
| 资产 | 路径 | 覆盖情况 |
|---|---|---|
| features/teacher/*-client.tsx | src/features/teacher/<module>/ |
55 个页面级 client 组件(不含 dashboard-cards-client 子组件),覆盖 20 个模块,详见 §七.2 |
| lib/api hooks | src/lib/api/<module>.ts |
20 个模块文件:ai/analytics/attendance/classes/course-plans/dashboard/diagnostic/elective/error-book/exams/grades/homework/knowledge-graph/leave/lesson-plans/practice/proctoring/questions/schedule-changes/students/textbooks(另含 admin/universal/sidebar/topbar/notifications/settings/profile 等共享域文件) |
| mocks/graphql-data.ts | src/mocks/graphql-data.ts |
269KB / 116 个 mock 数据集(含教师域全部模块 + 学生/家长/管理域),所有占位页与功能差距页均有 MSW 兜底 |
一、页面完成度总览
| 状态 | 数量 | 说明 |
|---|---|---|
| ✅ 完整实现 | 60 | page.tsx 集成 *-client.tsx 或自身含真实业务逻辑(lib/api hook + 三态处理) |
| 🟡 占位空态 | 3 | 仅用 page-templates 渲染空态,无 client 组件集成,无真实业务 |
| ❌ 完全缺失 | 0 | 教师域 63 个 page.tsx 全部存在 |
与原核查(2026-07-24)的差异
| 项目 | 原(07-24) | 现(08-04) | 变化 |
|---|---|---|---|
| 总页面数 | 53 | 63 | +10(5 别名 + 3 占位 + 2 补做) |
| ✅ 完整 | 33 | 60 | +27(原 14 页"功能不完整"实为已集成 client 归入 ✅ + 新补做 2 页 + 新增别名 5 页 - 占位 3 页归 🟡 - 共享域 2 页非教师域) |
| 🟡 占位 | 14 | 3 | -11(原 14 页均集成 client 组件归 ✅;新增 3 个真占位页) |
| ❌ 缺失 | 4 | 0 | -4(proctoring 与 diagnostic/student 已补做;notifications/settings 属共享域非教师域核查范围) |
✅ 完整实现(60 页)
按模块分布(含别名/复用):
| 模块 | 页面数 | 页面路径 |
|---|---|---|
| dashboard | 1 | /shell/teacher(page.tsx 含 useTeacherDashboard hook + 7 张卡片 + i18n + 三态) |
| ai | 3 | /ai/ai-assist、/ai/ai-lesson-plan、/ai/ai-report(全 MSW,B2末工作台) |
| analytics | 2 | /analytics、/analytics/[studentId](MSW 兜底) |
| attendance | 4 | /attendance、/report、/sheet、/stats |
| classes | 5 | /classes、/classes/my(别名)、/classes/[id]、/classes/my/[id](别名)、/classes/schedule |
| course-plans | 2 | /course-plans、/course-plans/[id] |
| diagnostic | 3 | /diagnostic、/diagnostic/class/[classId]、/diagnostic/student/[studentId](已补做) |
| elective | 3 | /elective、/elective/create、/elective/[id]/edit |
| error-book | 1 | /error-book(✅ errorBookItems/Stats 真实契约) |
| exams | 9 | /exams、/exams/all(别名)、/exams/new、/exams/create(别名)、/exams/[id]、/exams/[id]/analytics、/exams/[id]/build、/exams/[id]/edit、/exams/[id]/proctoring(已补做) |
| grades | 5 | /grades、/grades/analytics、/grades/entry、/grades/report-card、/grades/stats |
| homework | 8 | /homework、/homework/new、/homework/assignments/create(别名)、/homework/[id]、/homework/assignments/[id]/submissions、/homework/submissions、/homework/submissions/[submissionId]、/homework/submissions/[submissionId]/scan-grading |
| knowledge-graph | 1 | /knowledge-graph(B2末,混合契约 knowledgePoint ✅) |
| leave | 1 | /leave |
| lesson-plans | 6 | /lesson-plans、/lesson-plans/new、/lesson-plans/calendar、/lesson-plans/heatmap、/lesson-plans/library、/lesson-plans/[planId]/edit |
| practice | 1 | /practice |
| questions | 1 | /questions |
| schedule-changes | 1 | /schedule-changes |
| students | 1 | /students(原 /classes/students 已迁到顶级) |
| textbooks | 2 | /textbooks、/textbooks/[id] |
注:原"🟡 已完成但功能不完整"的 14 页(dashboard、exams/page、exams/[id]、exams/new、exams/[id]/edit、exams/[id]/build、classes/[id]、classes/page、students、homework/[id]、homework/new、lesson-plans/[planId]/edit、grades/entry、attendance/sheet、diagnostic/class/[classId])均已集成真实 client 组件,按本次严格三态定义归入 ✅;其与 CICD 的功能差距见 §三.B(§3.4-§3.18 保留原核查的详细对比分析)。
🟡 占位空态(3 页)
详见 §三.A(§3.1-§3.3)。
❌ 缺失(0 页)
教师域 63 个 page.tsx 全部存在,无缺失。
共享域说明:原
/shell/notifications与/shell/settings为 B1 共享页(非教师域独有),不属于本次教师域核查范围。如需补做,应在/shell/notifications/page.tsx与/shell/settings/page.tsx实现,供所有角色共用。
二、缺失页面清单
2.1 教师域缺失页面
无缺失。教师域 63 个 page.tsx 全部存在。
2.2 已补做的原"缺失"页面(相对 2026-07-24 核查)
2.2.1 /shell/teacher/exams/[id]/proctoring(监考工作台)— ✅ 已补做
- CICD 参考实现:
e:\desktop\CICD\src\app\(dashboard)\teacher\exams\[id]\proctoring\page.tsx - portal-shell 现状:
exams/[id]/proctoring/page.tsx+features/teacher/exams/proctoring-client.tsx - 实现状态:✅ page.tsx 引入
ProctoringClient并<Suspense fallback={<WorkbenchPageSkeleton />}>包裹;client 组件使用useExamProctoring/useStudentProctoringStatuses/useRecentProctoringEvents三个 Apollo hook(全 MSW 兜底);通过 5s 轮询模拟实时刷新,后端补齐 WS subscription 后切换。 - ARCHITECTURE.md 契约:❌(schema 无,需 WS 契约工单 + MSW 先行,已 MSW 兜底)
- 批次:B2 末(二期,WS)— MSW 阶段已完成,待 WS 契约就绪后切换。
2.2.2 /shell/teacher/diagnostic/student/[studentId](学生诊断详情)— ✅ 已补做
- CICD 参考实现:
e:\desktop\CICD\src\app\(dashboard)\teacher\diagnostic\student\[studentId]\page.tsx - portal-shell 现状:
diagnostic/student/[studentId]/page.tsx+features/teacher/diagnostic/student-diagnostic-client.tsx - 实现状态:✅ page.tsx 引入
StudentDiagnosticClient并<Suspense fallback={<DetailPageSkeleton />}>包裹;client 组件使用useStudentDiagnosticApollo hook(MSW 兜底)。 - ARCHITECTURE.md 契约:🟡
diagnosticReports✅ schema 真实字段,单生维度查询未明确。 - 批次:B2(CICD 历史功能,ARCH §9.1 原未规划)— 需同步更新 ARCH §9.1 + 004 + arch.db。
2.3 共享域缺口(非教师域核查范围,仅作记录)
| 路径 | 状态 | 说明 |
|---|---|---|
/shell/notifications |
❌ 缺失 | B1 共享,notifications(userId) ✅ schema 已就绪,需在共享域补页面 |
/shell/settings |
❌ 缺失 | B1 共享,需在共享域补页面 |
2.4 不算缺失的"伪缺失"(路径合并/重定向/别名)
以下路径在 portal-shell 中通过路径合并、别名或等价入口覆盖,不算缺失:
| CICD 路径 | portal-shell 等价 | 说明 |
|---|---|---|
exams/page.tsx |
/exams/page.tsx(ExamsListClient) |
CICD 是 redirect 到 /exams/all,portal-shell 直接渲染列表 + 同时保留 /exams/all 别名 |
exams/all/page.tsx |
/exams/all/page.tsx(ExamsListClient 别名) |
portal-shell 已补 /exams/all 别名复用 ExamsListClient |
exams/create/page.tsx |
/exams/create/page.tsx(NewExamClient 别名) |
portal-shell 已补 /exams/create 别名复用 NewExamClient |
classes/page.tsx |
/classes/page.tsx(ClassesListClient) |
CICD 是 redirect 到 /classes/my,portal-shell 直接渲染列表 + 同时保留 /classes/my 别名 |
classes/my/page.tsx |
/classes/my/page.tsx(ClassesListClient 别名) |
portal-shell 已补 /classes/my 别名复用 ClassesListClient |
classes/my/[id]/page.tsx |
/classes/my/[id]/page.tsx(ClassDetailClient 别名) |
portal-shell 已补 /classes/my/[id] 别名复用 ClassDetailClient |
classes/students/page.tsx |
/students/page.tsx(StudentsListClient) + /classes/students/page.tsx(🟡 占位) |
路径从 /classes/students 迁到顶级 /students(ARCH §9.1 规划);旧路径保留为占位页(见 §3.1) |
homework/assignments/create/page.tsx |
/homework/assignments/create/page.tsx(NewHomeworkClient 别名) |
portal-shell 已补 /homework/assignments/create 别名复用 NewHomeworkClient |
exams/grading/page.tsx |
无(CICD 自身是 redirect) | CICD grading/page.tsx 仅 redirect("/teacher/homework/submissions");portal-shell 保留为占位页(见 §3.2) |
exams/grading/[submissionId]/page.tsx |
无(CICD 自身是 redirect) | 同上,仅 redirect;portal-shell 保留为占位页(见 §3.3) |
三、占位空态页面 + 与 CICD 功能差距
本节分两部分:
- §三.A(§3.1-§3.3):3 个真占位页(仅 page-templates 渲染空态,无 client 组件集成)— 本次核查最优先补做项
- §三.B(§3.4-§3.18):15 个已集成 client 但与 CICD 有功能差距的页面 — 保留原 §3.1-§3.15 详细对比分析
三.A 占位空态页面(3 页,P0 优先补做)
3.1 /shell/teacher/classes/students(班级学生列表占位)
-
路径:
/shell/teacher/classes/students -
page.tsx 实现:
import { ListPageShell } from "@/shared/components/page-templates"; export default function ClassStudentsPage(): React.ReactElement { return ( <ListPageShell title="班级学生" description="查看各班级学生名单" empty /> ); } -
当前状态:🟡 占位空态,仅
ListPageShell+empty属性,无 children 内容,无 client 组件集成。 -
已有但未集成的组件:❌ 无。
features/teacher/classes/仅有class-detail-client.tsx、class-schedule-client.tsx、classes-list-client.tsx,无class-students-client.tsx。 -
可用资源:
- lib/api:
lib/api/classes.ts有useClassStudents(classId)hook - mocks:
graphql-data.ts有ClassStudentsmock 数据集 - 同域可复用:
/students/page.tsx已实现StudentsListClient(顶级路由,ARCH §9.1 已迁出)
- lib/api:
-
需要补全的内容:
- 方案 A(推荐):删除
/classes/students/page.tsx,统一使用顶级/students(ARCH §9.1 已规划迁移) - 方案 B(兼容旧路径):改为
redirect("/shell/teacher/students")重定向到顶级路由 - 方案 C(保留独立功能):新建
features/teacher/classes/class-students-client.tsx,按classId查询展示某班学生名单(不同于顶级/students的全校学生视图)
- 方案 A(推荐):删除
-
建议:方案 B(重定向)。ARCH §9.1 已明确迁移到顶级
/students,保留旧路径作为重定向入口即可,无需重复实现。
3.2 /shell/teacher/exams/grading(阅卷列表占位)
-
路径:
/shell/teacher/exams/grading -
page.tsx 实现:
import { ListPageShell } from "@/shared/components/page-templates"; export default function ExamGradingPage(): React.ReactElement { return ( <ListPageShell title="阅卷列表" description="查看待批阅的考试提交" empty /> ); } -
当前状态:🟡 占位空态,仅
ListPageShell+empty属性,无 children,无 client 组件。 -
已有但未集成的组件:❌ 无。
features/teacher/exams/有 7 个 client(exam-analytics、exam-build、exam-detail、exam-edit、exams-list、new-exam、proctoring),无exam-grading-list-client.tsx。 -
可用资源:
- lib/api:
lib/api/exams.ts有相关 hook;lib/api/homework.ts有useHomeworkSubmissionshook - mocks:
graphql-data.ts有HomeworkSubmissions、ExamDetail等 mock 数据集 - CICD 行为:CICD
exams/grading/page.tsx仅redirect("/teacher/homework/submissions"),无实际功能
- lib/api:
-
需要补全的内容:
- 方案 A(与 CICD 一致):改为
redirect("/shell/teacher/homework/submissions")重定向到作业提交列表 - 方案 B(实现独立阅卷入口):新建
features/teacher/exams/exam-grading-list-client.tsx,展示待批阅的考试提交(区分于作业提交)
- 方案 A(与 CICD 一致):改为
-
建议:方案 A(重定向)。与 CICD 行为一致,避免重复实现;如产品需要独立的"考试阅卷"入口(区分于作业批改),再按方案 B 补做。
3.3 /shell/teacher/exams/grading/[submissionId](阅卷详情占位)
-
路径:
/shell/teacher/exams/grading/[submissionId] -
page.tsx 实现:
import { DetailPageShell } from "@/shared/components/page-templates"; /** * 阅卷详情页(ARCHITECTURE.md §7.3 详情页 / §9.1 / §10 P2) * * Server Component 入口:使用 DetailPageShell 直接渲染。 * 通过 /shell/teacher/exams/grading/[submissionId] 路由定位具体提交, * 后续可接入阅卷专属 client component 进行逐题评分。 * * 数据契约:submission(id) schema 无, MSW 兜底(@contract-pending) * * 关联:ARCHITECTURE.md §5.3 / §5.4 / §7.3 / §9.1 / §10 P2 / §11.3 / §11.4 */ export default function ExamGradingDetailPage(): React.ReactElement { return ( <DetailPageShell title="阅卷详情" description="批阅学生考试提交" backHref="/shell/teacher/exams/grading" /> ); } -
当前状态:🟡 占位空态,仅
DetailPageShell+title/description/backHref,无 children,无 client 组件。 -
已有但未集成的组件:❌ 无。
features/teacher/exams/无阅卷详情 client;阅卷能力当前在features/teacher/homework/submission-grading-client.tsx(已被/homework/submissions/[submissionId]集成)。 -
可用资源:
- lib/api:
lib/api/homework.ts有useSubmissionDetail(submissionId)/useGradeSubmissionhook - mocks:
graphql-data.ts有SubmissionDetail、HomeworkSubmissionsmock 数据集 - 同域可复用:
/homework/submissions/[submissionId]/page.tsx已实现SubmissionGradingClient(含逐题评分、批注、自动判分、保存草稿) - CICD 行为:CICD
exams/grading/[submissionId]/page.tsx仅redirect("/teacher/homework/submissions")(注意:CICD 未保留 submissionId 参数,会丢失上下文)
- lib/api:
-
需要补全的内容:
- 方案 A(推荐,优于 CICD):改为重定向到
/shell/teacher/homework/submissions/[submissionId],保留 submissionId 参数(修复 CICD 丢失参数的问题) - 方案 B(实现独立阅卷详情):新建
features/teacher/exams/exam-grading-detail-client.tsx,对接useSubmissionDetailhook 实现考试阅卷专属视图(区别于作业批改)
- 方案 A(推荐,优于 CICD):改为重定向到
-
建议:方案 A(重定向并保留参数)。与 CICD 行为一致但修复其缺陷;如产品需要独立的考试阅卷详情视图(区分于作业批改),再按方案 B 补做。
三.A 小结:占位页共性特征
3 个占位页的共性:
- 路径来源:均为 CICD 单体中的重定向占位路径,portal-shell 迁移时保留了路径但未集成业务
- page-templates 直接渲染:均仅用
ListPageShell/DetailPageShell直接渲染空态,无*-client.tsx集成 - 已有等价实现:3 个占位页对应的功能均已在不同路径实现:
/classes/students→ 顶级/students(已实现StudentsListClient)/exams/grading→/homework/submissions(已实现SubmissionsListClient)/exams/grading/[submissionId]→/homework/submissions/[submissionId](已实现SubmissionGradingClient)
- 推荐统一处理:3 个占位页均建议改为
redirect()重定向到等价路径,避免重复实现 - 优先级:P0(占位页影响用户体验,路径存在但无内容)
三.B 与 CICD 功能差距页面(15 页,已集成 client 但与 CICD 有差距)
以下 15 页均已集成
*-client.tsx,按本次严格三态定义归入 ✅ 完整实现。但与 CICD 单体相比仍存在功能差距(如缺少某些子功能、操作按钮、数据维度等),保留原核查的详细对比分析供后续迭代参考。优先级:P1-P2(功能增强,非阻塞性)
说明:本节为原 §3.1-§3.15 的内容保留归类。由于 60 页均已完成页面骨架与数据流闭环,本节作为后续迭代的功能增强 backlog,不再视为占位/缺失。详细页面级差距分析详见原核查记录(2026-07-24)与 CICD 源码对比,本次核查不重复展开,仅列清单:
| 序号 | 页面路径 | 集成的 client | 与 CICD 主要差距概述 |
|---|---|---|---|
| 1 | /shell/teacher(dashboard) |
dashboard-cards-client | CICD 7 张卡片含交互态;portal-shell 已对齐 7 卡 + i18n,差距较小 |
| 2 | /shell/teacher/exams |
exams-list-client | 列表筛选维度、状态筛选、批量操作 |
| 3 | /shell/teacher/exams/[id] |
exam-detail-client | 详情页子 Tab 数量、阅卷入口跳转 |
| 4 | /shell/teacher/exams/new |
new-exam-client | 表单步骤、题型选择、知识点绑定 |
| 5 | /shell/teacher/exams/[id]/edit |
exam-edit-client | 编辑权限点、草稿恢复 |
| 6 | /shell/teacher/exams/[id]/build |
exam-build-client | 组卷策略、难度校准 |
| 7 | /shell/teacher/classes/[id] |
class-detail-client | 详情子 Tab、学生名单 inline |
| 8 | /shell/teacher/classes |
classes-list-client | 列表筛选、班级切换 |
| 9 | /shell/teacher/students |
students-list-client | 学生筛选、详情抽屉 |
| 10 | /shell/teacher/homework/[id] |
homework-detail-client | 作业详情 Tab、提交统计 |
| 11 | /shell/teacher/homework/new |
new-homework-client | 作业类型、附件上传 |
| 12 | /shell/teacher/lesson-plans/[planId]/edit |
lesson-plan-edit-client | 编辑器富文本、模板插入 |
| 13 | /shell/teacher/grades/entry |
grade-entry-client | 成绩录入批量、导入导出 |
| 14 | /shell/teacher/attendance/sheet |
attendance-sheet-client | 考勤表批量、快捷标记 |
| 15 | /shell/teacher/diagnostic/class/[classId] |
class-diagnostic-client | 诊断维度、对比分析 |
后续处理建议:本节 15 页的功能差距属 P1-P2 增强项,建议按产品优先级逐模块迭代补齐;每次补齐后运行
pnpm run arch:scan同步 arch.db,并视情况更新 004 与本核查文档。
四、配套资产覆盖核查
4.1 features/teacher/*-client.tsx 覆盖(55 个页面级 client)
详见 §七.2(附录)。覆盖 20 个教师域模块,所有 ✅ 完整实现页均有对应 client 集成。
4.2 lib/api hooks 覆盖(20 个模块文件)
| 模块 | 文件 | 关键 hook |
|---|---|---|
| ai | lib/api/ai.ts |
useAiAssist / useAiLessonPlan / useAiReport |
| analytics | lib/api/analytics.ts |
useAnalytics / useStudentAnalytics |
| attendance | lib/api/attendance.ts |
useAttendance / useAttendanceReport / useAttendanceSheet / useAttendanceStats |
| classes | lib/api/classes.ts |
useClasses / useClassDetail / useClassStudents / useClassSchedule |
| course-plans | lib/api/course-plans.ts |
useCoursePlans / useCoursePlanDetail |
| dashboard | lib/api/dashboard.ts |
useTeacherDashboard |
| diagnostic | lib/api/diagnostic.ts |
useClassDiagnostic / useStudentDiagnostic |
| elective | lib/api/elective.ts |
useElectiveCourses / useElectiveDetail |
| error-book | lib/api/error-book.ts |
useErrorBookItems / useErrorBookStats |
| exams | lib/api/exams.ts |
useExams / useExamDetail / useExamAnalytics / useExamBuild / useExamProctoring |
| grades | lib/api/grades.ts |
useGrades / useGradeEntry / useGradeStats / useReportCard |
| homework | lib/api/homework.ts |
useHomework / useHomeworkDetail / useHomeworkSubmissions / useSubmissionDetail / useGradeSubmission |
| knowledge-graph | lib/api/knowledge-graph.ts |
useKnowledgeGraph |
| leave | lib/api/leave.ts |
useLeaveRequests |
| lesson-plans | lib/api/lesson-plans.ts |
useLessonPlans / useLessonPlanDetail / useLessonPlanCalendar / useLessonPlanHeatmap |
| practice | lib/api/practice.ts |
usePractice |
| proctoring | lib/api/proctoring.ts |
useStudentProctoringStatuses / useRecentProctoringEvents |
| questions | lib/api/questions.ts |
useQuestions |
| schedule-changes | lib/api/schedule-changes.ts |
useScheduleChanges |
| students | lib/api/students.ts |
useStudents / useStudentDetail |
| textbooks | lib/api/textbooks.ts |
useTextbooks / useTextbookDetail |
4.3 mocks/graphql-data.ts 覆盖(116 个 mock 数据集)
269KB 文件覆盖教师域全部模块(含 3 个占位页的兜底数据:ClassStudents、HomeworkSubmissions、SubmissionDetail、ExamDetail)。所有占位页与功能差距页均有 MSW 兜底。
五、结论与建议
5.1 总体结论
- 教师域 63 个 page.tsx 全部存在,无缺失
- 60 页 ✅ 完整实现(集成 client + hooks + 三态处理)
- 3 页 🟡 占位空态(均为 CICD 重定向路径,建议改为
redirect()重定向到等价已实现路径) - 配套资产齐全:55 个 client 组件 + 20 个 lib/api 模块 + 116 个 mock 数据集
5.2 优先级建议
| 优先级 | 项目 | 工作量 | 说明 |
|---|---|---|---|
| P0 | 3 个占位页改为 redirect() 重定向 |
小(每页约 5 行) | 见 §3.1-§3.3 方案 A/B,统一重定向到等价已实现路径 |
| P1-P2 | 15 页与 CICD 功能差距补齐 | 中-大 | 见 §三.B,按产品优先级逐模块迭代 |
| P2 | 同步更新 ARCH §9.1 + 004 + arch.db | 小 | 补做 diagnostic/student/[studentId] 与 exams/[id]/proctoring 已实现但未同步规划文档 |
5.3 不需补做的项
/shell/notifications、/shell/settings:属 B1 共享域(非教师域),需在共享域补页面,不在本次教师域核查范围/exams/all、/exams/create、/classes/my、/classes/my/[id]、/homework/assignments/create:为路径别名,复用同一 client,不算缺失
六、核查元信息
- 核查日期:2026-08-04
- 核查范围:
apps/portal-shell/src/app/shell/teacher/下全部 63 个 page.tsx - 核查方式:逐页面读取 page.tsx 文件内容(PowerShell
Get-Content -LiteralPath)+ features/*-client.tsx 集成核查 + lib/api hooks 覆盖核查 + mocks/graphql-data.ts 覆盖核查 - 三态判据:见 §0.1(✅ 引入 client 或含真实业务 / 🟡 仅 page-templates 渲染空态 / ❌ 文件不存在)
- 对比基线:
e:\desktop\CICD\src\app\(dashboard)\teacher\(CICD 原版 53 页) - 规划依据:
apps/portal-shell/ARCHITECTURE.md§9.1(教师域 56 页规划)
七、附录
7.1 教师域 63 个 page.tsx 完整清单
| # | 路径 | 状态 | 集成的 client |
|---|---|---|---|
| 1 | /shell/teacher |
✅ | dashboard-cards-client |
| 2 | /shell/teacher/ai/ai-assist |
✅ | ai-assist-client |
| 3 | /shell/teacher/ai/ai-lesson-plan |
✅ | ai-lesson-plan-client |
| 4 | /shell/teacher/ai/ai-report |
✅ | ai-report-client |
| 5 | /shell/teacher/analytics |
✅ | analytics-client |
| 6 | /shell/teacher/analytics/[studentId] |
✅ | student-analytics-client |
| 7 | /shell/teacher/attendance |
✅ | attendance-client |
| 8 | /shell/teacher/attendance/report |
✅ | attendance-report-client |
| 9 | /shell/teacher/attendance/sheet |
✅ | attendance-sheet-client |
| 10 | /shell/teacher/attendance/stats |
✅ | attendance-stats-client |
| 11 | /shell/teacher/classes |
✅ | classes-list-client |
| 12 | /shell/teacher/classes/my |
✅ | classes-list-client(别名) |
| 13 | /shell/teacher/classes/[id] |
✅ | class-detail-client |
| 14 | /shell/teacher/classes/my/[id] |
✅ | class-detail-client(别名) |
| 15 | /shell/teacher/classes/schedule |
✅ | class-schedule-client |
| 16 | /shell/teacher/classes/students |
🟡 | (占位,建议重定向到 /students) |
| 17 | /shell/teacher/course-plans |
✅ | course-plans-list-client |
| 18 | /shell/teacher/course-plans/[id] |
✅ | course-plan-detail-client |
| 19 | /shell/teacher/diagnostic |
✅ | diagnostic-client |
| 20 | /shell/teacher/diagnostic/class/[classId] |
✅ | class-diagnostic-client |
| 21 | /shell/teacher/diagnostic/student/[studentId] |
✅ | student-diagnostic-client |
| 22 | /shell/teacher/elective |
✅ | elective-list-client |
| 23 | /shell/teacher/elective/create |
✅ | elective-create-client |
| 24 | /shell/teacher/elective/[id]/edit |
✅ | elective-edit-client |
| 25 | /shell/teacher/error-book |
✅ | error-book-client |
| 26 | /shell/teacher/exams |
✅ | exams-list-client |
| 27 | /shell/teacher/exams/all |
✅ | exams-list-client(别名) |
| 28 | /shell/teacher/exams/new |
✅ | new-exam-client |
| 29 | /shell/teacher/exams/create |
✅ | new-exam-client(别名) |
| 30 | /shell/teacher/exams/[id] |
✅ | exam-detail-client |
| 31 | /shell/teacher/exams/[id]/analytics |
✅ | exam-analytics-client |
| 32 | /shell/teacher/exams/[id]/build |
✅ | exam-build-client |
| 33 | /shell/teacher/exams/[id]/edit |
✅ | exam-edit-client |
| 34 | /shell/teacher/exams/[id]/proctoring |
✅ | proctoring-client |
| 35 | /shell/teacher/exams/grading |
🟡 | (占位,建议重定向到 /homework/submissions) |
| 36 | /shell/teacher/exams/grading/[submissionId] |
🟡 | (占位,建议重定向到 /homework/submissions/[submissionId]) |
| 37 | /shell/teacher/grades |
✅ | grades-client |
| 38 | /shell/teacher/grades/analytics |
✅ | grade-analytics-client |
| 39 | /shell/teacher/grades/entry |
✅ | grade-entry-client |
| 40 | /shell/teacher/grades/report-card |
✅ | report-card-client |
| 41 | /shell/teacher/grades/stats |
✅ | grade-stats-client |
| 42 | /shell/teacher/homework |
✅ | homework-list-client |
| 43 | /shell/teacher/homework/new |
✅ | new-homework-client |
| 44 | /shell/teacher/homework/assignments/create |
✅ | new-homework-client(别名) |
| 45 | /shell/teacher/homework/[id] |
✅ | homework-detail-client |
| 46 | /shell/teacher/homework/assignments/[id]/submissions |
✅ | submissions-list-client |
| 47 | /shell/teacher/homework/submissions |
✅ | submissions-list-client |
| 48 | /shell/teacher/homework/submissions/[submissionId] |
✅ | submission-grading-client |
| 49 | /shell/teacher/homework/submissions/[submissionId]/scan-grading |
✅ | scan-grading-client |
| 50 | /shell/teacher/knowledge-graph |
✅ | knowledge-graph-client |
| 51 | /shell/teacher/leave |
✅ | leave-client |
| 52 | /shell/teacher/lesson-plans |
✅ | lesson-plans-list-client |
| 53 | /shell/teacher/lesson-plans/new |
✅ | new-lesson-plan-client |
| 54 | /shell/teacher/lesson-plans/calendar |
✅ | lesson-plan-calendar-client |
| 55 | /shell/teacher/lesson-plans/heatmap |
✅ | lesson-plan-heatmap-client |
| 56 | /shell/teacher/lesson-plans/library |
✅ | lesson-plan-library-client |
| 57 | /shell/teacher/lesson-plans/[planId]/edit |
✅ | lesson-plan-edit-client |
| 58 | /shell/teacher/practice |
✅ | practice-client |
| 59 | /shell/teacher/questions |
✅ | questions-client |
| 60 | /shell/teacher/schedule-changes |
✅ | schedule-changes-client |
| 61 | /shell/teacher/students |
✅ | students-list-client |
| 62 | /shell/teacher/textbooks |
✅ | textbooks-list-client |
| 63 | /shell/teacher/textbooks/[id] |
✅ | textbook-detail-client |
7.2 features/teacher 模块与 client 组件清单(20 模块 / 55 client)
| 模块目录 | client 组件数 | client 组件清单 |
|---|---|---|
| ai | 3 | ai-assist / ai-lesson-plan / ai-report |
| analytics | 2 | analytics / student-analytics |
| attendance | 4 | attendance / attendance-report / attendance-sheet / attendance-stats |
| classes | 3 | classes-list / class-detail / class-schedule |
| course-plans | 2 | course-plans-list / course-plan-detail |
| dashboard | 1 | dashboard-cards |
| diagnostic | 3 | diagnostic / class-diagnostic / student-diagnostic |
| elective | 3 | elective-list / elective-create / elective-edit |
| error-book | 1 | error-book |
| exams | 7 | exams-list / new-exam / exam-detail / exam-analytics / exam-build / exam-edit / proctoring |
| grades | 5 | grades / grade-analytics / grade-entry / report-card / grade-stats |
| homework | 8 | homework-list / new-homework / homework-detail / submissions-list / submission-grading / scan-grading |
| knowledge-graph | 1 | knowledge-graph |
| leave | 1 | leave |
| lesson-plans | 6 | lesson-plans-list / new-lesson-plan / lesson-plan-calendar / lesson-plan-heatmap / lesson-plan-library / lesson-plan-edit |
| practice | 1 | practice |
| proctoring | 1 | proctoring(共享给 exams) |
| questions | 1 | questions |
| schedule-changes | 1 | schedule-changes |
| students | 1 | students-list |
| textbooks | 2 | textbooks-list / textbook-detail |
注:proctoring-client 位于
features/teacher/proctoring/,被exams/[id]/proctoring/page.tsx集成;scan-grading-client 位于features/teacher/homework/,被homework/submissions/[submissionId]/scan-grading/page.tsx集成。
八、变更历史
| 日期 | 版本 | 变更内容 |
|---|---|---|
| 2026-07-24 | v1 | 初版核查(53→63 页迁移分析) |
| 2026-08-04 | v2 | 严格三态核查(逐页读 page.tsx):60 ✅ / 3 🟡 / 0 ❌;3 占位页改为重定向建议;15 功能差距页归 P1-P2 backlog;补全附录 §七.1 63 页完整清单 + §七.2 55 client 清单 |