# 教师域功能迁移差异分析报告 > 对比基准:CICD 项目(`E:\Desktop\CICD`) → portal-shell 项目(`apps/portal-shell`) > 生成日期:2026-07-27 > 用途:后续迁移工作的依据清单 ## 对比范围说明 | 维度 | CICD | portal-shell | | ------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------- | | 教师页面入口 | `src/app/(dashboard)/teacher/` | `src/app/shell/teacher/` | | 教师域模块 | `src/modules/{exams,grades,homework,lesson-preparation,attendance,classes,diagnostic,elective,error-book,course-plans,leave-requests,questions,textbooks,ai,proctoring,adaptive-practice,dashboard}/` | `src/features/teacher/{对应模块}/` | | 数据层 | Server Actions + data-access | `src/lib/api/` GraphQL hooks + MSW 兜底 | | 路由结构 | `(dashboard)` 路由组 | `shell` 路由组 | > **架构差异说明**:portal-shell 采用 GraphQL hooks(`useXxx`)替代 CICD 的 Server Actions(`actions*.ts`)+ data-access 层(`data-access*.ts`)。因此 CICD 中的 `actions*.ts` / `data-access*.ts` / `schema.ts` / `types.ts` 等非组件文件在 portal-shell 中**按设计未迁移**,对应能力由 `lib/api/*.ts` + `features/*/transformations.ts` 承担。本报告对这类"按架构设计未迁移"的文件不予标记为缺失,仅关注**组件/UI 能力**层面的缺失与简化。 --- ## 第一部分:缺失页面清单(CICD 有但 portal-shell 没有的路由) ### 1.1 真正缺失的路由 | CICD 路由 | 对应文件 | portal-shell 状态 | 备注 | | -------------------- | ---------------------------- | ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `/teacher/dashboard` | `teacher/dashboard/page.tsx` | ⚠️ 功能合并 | portal-shell 将仪表盘合并进 `/teacher/page.tsx`(`TeacherDashboardPage`),功能保留但路由路径不同。CICD 的 `/teacher/page.tsx`(773B)是入口跳转,`/teacher/dashboard/page.tsx`(835B)是实际仪表盘 | **结论**:portal-shell 无完全缺失的教师路由。`/teacher/dashboard` 被合并到 `/teacher` 根路由,属结构性调整而非缺失。 ### 1.2 路由名称变更(非缺失,但路径不同) | CICD 路由 | portal-shell 路由 | 说明 | | ------------------------------- | -------------------------- | ---------------------------------------------------------- | | `/teacher/exams/[id]/edit-rich` | `/teacher/exams/[id]/edit` | 重命名;实现由 Tiptap 简化为 contentEditable(见第二部分) | ### 1.3 portal-shell 新增的路由(CICD 没有) | portal-shell 路由 | 说明 | | ------------------------------------------------------ | ---------------------------------------------------------- | | `/teacher/ai/ai-assist` | AI 助教页(CICD 中 ai 模块以 widget 形式嵌入,无独立路由) | | `/teacher/ai/ai-lesson-plan` | AI 教案页 | | `/teacher/ai/ai-report` | AI 报告页 | | `/teacher/analytics`、`/teacher/analytics/[studentId]` | 学情分析页(CICD 中归属 grades/analytics) | | `/teacher/knowledge-graph` | 知识图谱页(CICD 中归属 textbooks 模块的 graph 组件) | | `/teacher/students` | 学生列表页 | | `/teacher/homework/[id]` | 作业详情(CICD 用 `assignments/[id]`) | | `/teacher/homework/new` | 新建作业(CICD 用 `assignments/create`) | | `/teacher/classes/[id]` | 班级详情顶层路由(CICD 仅 `my/[id]`) | --- ## 第二部分:简化迁移页面清单(portal-shell 实现是简化版,需补全功能) | 页面路由 | CICD 实现 | portal-shell 实现 | 简化点 | 补全建议 | | ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | | `/teacher/exams/[id]/edit`(原 edit-rich) | Tiptap 富文本编辑器(`exam-rich-editor.tsx` 懒加载 `exam-rich-editor-inner.tsx`,含 7 个扩展节点:blank-node / dotted-mark / group-block / image-node / question-block / section-block;`selection-toolbar.tsx`;双向转换 3 文件) | `exam-rich-form.tsx` 使用 `contentEditable` + `document.execCommand`(见文件头注释:"移除 ExamRichEditor 依赖,使用 contentEditable 简化实现") | 缺失整个 Tiptap 编辑器基础设施、自定义节点扩展、结构与编辑器双向转换、选区工具栏 | 迁移 `editor/` 目录全部文件 + `@tiptap/*` 依赖 | | `/teacher/lesson-plans/[planId]/edit` | `paper-editor.tsx` 基于 Tiptap(依赖 `useLessonPlanEditor` hook)+ `textbook-tiptap-editor.tsx` | `paper-editor.tsx` 使用 `contentEditable` + `document.execCommand`(见文件头注释:"使用 contentEditable 替代 Tiptap,prop-driven") | 富文本能力退化,无法支持复杂块级结构 | 引入 Tiptap,迁移 `textbook-tiptap-editor.tsx` | | `/teacher/exams/[id]/proctoring` | 独立 `proctoring` 模块(`anti-cheat-monitor.tsx` / `exam-mode-config.tsx` / `proctoring-dashboard.tsx`)+ WebSocket 实时推送 | `proctoring-client.tsx` 使用 5s 轮询模拟实时刷新(见文件头注释:"WS 契约未就绪...通过内置 5s 轮询模拟实时刷新") | 缺反作弊监控、考试模式配置、WS 实时推送 | 待 WS 契约就绪后改接实时推送;补 `anti-cheat-monitor` / `exam-mode-config` 组件 | | `/teacher/exams/[id]/build` | 组卷工作台 + `exam-assembly.tsx` 完整子组件 | `exam-build-client.tsx` 三栏布局存在,但 `@contract-pending` 全 MSW 兜底 | 契约未接通,数据为 mock | 接通 `examBuild` / `questionsLibrary` / `saveExamBuild` 真实契约 | | `/teacher/homework/submissions/[submissionId]/scan-grading` | `homework-scan-grading-view.tsx` | `scan-grading-client.tsx`(重命名),`@contract-pending` MSW 兜底 | 契约未接通 | 接通 `submissionDetail` / `saveScanGrading` 真实契约 | | `/teacher/grades/entry` | `batch-grade-entry.tsx` + 独立 `hooks/use-batch-grade-entry-undo.ts` + `hooks/use-draft-lock.ts` | `batch-grade-entry.tsx` 存在但 undo hook **内联为本地实现** | 撤销逻辑内联,未独立 Hook 化 | 当前功能完整,若需复用可抽出 hook | | `/teacher/attendance/*`(sheet/stats/report) | 独立 10+ 子组件(`attendance-sheet.tsx` / `attendance-trend-chart.tsx` / `attendance-report-print.tsx` / `attendance-warnings-card.tsx` / `attendance-grade-correlation-card.tsx` / `class-comparison-card.tsx` / `student-attendance-view.tsx` / `attendance-rules-form.tsx` / `attendance-stats-class-selector.tsx` / `attendance-record-list.tsx` / `attendance-page-layout.tsx`) | 4 个 client 文件,子组件内联或缺失 | 缺趋势图、成绩相关性卡、预警卡、班级对比卡、打印、规则表单、记录列表等 | 至少补 `attendance-trend-chart` / `attendance-report-print` / `attendance-warnings-card` | | `/teacher/error-book` | 13 个子组件(含 5 个图表 + 2 个对话框 + `grouped-student-error-table` / `subject-tabs` / `class-filter` / `review-buttons` / `error-book-item-card` / `error-book-list`) | 仅 `error-book-list-client.tsx` 1 个 client,无 components 子目录 | 图表与对话框全缺,列表能力退化 | 补齐图表组件与详情对话框 | | `/teacher/textbooks/[id]` | 22 个组件(含知识图谱 9 个 + 教材阅读器 3 个 + 章节管理 2 个 + 知识点 2 个 + 表单 6 个)+ 8 个 hooks + `graph-layout.ts` | 仅 `textbook-detail-client.tsx` + `textbooks-list-client.tsx` + `transformations.ts`;图谱能力拆到独立 `knowledge-graph` feature(仅 1 个 client) | 阅读器、章节管理、知识点 CRUD、图谱交互层全缺 | 补齐教材阅读器与章节管理 | | `/teacher/questions` | 12 个组件(`create-question-dialog` / `create-question-button` / `knowledge-point-selector` / `options-editor` / `question-bank-results-client` / `question-columns` / `question-data-table` 等) | 6 个组件(`batch-operations` / `import-export-buttons` / `question-actions` / `question-cascade-filter` / `question-content-renderer` / `index`) | 缺题目创建对话框、知识点选择器、选项编辑器、题目数据表 | 补齐 `create-question-dialog` / `knowledge-point-selector` / `options-editor` / `question-data-table` | | `/teacher/ai/*`(3 页面) | 15+ 组件(`ai-assistant-widget` / `ai-chat-panel` / `ai-chat-input` / `ai-chat-messages` / `ai-chart-renderer` / `ai-markdown-renderer` / `ai-provider-selector` / `ai-usage-dashboard` / `ai-lesson-content-generator` / `ai-grading-assist` / `ai-error-book-analysis` / `ai-question-variant-generator` 等)+ context + 5 hooks + services | 仅 3 个 client(`ai-assist-client.tsx` / `ai-lesson-plan-client.tsx` / `ai-report-client.tsx`)+ `transformations.ts` | AI 聊天面板、图表渲染、Markdown 渲染、Provider 选择器、用量看板等全缺 | 至少补 `ai-chat-panel` / `ai-markdown-renderer` / `ai-provider-selector` / `ai-usage-dashboard` | --- ## 第三部分:每个模块的缺失组件清单 > 标注规则:✅ 已迁移;❌ 缺失;⚠️ 存在但简化/重命名;➖ 按架构设计未迁移(Server Actions / data-access / schema 等非组件文件,portal-shell 用 GraphQL hooks 替代) ### 3.1 exams 模块 #### 组件(components/) | CICD 文件 | portal-shell 状态 | 备注 | | ------------------------------------- | ----------------- | --------------------------- | | `assembly/exam-paper-preview.tsx` | ❌ 缺失 | assembly/ 下未迁移此文件 | | `assembly/question-bank-list.tsx` | ✅ 已迁移 | | | `assembly/selected-question-list.tsx` | ✅ 已迁移 | | | `assembly/structure-editor.tsx` | ✅ 已迁移 | | | `exam-actions.tsx` | ✅ 已迁移 | | | `exam-ai-generator.tsx` | ✅ 已迁移 | AI 出题 | | `exam-analytics-dashboard.tsx` | ✅ 已迁移 | | | `exam-assembly-config.tsx` | ✅ 已迁移 | | | `exam-assembly-question-pool.tsx` | ✅ 已迁移 | | | `exam-assembly-selected.tsx` | ✅ 已迁移 | | | `exam-assembly.tsx` | ✅ 已迁移 | 试卷组装 | | `exam-basic-info-form.tsx` | ✅ 已迁移 | | | `exam-boundaries.tsx` | ❌ 缺失 | 分数边界组件 | | `exam-card.tsx` | ✅ 已迁移 | | | `exam-columns.tsx` | ❌ 缺失 | 表格列定义 | | `exam-data-table.tsx` | ✅ 已迁移 | | | `exam-form-types.ts` | ✅ 已迁移 | | | `exam-form.tsx` | ✅ 已迁移 | | | `exam-grid.tsx` | ✅ 已迁移 | | | `exam-mode-selector.tsx` | ✅ 已迁移 | | | `exam-preview-dialog.tsx` | ✅ 已迁移 | | | `exam-preview-question-editor.tsx` | ✅ 已迁移 | | | `exam-preview-utils.ts` | ✅ 已迁移 | | | `exam-preview.tsx` | ✅ 已迁移 | | | `exam-rich-form.tsx` | ⚠️ 简化 | contentEditable 替代 Tiptap | | `exam-viewer.tsx` | ✅ 已迁移 | | | `question-options-editor.tsx` | ✅ 已迁移 | | | `question-sub-questions-editor.tsx` | ✅ 已迁移 | | #### Tiptap 编辑器(editor/)—— 整目录缺失(17 文件) `exam-rich-editor.tsx`(懒加载入口)/ `exam-rich-editor-inner.tsx`(Tiptap 实现)/ `exam-rich-editor-types.ts` / `editor-to-structure.ts` / `structure-to-editor.ts` / `exam-nodes-to-editor-doc.ts` / `selection-toolbar.tsx` / `types.ts` / `index.ts` / `extensions/`(blank-node / dotted-mark / group-block / image-node / index / question-block / section-block 共 7 文件)/ `utils/count-questions.ts` —— **全部 ❌ 缺失** #### Hooks(hooks/)—— 整目录缺失(4 文件) `use-exam-preview.ts` / `use-exam-preview-rewrite.ts` / `use-exam-preview-state.ts` / `use-exam-preview-tasks.ts` —— **全部 ❌ 缺失** #### AI Pipeline(ai-pipeline/)—— 整目录缺失(5 文件) `auto-mark.ts` / `index.ts` / `parse.ts` / `request.ts` / `structure.ts` —— **全部 ❌ 缺失** #### Services / Config / Utils `services/exam-service-context.tsx` / `services/exam-service-port.ts` / `services/index.ts` / `config/exam-widgets.ts` / `utils/exam-structure-tree.ts` / `utils/normalize-structure.ts` / `lib/type-guards.ts` —— **全部 ❌ 缺失** #### 非组件文件(按架构设计未迁移) `actions.ts` / `actions-helpers.ts` / `actions-rich-editor.ts` / `data-access.ts` / `data-access-cross-module.ts` / `data-access-error-collection.ts` / `stats-service.ts` / `types.ts` ➖ 由 `lib/api/exams.ts` + `transformations.ts` 替代 ### 3.2 grades 模块 #### 组件(components/)—— 全部已迁移(30+ 文件) `batch-grade-entry.tsx` + 5 子组件(dialog/selectors/stats/table/toolbar)/ `class-comparison-chart.tsx` / `class-grade-report.tsx` / `draft-lock-banner.tsx` / `excel-import-dialog.tsx` / `export-button.tsx` / `grade-distribution-chart.tsx` / `grade-record-detail.tsx` / `grade-record-form.tsx` / `grade-record-list.tsx` / `grade-record-row.tsx` / `grade-trend-card.tsx` / `grade-trend-chart.tsx` / `growth-archive-chart.tsx` / `knowledge-point-mastery-chart.tsx` / `ranking-trend-card.tsx` / `report-card-print-action.tsx` / `report-card-print-button.tsx` / `report-card-view.tsx` / `school-wide-summary-card.tsx` / `score-cell.tsx` / `stats-class-selector.tsx` / `student-grade-summary.tsx` / `subject-comparison-chart.tsx` —— **全部 ✅ 已迁移** #### Hooks / Lib | CICD 文件 | portal-shell 状态 | | -------------------------------------------- | ---------------------------------------- | | `hooks/use-batch-grade-entry-undo.ts` | ⚠️ 内联到 `batch-grade-entry.tsx` | | `hooks/use-draft-lock.ts` | ⚠️ 内联 | | `lib/grade-utils.ts` | ❌ 缺失 | | `lib/notify.ts` | ❌ 缺失(用 `@/shared/lib/notify` 替代) | | `lib/report-card.ts` | ❌ 缺失 | | `lib/scope-check.ts` / `lib/scope-filter.ts` | ❌ 缺失(权限范围校验) | #### 非组件文件(按架构设计未迁移) `actions*.ts`(6 个)/ `data-access*.ts`(10 个)/ `export.ts` / `import-export.ts` / `stats-service.ts` / `schema.ts` / `types.ts` ➖ 由 `lib/api/grades.ts` 替代 ### 3.3 homework 模块 #### 组件(components/) | CICD 文件 | portal-shell 状态 | 备注 | | ------------------------------------------------------ | ----------------- | ------------------------------ | | `excellent-submissions.tsx` | ❌ 缺失 | 优秀提交展示 | | `homework-assignment-exam-content-card.tsx` | ❌ 缺失 | 作业关联试卷内容卡 | | `homework-assignment-exam-error-explorer.tsx` | ❌ 缺失 | 作业试卷错误探索 | | `homework-assignment-exam-error-explorer-lazy.tsx` | ❌ 缺失 | 懒加载版本 | | `homework-assignment-exam-preview-pane.tsx` | ❌ 缺失 | 作业试卷预览面板 | | `homework-assignment-form.tsx` | ❌ 缺失 | 作业表单 | | `homework-assignment-question-error-detail-panel.tsx` | ❌ 缺失 | 题目错误详情面板 | | `homework-assignment-question-error-overview-card.tsx` | ❌ 缺失 | 题目错误概览卡 | | `homework-batch-grading-view.tsx` | ✅ 已迁移 | 批量批改 | | `homework-grading-panel.tsx` | ✅ 已迁移 | | | `homework-grading-toolbar.tsx` | ✅ 已迁移 | | | `homework-grading-view.tsx` | ✅ 已迁移 | | | `homework-scan-grading-view.tsx` | ⚠️ 重命名 | 改为 `scan-grading-client.tsx` | | `homework-submission-result.tsx` | ✅ 已迁移 | | | `homework-take-confirm-dialog.tsx` | ✅ 已迁移 | | | `homework-take-question.tsx` | ✅ 已迁移 | | | `homework-take-sidebar.tsx` | ✅ 已迁移 | | | `homework-take-toolbar.tsx` | ✅ 已迁移 | | | `homework-take-view.tsx` | ✅ 已迁移 | | | `question-renderer.tsx` | ✅ 已迁移 | | | `scan-image-viewer.tsx` | ✅ 已迁移 | | | `scan-uploader.tsx` | ✅ 已迁移 | | | `student-homework-review-view.tsx` | ❌ 缺失 | 学生作业复习视图 | #### 非组件文件(按架构设计未迁移) `actions.ts` / `data-access*.ts`(7 个)/ `stats-service.ts` / `schema.ts` / `types.ts` ➖ 由 `lib/api/homework.ts` 替代 ### 3.4 lesson-plans 模块(CICD: lesson-preparation) #### 组件 —— 大部分已迁移,编辑器简化 | CICD 文件 | portal-shell 状态 | 备注 | | ---------------------------------------------------------------------------------- | ----------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | | `paper-editor/paper-editor.tsx` | ⚠️ 简化 | contentEditable 替代 Tiptap | | `paper-editor/textbook-tiptap-editor.tsx` | ❌ 缺失 | Tiptap 编辑器 | | `paper-editor/paper-toolbar.tsx` | ✅ 已迁移 | | | `paper-editor/paper-context-menu.tsx` | ✅ 已迁移 | | | `paper-editor/inline-node.tsx` | ✅ 已迁移 | | | `paper-editor/inline-qa-dialog.tsx` | ✅ 已迁移 | | | `blocks/` 目录(14 个块组件) | ✅ 已迁移 | objective/exercise/homework/import/interaction/key-point/new-teaching/reflection/rich-text/summary/text-study/blackboard + types + type-guards | | `detail-panel/` 目录(5 个文件) | ✅ 已迁移 | detail-head/panel/props/qa-editor | | `structure-tree/` 目录(2 个文件) | ✅ 已迁移 | structure-tree/tree-node-row | | `ai-feedback-dialog.tsx` | ✅ 已迁移 | AI 反馈 | | `ai-differentiation-dialog.tsx` | ✅ 已迁移 | | | `anchor-migration-banner.tsx` | ✅ 已迁移 | | | `attachment-picker.tsx` | ✅ 已迁移 | | | `consistency-check-dialog.tsx` | ✅ 已迁移 | | | `inline-question-editor.tsx` | ✅ 已迁移 | | | `knowledge-point-picker.tsx` | ✅ 已迁移 | | | `lesson-plan-calendar-client.tsx` | ✅ 已迁移 | 日历视图 | | `lesson-plan-card.tsx` | ✅ 已迁移 | | | `lesson-plan-dialogs.tsx` | ✅ 已迁移 | | | `lesson-plan-edit-client.tsx` | ✅ 已迁移 | | | `lesson-plan-heatmap-client.tsx` | ✅ 已迁移 | 热力图 | | `lesson-plan-library-client.tsx` | ✅ 已迁移 | | | `lesson-plan-list-client.tsx` | ✅ 已迁移 | | | `lesson-plan-mobile-view.tsx` | ✅ 已迁移 | | | `lesson-plan-outline-tree.tsx` | ✅ 已迁移 | | | `lesson-plan-publish-button.tsx` | ✅ 已迁移 | | | `lesson-plan-readonly-view.tsx` | ✅ 已迁移 | | | `lesson-plan-toolbar.tsx` | ✅ 已迁移 | | | `new-lesson-plan-client.tsx` | ✅ 已迁移 | | | `version-diff-view.tsx` / `version-diff-viewer.tsx` / `version-history-drawer.tsx` | ✅ 已迁移 | 版本对比 | #### 非组件文件(按架构设计未迁移) `actions*.ts`(12 个)/ `data-access*.ts`(13 个)/ `publish-service.ts` / `ai-suggest.ts` / `seed-templates.ts` / `constants.ts` / `schema.ts` / `types.ts` ➖ 由 `lib/api/lesson-plans.ts` 替代 ### 3.5 attendance 模块 #### 组件(components/)—— 大量缺失 | CICD 文件 | portal-shell 状态 | 备注 | | --------------------------------------- | ----------------- | ------------------ | | `attendance-grade-correlation-card.tsx` | ❌ 缺失 | 考勤成绩相关性卡 | | `attendance-page-layout.tsx` | ❌ 缺失 | 页面布局 | | `attendance-record-list.tsx` | ❌ 缺失 | 记录列表 | | `attendance-report-print.tsx` | ❌ 缺失 | 报告打印 | | `attendance-rules-form.tsx` | ❌ 缺失 | 规则表单 | | `attendance-sheet.tsx` | ❌ 缺失 | 考勤表(独立组件) | | `attendance-stats-class-selector.tsx` | ❌ 缺失 | 统计班级选择器 | | `attendance-trend-chart.tsx` | ❌ 缺失 | 趋势图 | | `attendance-warnings-card.tsx` | ❌ 缺失 | 预警卡 | | `class-comparison-card.tsx` | ❌ 缺失 | 班级对比卡 | | `student-attendance-view.tsx` | ❌ 缺失 | 学生考勤视图 | #### portal-shell 已有 `attendance-list-client.tsx` / `attendance-sheet-client.tsx` / `attendance-stats-client.tsx` / `attendance-report-client.tsx` / `transformations.ts`(4 个 client 整合了部分能力,但子组件未拆分) #### 非组件文件(按架构设计未迁移) `actions.ts` / `data-access*.ts`(3 个)/ `correlation-compute.ts` / `trend-compute.ts` / `warning-compute.ts` / `export.ts` / `notifications.ts` / `constants.ts` / `schema.ts` / `types.ts` ➖ 部分计算逻辑(`trend-compute` / `warning-compute` / `correlation-compute`)应迁入 `transformations.ts` ### 3.6 classes 模块 #### 组件 —— 全部已迁移 | CICD 文件 | portal-shell 状态 | | ---------------------------------------------------------------------------------------- | ----------------------------------- | | `class-detail/` 目录(7 个 widget + edit-class-dialog) | ✅ 已迁移 | | `class-delete-dialog.tsx` | ✅ 已迁移 | | `class-form-dialog.tsx` | ❌ 缺失(合并入 edit-class-dialog) | | `class-form-utils.ts` | ❌ 缺失 | | `class-invitation-manager.tsx` | ✅ 已迁移 | | `class-list-table.tsx` | ✅ 已迁移 | | `class-list-toolbar.tsx` | ✅ 已迁移 | | `admin-classes-view.tsx` | ➖ 管理员视图(非教师域) | | `grade-classes-view.tsx` | ➖ 年级视图(非教师域) | | `my-classes-grid.tsx` | ✅ 已迁移 | | `schedule-create-dialog.tsx` / `schedule-delete-dialog.tsx` / `schedule-edit-dialog.tsx` | ✅ 已迁移 | | `schedule-utils.ts` | ✅ 已迁移 | | `schedule-view.tsx` | ✅ 已迁移 | | `students-table.tsx` | ✅ 已迁移 | #### Hooks / Lib | CICD 文件 | portal-shell 状态 | | ---------------------------- | ------------------------- | | `hooks/use-class-data.ts` | ❌ 缺失 | | `hooks/use-class-filters.ts` | ❌ 缺失 | | `lib/admin-class-mappers.ts` | ➖ 管理员映射(非教师域) | ### 3.7 diagnostic 模块 #### 组件 / Services | CICD 文件 | portal-shell 状态 | 备注 | | ------------------------------------------ | ----------------- | ---------------------------------------------------- | | `components/class-diagnostic-view.tsx` | ⚠️ 整合 | portal-shell 用 `diagnostic-class-detail-client.tsx` | | `components/student-diagnostic-view.tsx` | ⚠️ 整合 | portal-shell 用 `student-diagnostic-client.tsx` | | `components/confidence-utils.ts` | ❌ 缺失 | 置信度工具 | | `components/mastery-radar-chart.tsx` | ❌ 缺失 | 掌握度雷达图 | | `components/report-list.tsx` | ❌ 缺失 | 报告列表 | | `services/default-diagnostic-service.ts` | ❌ 缺失 | | | `services/diagnostic-monitor-context.tsx` | ❌ 缺失 | | | `services/diagnostic-monitor.ts` | ❌ 缺失 | | | `services/diagnostic-service-context.tsx` | ❌ 缺失 | | | `services/diagnostic-service.ts` | ❌ 缺失 | | | `services/monitored-diagnostic-service.ts` | ❌ 缺失 | | #### 非组件文件(按架构设计未迁移) `actions.ts` / `data-access*.ts`(2 个)/ `export.ts` / `role-config.ts` / `stats-service.ts` / `schema.ts` / `types.ts` ➖ 由 `lib/api/diagnostic.ts` 替代 ### 3.8 elective 模块 #### 组件 | CICD 文件 | portal-shell 状态 | 备注 | | ---------------------------- | ----------------------- | ------------------------------------------------------------------------- | | `elective-course-detail.tsx` | ❌ 缺失 | 课程详情 | | `elective-course-form.tsx` | ⚠️ 整合 | portal-shell 用 `elective-create-client.tsx` / `elective-edit-client.tsx` | | `elective-course-list.tsx` | ⚠️ 整合 | portal-shell 用 `elective-list-client.tsx` | | `elective-page-layout.tsx` | ❌ 缺失 | 页面布局 | | `parent-selection-view.tsx` | ➖ 家长视图(非教师域) | | `student-selection-view.tsx` | ➖ 学生视图(非教师域) | #### Lib | CICD 文件 | portal-shell 状态 | | -------------------------- | ----------------------- | | `lib/lottery.ts` | ❌ 缺失(抽签算法) | | `lib/schedule-conflict.ts` | ❌ 缺失(课表冲突检测) | ### 3.9 error-book 模块 #### 组件(components/)—— 几乎全缺 | CICD 文件 | portal-shell 状态 | 备注 | | ------------------------------------ | ----------------- | ---------------------------------- | | `add-error-book-dialog.tsx` | ❌ 缺失 | 添加错题对话框 | | `chapter-weakness-chart.tsx` | ❌ 缺失 | 章节薄弱图 | | `class-error-bar-chart.tsx` | ❌ 缺失 | 班级错题柱状图 | | `class-filter.tsx` | ❌ 缺失 | 班级筛选 | | `error-book-detail-dialog.tsx` | ❌ 缺失 | 错题详情对话框 | | `error-book-item-card.tsx` | ❌ 缺失 | 错题卡片 | | `error-book-list.tsx` | ❌ 缺失 | 列表(portal-shell 内联到 client) | | `grouped-student-error-table.tsx` | ❌ 缺失 | 分组学生错题表 | | `knowledge-point-weakness-chart.tsx` | ❌ 缺失 | 知识点薄弱图 | | `review-buttons.tsx` | ❌ 缺失 | 复习按钮 | | `subject-distribution-chart.tsx` | ❌ 缺失 | 学科分布图 | | `subject-tabs.tsx` | ❌ 缺失 | 学科 Tab | | `top-wrong-questions.tsx` | ❌ 缺失 | 高频错题 | #### portal-shell 已有 仅 `error-book-list-client.tsx` + `transformations.ts` #### 非组件文件(按架构设计未迁移) `actions.ts` / `data-access*.ts`(3 个)/ `sm2-algorithm.ts`(SM2 复习算法)/ `schema.ts` / `types.ts` ➖ `sm2-algorithm.ts` 是核心算法,建议迁入 `transformations.ts` 或独立 lib ### 3.10 course-plans 模块 #### 组件(components/)—— 全缺 | CICD 文件 | portal-shell 状态 | 备注 | | ----------------------------- | ----------------- | ----------------------------------------------- | | `course-plan-calendar.tsx` | ❌ 缺失 | 日历组件 | | `course-plan-detail.tsx` | ⚠️ 整合 | portal-shell 用 `course-plan-detail-client.tsx` | | `course-plan-form.tsx` | ❌ 缺失 | 表单 | | `course-plan-item-editor.tsx` | ❌ 缺失 | 条目编辑器 | | `course-plan-list.tsx` | ⚠️ 整合 | portal-shell 用 `course-plan-list-client.tsx` | | `course-plan-progress.tsx` | ❌ 缺失 | 进度组件 | | `sortable-week-row.tsx` | ❌ 缺失 | 可排序周行 | | `template-picker-dialog.tsx` | ❌ 缺失 | 模板选择对话框 | #### Lib | CICD 文件 | portal-shell 状态 | | ----------------------- | ----------------- | | `lib/calendar-utils.ts` | ❌ 缺失 | | `lib/export-utils.ts` | ❌ 缺失 | | `lib/track-event.ts` | ❌ 缺失 | ### 3.11 leave-requests 模块(portal-shell: leave) #### 组件 | CICD 文件 | portal-shell 状态 | 备注 | | ------------------------- | ----------------- | --------------------------------------- | | `leave-request-form.tsx` | ❌ 缺失 | 请假表单 | | `leave-request-list.tsx` | ⚠️ 整合 | portal-shell 用 `leave-list-client.tsx` | | `leave-review-dialog.tsx` | ❌ 缺失 | 审批对话框 | | `leave-review-list.tsx` | ❌ 缺失 | 审批列表 | ### 3.12 questions 模块 #### 组件(components/) | CICD 文件 | portal-shell 状态 | 备注 | | ---------------------------------- | ----------------- | -------------- | | `batch-operations.tsx` | ✅ 已迁移 | | | `create-question-button.tsx` | ❌ 缺失 | 创建题目按钮 | | `create-question-dialog.tsx` | ❌ 缺失 | 创建题目对话框 | | `import-export-buttons.tsx` | ✅ 已迁移 | | | `knowledge-point-selector.tsx` | ❌ 缺失 | 知识点选择器 | | `options-editor.tsx` | ❌ 缺失 | 选项编辑器 | | `question-actions.tsx` | ✅ 已迁移 | | | `question-bank-results-client.tsx` | ❌ 缺失 | 题库结果客户端 | | `question-cascade-filter.tsx` | ✅ 已迁移 | | | `question-columns.tsx` | ❌ 缺失 | 表格列定义 | | `question-content-renderer.tsx` | ✅ 已迁移 | | | `question-data-table.tsx` | ❌ 缺失 | 题目数据表 | #### Utils | CICD 文件 | portal-shell 状态 | | ------------------------ | ----------------- | | `utils/parse-content.ts` | ❌ 缺失 | | `utils/track-event.ts` | ❌ 缺失 | ### 3.13 textbooks 模块 #### 组件(components/)—— 几乎全缺 | CICD 文件 | portal-shell 状态 | 备注 | | ------------------------------ | ----------------- | ---------------- | | `chapter-sidebar-list.tsx` | ❌ 缺失 | 章节侧边栏 | | `create-chapter-dialog.tsx` | ❌ 缺失 | 创建章节对话框 | | `force-graph.tsx` | ❌ 缺失 | 力导向图 | | `graph-kp-node.tsx` | ❌ 缺失 | 图谱知识点节点 | | `graph-node-detail-panel.tsx` | ❌ 缺失 | 图谱节点详情面板 | | `graph-prerequisite-edge.tsx` | ❌ 缺失 | 图谱前置依赖边 | | `graph-toolbar.tsx` | ❌ 缺失 | 图谱工具栏 | | `knowledge-graph-controls.tsx` | ❌ 缺失 | 图谱控制 | | `knowledge-graph-inner.tsx` | ❌ 缺失 | 图谱内部 | | `knowledge-graph-node.tsx` | ❌ 缺失 | 图谱节点 | | `knowledge-graph.tsx` | ❌ 缺失 | 图谱主组件 | | `knowledge-point-dialogs.tsx` | ❌ 缺失 | 知识点对话框 | | `knowledge-point-list.tsx` | ❌ 缺失 | 知识点列表 | | `textbook-card.tsx` | ❌ 缺失 | 教材卡片 | | `textbook-content-panel.tsx` | ❌ 缺失 | 教材内容面板 | | `textbook-form-dialog.tsx` | ❌ 缺失 | 教材表单对话框 | | `textbook-form-fields.tsx` | ❌ 缺失 | 教材表单字段 | | `textbook-reader-content.tsx` | ❌ 缺失 | 阅读器内容 | | `textbook-reader-toc.tsx` | ❌ 缺失 | 阅读器目录 | | `textbook-reader.tsx` | ❌ 缺失 | 阅读器主组件 | | `textbook-settings-dialog.tsx` | ❌ 缺失 | 教材设置对话框 | #### Hooks(hooks/)—— 全缺 `use-graph-data.ts` / `use-knowledge-point-actions.ts` / `use-kp-create.ts` / `use-kp-crud.ts` / `use-kp-delete.ts` / `use-kp-dialog-state.ts` / `use-kp-update.ts` / `use-text-selection.ts` —— **全部 ❌ 缺失** #### Lib / Utils | CICD 文件 | portal-shell 状态 | | -------------------- | ----------------------- | | `lib/type-guards.ts` | ❌ 缺失 | | `graph-layout.ts` | ❌ 缺失(图谱布局算法) | | `utils.ts` | ❌ 缺失 | | `analytics.tsx` | ❌ 缺失 | | `constants.ts` | ❌ 缺失 | #### portal-shell 已有 `textbook-detail-client.tsx` + `textbooks-list-client.tsx` + `transformations.ts`;图谱能力拆到独立 `knowledge-graph` feature(仅 `knowledge-graph-client.tsx` + `transformations.ts`) ### 3.14 ai 模块 #### 组件(components/)—— 大量缺失 | CICD 文件 | portal-shell 状态 | 备注 | | ------------------------------------------------------------------ | --------------------- | --------------- | | `ai-assistant-widget.tsx` / `ai-assistant-widget-inner.tsx` | ❌ 缺失 | AI 助手浮窗 | | `ai-chart-renderer.tsx` | ❌ 缺失 | 图表渲染 | | `ai-chat-input.tsx` / `ai-chat-messages.tsx` / `ai-chat-panel.tsx` | ❌ 缺失 | 聊天面板三件套 | | `ai-child-summary.tsx` | ➖ 家长域(非教师域) | | `ai-error-book-analysis.tsx` | ❌ 缺失 | 错题分析 | | `ai-grading-assist.tsx` | ❌ 缺失 | 批改助手 | | `ai-lesson-content-generator.tsx` | ❌ 缺失 | 教案内容生成 | | `ai-markdown-renderer.tsx` | ❌ 缺失 | Markdown 渲染 | | `ai-provider-selector.tsx` | ❌ 缺失 | Provider 选择器 | | `ai-question-variant-generator.tsx` | ❌ 缺失 | 题目变体生成 | | `ai-study-path.tsx` | ➖ 学生域(非教师域) | | `ai-usage-dashboard.tsx` | ❌ 缺失 | 用量看板 | #### Context / Hooks / Services | CICD 文件 | portal-shell 状态 | | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------- | | `context/ai-client-provider.tsx` | ❌ 缺失 | | `context/create-ai-client-service.ts` | ❌ 缺失 | | `hooks/stream-utils.ts` / `use-ai-chat-stream.ts` / `use-ai-suggestion.ts` / `use-drag-position.ts` / `use-floating-ball.ts` / `use-position-persistence.ts` | ❌ 缺失 | | `services/ai-service.ts` / `content-safety.ts` / `prompt-templates.ts` / `usage-tracker.ts` | ❌ 缺失 | #### portal-shell 已有 `ai-assist-client.tsx` / `ai-lesson-plan-client.tsx` / `ai-report-client.tsx` / `transformations.ts`(3 个 client 是页面级整合,但底层聊天/流式/Provider 能力全缺) ### 3.15 proctoring 模块(CICD 独立模块,portal-shell 并入 exams) | CICD 文件 | portal-shell 状态 | 备注 | | -------------------------------------------- | ---------------------------------- | -------------------------------------------------- | | `components/anti-cheat-monitor.tsx` | ❌ 缺失 | 反作弊监控 | | `components/exam-mode-config.tsx` | ❌ 缺失 | 考试模式配置 | | `components/proctoring-dashboard.tsx` | ⚠️ 整合 | portal-shell 用 `exams/proctoring-client.tsx` 替代 | | `actions.ts` / `data-access.ts` / `types.ts` | ➖ 由 `lib/api/proctoring.ts` 替代 | ### 3.16 adaptive-practice 模块(CICD 有,portal-shell 并入 practice) #### 组件 —— 全缺 `answer-input.tsx` / `answer-result.tsx` / `question-card.tsx` / `question-content.tsx`(答题核心)/ `class-knowledge-point-weakness-chart.tsx` / `class-practice-comparison-table.tsx` / `inactive-students-alert.tsx` / `practice-type-breakdown-chart.tsx` / `student-practice-ranking-table.tsx`(教师域分析图表)/ `practice-history.tsx` / `practice-result-view.tsx` / `practice-session-view.tsx` / `practice-starter.tsx` / `practice-starter-with-nav.tsx`(练习流程)/ `services/practice-service.tsx` / `lib/answer-utils.ts` / `lib/errors.ts` / `lib/grading.ts` / `lib/source-meta.ts` / `lib/type-guards.ts` —— **全部 ❌ 缺失** #### portal-shell 已有 `practice/practice-list-client.tsx` + `transformations.ts`(仅列表页,练习流程与分析图表全缺) ### 3.17 dashboard 模块(teacher-dashboard 子目录) | CICD 文件 | portal-shell 状态 | 备注 | | ---------------------------------------------- | ----------------- | --------------------------------------- | | `teacher-dashboard/recent-submissions.tsx` | ❌ 缺失 | 最近提交 | | `teacher-dashboard/teacher-classes-card.tsx` | ❌ 缺失 | 班级卡 | | `teacher-dashboard/teacher-dashboard-view.tsx` | ⚠️ 整合 | portal-shell 内联到 `/teacher/page.tsx` | | `teacher-dashboard/teacher-grade-trends.tsx` | ❌ 缺失 | 成绩趋势卡 | | `teacher-dashboard/teacher-homework-card.tsx` | ❌ 缺失 | 作业卡 | | `teacher-dashboard/teacher-quick-actions.tsx` | ❌ 缺失 | 快捷操作 | | `teacher-dashboard/teacher-schedule.tsx` | ❌ 缺失 | 课表卡 | | `teacher-dashboard/teacher-todo-card.tsx` | ❌ 缺失 | 待办卡 | portal-shell 的 `/teacher/page.tsx` 用 `useTeacherDashboard` 接 data-ana 真实聚合查询,但仅展示 4 个 StatCard + 班级概览 + 预警,缺上述 7 个子组件卡片。 --- ## 第四部分:核心功能完整性检查结果 ### 4.1 exams 模块(4 项) | 核心功能 | 完整性 | 详细说明 | | ------------------------------------------- | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Tiptap 富文本编辑器(exam-rich-editor)** | ❌ **不完整** | portal-shell `exam-rich-form.tsx` 用 `contentEditable` + `document.execCommand` 替代 Tiptap。CICD 的整个 `editor/` 目录(17 个文件,含 7 个 Tiptap 扩展节点、双向转换、选区工具栏)未迁移。`/teacher/exams/[id]/edit` 路由对应 CICD 的 `edit-rich`,但实现退化。**影响**:无法支持试卷的题块/分节/分组/填空下划线/打点标记等结构化编辑 | | **AI 出题(exam-ai-generator)** | ✅ **完整** | `exam-ai-generator.tsx` 已迁移,改为 prop-driven(原版依赖 react-hook-form Control)。AI Provider 选择、预览、后台任务列表能力保留 | | **试卷组装(exam-assembly)** | ⚠️ **简化** | `exam-assembly.tsx` + `exam-assembly-config.tsx` + `exam-assembly-question-pool.tsx` + `exam-assembly-selected.tsx` + `assembly/` 3 子组件已迁移;但 `exam-build-client.tsx` 全 MSW 兜底(`@contract-pending`),`exam-boundaries.tsx` / `exam-columns.tsx` 缺失,`hooks/use-exam-preview*.ts`(4 个)缺 | | **监考(proctoring)** | ⚠️ **简化** | `proctoring-client.tsx` 存在(三栏布局:考试信息/学生状态/事件流),但用 5s 轮询模拟 WS 实时推送。CICD 独立 `proctoring` 模块的 `anti-cheat-monitor.tsx` / `exam-mode-config.tsx` 未迁移 | ### 4.2 grades 模块(3 项) | 核心功能 | 完整性 | 详细说明 | | --------------------------------- | ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **批量录入(batch-grade-entry)** | ✅ **完整** | `batch-grade-entry.tsx` + 5 子组件(dialog/selectors/stats/table/toolbar)全部迁移。undo hook 内联为本地 token + `useUndoGradeEntry` 调用(功能保留) | | **Excel 导入** | ✅ **完整** | `excel-import-dialog.tsx` 已迁移,用 `useDownloadGradeImportTemplate` + `useImportGradesFromExcel` hooks 替代 Server Actions。原生元素替代 shadcn Dialog/Select | | **报表打印(report-card-print)** | ✅ **完整** | `report-card-print-action.tsx` + `report-card-print-button.tsx` + `report-card-view.tsx` + `report-card-client.tsx` 全部迁移 | ### 4.3 homework 模块(2 项) | 核心功能 | 完整性 | 详细说明 | | ----------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **扫描批改(scan-grading)** | ⚠️ **简化** | `scan-grading-client.tsx`(重命名自 `homework-scan-grading-view.tsx`)存在,三栏布局保留,但 `@contract-pending` MSW 兜底。`scan-image-viewer.tsx` + `scan-uploader.tsx` 已迁移 | | **批量批改(batch-grading)** | ✅ **完整** | `homework-batch-grading-view.tsx` 已迁移,用 `useBatchAutoGrade` hook 替代 Server Action,原生 table + input 替代 shadcn Table/Checkbox | ### 4.4 lesson-plans 模块(5 项) | 核心功能 | 完整性 | 详细说明 | | ------------------------------------ | ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **教案编辑器(lesson-plan-editor)** | ❌ **不完整** | `paper-editor.tsx` 用 `contentEditable` 替代 Tiptap(见文件头注释)。`textbook-tiptap-editor.tsx` 未迁移。blocks/ 目录 14 个块组件已迁移,但编辑器内核退化。**影响**:复杂块级结构编辑能力受限 | | **AI 反馈(ai-feedback)** | ✅ **完整** | `ai-feedback-dialog.tsx` 已迁移,改为 prop-driven(原版依赖 `useLessonPlanAi` hook)。`ai-differentiation-dialog.tsx` 也已迁移 | | **版本对比(version-diff)** | ✅ **完整** | `version-diff-viewer.tsx` + `version-diff-view.tsx` + `version-history-drawer.tsx` 全部迁移 | | **日历视图(calendar)** | ✅ **完整** | `lesson-plan-calendar-client.tsx` 已迁移 | | **热力图(heatmap)** | ✅ **完整** | `lesson-plan-heatmap-client.tsx` 已迁移 | ### 4.5 attendance 模块(3 项) | 核心功能 | 完整性 | 详细说明 | | ------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | **考勤表(sheet)** | ⚠️ **简化** | `attendance-sheet-client.tsx` 存在,但 CICD 独立 `attendance-sheet.tsx` 组件未迁移(能力内联或缺失) | | **统计(stats)** | ⚠️ **简化** | `attendance-stats-client.tsx` 存在,但 `attendance-trend-chart.tsx` / `attendance-stats-class-selector.tsx` / `class-comparison-card.tsx` / `attendance-grade-correlation-card.tsx` 未迁移 | | **报告(report)** | ⚠️ **简化** | `attendance-report-client.tsx` 存在,但 `attendance-report-print.tsx`(打印)/ `attendance-warnings-card.tsx`(预警)未迁移 | ### 4.6 classes 模块(3 项) | 核心功能 | 完整性 | 详细说明 | | ------------ | ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **班级详情** | ✅ **完整** | `class-detail-client.tsx` + `class-detail/` 7 个 widget(header/overview-stats/quick-actions/schedule-widget/students-widget/assignments-widget/trends-widget)全部迁移 | | **学生管理** | ✅ **完整** | `students-table.tsx` 已迁移 | | **课表** | ✅ **完整** | `class-schedule-client.tsx` + `schedule-view.tsx` + 3 个 schedule dialog(create/edit/delete)+ `schedule-utils.ts` 全部迁移 | ### 4.7 diagnostic 模块(2 项) | 核心功能 | 完整性 | 详细说明 | | ------------ | ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | | **班级诊断** | ⚠️ **简化** | `diagnostic-class-detail-client.tsx` 存在,但 CICD `class-diagnostic-view.tsx` / `mastery-radar-chart.tsx`(掌握度雷达图)/ `report-list.tsx` 未迁移 | | **学生诊断** | ⚠️ **简化** | `student-diagnostic-client.tsx` + `student-diagnostic-transformations.ts` 存在,但 `student-diagnostic-view.tsx` 独立组件未迁移 | ### 4.8 ai 模块(3 项) | 核心功能 | 完整性 | 详细说明 | | ----------- | ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **AI 助教** | ⚠️ **简化** | `ai-assist-client.tsx` 存在(页面级),但 CICD `ai-assistant-widget` / `ai-chat-panel` / `ai-chat-input` / `ai-chat-messages` / `ai-markdown-renderer` / `ai-provider-selector` 等底层组件全缺,流式聊天能力缺失(`use-ai-chat-stream` / `stream-utils` 未迁移) | | **AI 报告** | ⚠️ **简化** | `ai-report-client.tsx` 存在(页面级),但 `ai-chart-renderer.tsx` / `ai-usage-dashboard.tsx` 未迁移 | | **AI 教案** | ⚠️ **简化** | `ai-lesson-plan-client.tsx` 存在(页面级),但 `ai-lesson-content-generator.tsx` 未迁移 | ### 4.9 核心功能完整性汇总 | 完整性 | 数量 | 功能列表 | | --------- | ----- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | ✅ 完整 | 10 项 | exams AI 出题、grades 批量录入、grades Excel 导入、grades 报表打印、homework 批量批改、lesson-plans AI 反馈、lesson-plans 版本对比、lesson-plans 日历视图、lesson-plans 热力图、classes(详情/学生/课表 3 项) | | ⚠️ 简化 | 11 项 | exams 试卷组装、exams 监考、homework 扫描批改、attendance(考勤表/统计/报告 3 项)、diagnostic(班级/学生 2 项)、ai(助教/报告/教案 3 项) | | ❌ 不完整 | 2 项 | **exams Tiptap 富文本编辑器**、**lesson-plans 教案编辑器** | --- ## 第五部分:迁移优先级建议 ### P0(阻断核心教学流程,建议优先补全) 1. **exams Tiptap 富文本编辑器**:迁移 `editor/` 全目录(17 文件)+ `@tiptap/*` 依赖,恢复试卷结构化编辑能力。涉及 7 个自定义节点扩展(blank-node / dotted-mark / group-block / image-node / question-block / section-block)+ 双向转换 + 选区工具栏 2. **lesson-plans Tiptap 编辑器**:迁移 `textbook-tiptap-editor.tsx`,恢复教案块级编辑能力。当前 `paper-editor.tsx` 用 contentEditable 退化,blocks/ 14 个块组件已就绪但内核简化 3. **attendance 趋势图与预警卡**:补 `attendance-trend-chart.tsx` / `attendance-warnings-card.tsx` / `attendance-report-print.tsx`,恢复考勤统计可视化与打印 ### P1(影响功能完整性) 4. **error-book 图表与对话框**:补 5 个图表组件(`chapter-weakness-chart` / `class-error-bar-chart` / `knowledge-point-weakness-chart` / `subject-distribution-chart` / `top-wrong-questions`)+ 2 个对话框 + `sm2-algorithm.ts` 复习算法 5. **questions 创建与编辑**:补 `create-question-dialog.tsx` / `knowledge-point-selector.tsx` / `options-editor.tsx` / `question-data-table.tsx`,恢复题目 CRUD 完整流程 6. **textbooks 阅读器与章节管理**:补 `textbook-reader*.tsx`(3 个)/ `chapter-sidebar-list.tsx` / `create-chapter-dialog.tsx`,恢复教材阅读与章节管理 7. **ai 聊天面板与流式**:补 `ai-chat-panel` 三件套(input/messages/panel)+ `ai-markdown-renderer` + `use-ai-chat-stream` + `ai-provider-selector`,恢复 AI 流式聊天能力 ### P2(增强体验) 8. **proctoring 反作弊**:补 `anti-cheat-monitor.tsx` / `exam-mode-config.tsx`,WS 契约就绪后改接实时推送(当前 5s 轮询) 9. **diagnostic 雷达图**:补 `mastery-radar-chart.tsx` / `confidence-utils.ts` / `report-list.tsx` 10. **dashboard 教师卡片**:补 7 个 teacher-dashboard 子组件卡片(recent-submissions / teacher-classes-card / teacher-grade-trends / teacher-homework-card / teacher-quick-actions / teacher-schedule / teacher-todo-card) 11. **course-plans 表单与日历**:补 `course-plan-form.tsx` / `course-plan-calendar.tsx` / `sortable-week-row.tsx` / `template-picker-dialog.tsx` / `course-plan-item-editor.tsx` / `course-plan-progress.tsx` 12. **homework 试卷关联**:补 `homework-assignment-exam-*`(5 个文件)/ `homework-assignment-form.tsx` / `excellent-submissions.tsx` / `student-homework-review-view.tsx` ### P3(按需补全) 13. **adaptive-practice 练习流程**:补答题核心组件(answer-input / answer-result / question-card / question-content)与教师分析图表(5 个) 14. **leave-requests 审批**:补 `leave-review-dialog.tsx` / `leave-review-list.tsx` / `leave-request-form.tsx` 15. **elective 抽签与冲突检测**:补 `lib/lottery.ts` / `lib/schedule-conflict.ts` / `elective-course-detail.tsx` / `elective-page-layout.tsx` 16. **exams 辅助**:补 `exam-boundaries.tsx` / `exam-columns.tsx` / `hooks/use-exam-preview*.ts`(4 个)/ `ai-pipeline/`(5 个)/ `services/`(3 个) --- ## 附录:架构差异说明 ### A.1 数据层架构差异(非缺失) CICD 采用 Next.js Server Actions 模式,每个模块包含: - `actions.ts` / `actions-*.ts`:Server Actions 入口 - `data-access.ts` / `data-access-*.ts`:数据访问层 - `schema.ts`:Zod 验证 - `types.ts`:类型定义 portal-shell 采用 GraphQL hooks 模式,对应能力由: - `src/lib/api/{module}.ts`:GraphQL 查询/mutation hooks(`useXxx`) - `src/lib/api/operations/{module}.graphql.ts`:GraphQL operations - `src/features/teacher/{module}/transformations.ts`:数据转换与纯函数 承担。本报告对 `actions*.ts` / `data-access*.ts` / `schema.ts` / `types.ts` 这类非组件文件**不予标记为缺失**,除非包含核心算法(如 `sm2-algorithm.ts` / `graph-layout.ts` / `trend-compute.ts` / `warning-compute.ts` / `correlation-compute.ts` / `lottery.ts` / `schedule-conflict.ts`)。 ### A.2 路由结构差异 - CICD:`src/app/(dashboard)/teacher/`(路由组 `(dashboard)`) - portal-shell:`src/app/shell/teacher/`(路由组 `shell`) 路由组差异不影响实际路径,`/teacher/*` 路径在两端一致。 ### A.3 共享组件差异 CICD 使用 shadcn/ui 组件库(Dialog/Select/Table/Checkbox/ScrollArea/ResizablePanel 等),portal-shell 部分组件用原生 HTML 元素替代(见各文件头注释:"使用原生元素替代")。这是 portal-shell 的适配策略,不标记为缺失。 ### A.4 核心算法文件迁移建议 以下 CICD 非组件文件包含核心业务算法,建议迁入 portal-shell 对应模块的 `transformations.ts` 或独立 lib: | CICD 文件 | 所属模块 | 建议迁移目标 | | -------------------------------------------------------------------- | ---------- | -------------------------------------------------------- | | `sm2-algorithm.ts` | error-book | `features/teacher/error-book/lib/sm2-algorithm.ts` | | `graph-layout.ts` | textbooks | `features/teacher/knowledge-graph/lib/graph-layout.ts` | | `trend-compute.ts` / `warning-compute.ts` / `correlation-compute.ts` | attendance | `features/teacher/attendance/transformations.ts`(合并) | | `lottery.ts` / `schedule-conflict.ts` | elective | `features/teacher/elective/lib/` | | `ai-pipeline/`(5 文件) | exams | `features/teacher/exams/lib/ai-pipeline/` | | `lib/scope-check.ts` / `lib/scope-filter.ts` | grades | `features/teacher/grades/lib/` | --- **报告结束。后续迁移工作请基于本报告的"第三部分:每个模块的缺失组件清单"与"第五部分:迁移优先级建议"执行。**