- 学生域 32 页全量迁移(含作答/自动保存/提交/诊断) - 补齐 4 个 MSW mock 缺口,修 diagnostic case 名 - 修 4 处 Tailwind 任意值;新增共享组件与路由
679 lines
74 KiB
Markdown
679 lines
74 KiB
Markdown
# 教师域功能迁移差异分析报告
|
||
|
||
> 对比基准: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/` |
|
||
|
||
---
|
||
|
||
**报告结束。后续迁移工作请基于本报告的"第三部分:每个模块的缺失组件清单"与"第五部分:迁移优先级建议"执行。**
|