# 教师端重构开发规划 > 创建时间:2026-03-11 > 基于需求:17-课程包套餐重构需求.md > 参考设计:19-教师端设计-重构版.md > 状态:规划中 --- ## 一、重构背景 ### 1.1 已完成工作回顾 | 端 | 状态 | 完成内容 | |----|------|---------| | 超管端 | ✅ 完成 | 套餐管理、课程包7步流程重构、主题字典、租户授权 | | 学校端 | ✅ 完成 | 套餐查看/续订、校本课程包管理、课程详情适配 | | 数据模型 | ✅ 完成 | CoursePackage、CourseLesson、LessonStep等新表 | | 后端API | ✅ 完成 | 套餐、课程包、课程、环节相关接口 | ### 1.2 教师端现状分析 | 模块 | 当前状态 | 需要适配 | |-----|---------|---------| | 课程中心 | 基于旧结构 | ❌ 需适配新课程包结构 | | 课程详情页 | 基于旧结构 | ❌ 需展示7步内容 | | 备课模式 | 基于课程维度 | ⚠️ 需适配新课程结构 | | 上课模式 | 支持整体上课 | ⚠️ 需支持选择课程 | | 校本课程包 | 已有框架 | ✅ 基本完成 | ### 1.3 核心变更点 ``` 旧结构: Course(课程包) └─ CourseScript(逐页脚本) └─ CourseScriptPage(页面) └─ CourseActivity(延伸活动) 新结构: Course(课程包) ├─ 基本信息(主题、年级、绘本、核心内容) ├─ 课程介绍(8个富文本字段) ├─ 排课计划参考(表格) ├─ 环创建设(富文本) └─ CourseLesson(课程) ├─ INTRODUCTION(导入课) ├─ COLLECTIVE(集体课) └─ 五大领域课(LANGUAGE/HEALTH/SCIENCE/SOCIAL/ART) └─ LessonStep(教学环节) ``` --- ## 二、重构目标 ### 2.1 功能目标 | 序号 | 目标 | 优先级 | |-----|------|-------| | 1 | 课程详情页适配新结构,展示7步内容 | P0 | | 2 | 备课模式按课程维度切换(导入课→集体课→领域课) | P0 | | 3 | 上课模式支持选择课程上课 | P0 | | 4 | 校本课程包功能完善 | P1 | | 5 | 课程进度追踪 | P1 | ### 2.2 用户体验目标 | 目标 | 说明 | |-----|------| | 清晰的信息层次 | 课程包→课程→环节 三级导航清晰 | | 灵活的教学方式 | 支持整体教学和选择性上课 | | 本地化能力 | 教师可创建校本课程包 | --- ## 三、详细开发规划 ### Phase 1: 基础适配(1-2天) #### 1.1 API类型定义更新 **文件:** `reading-platform-frontend/src/api/course.ts` ```typescript // 新增类型定义 export interface CourseLesson { id: number; courseId: number; lessonType: 'INTRODUCTION' | 'COLLECTIVE' | 'LANGUAGE' | 'HEALTH' | 'SCIENCE' | 'SOCIAL' | 'ART'; name: string; description: string | null; duration: number; videoPath: string | null; videoName: string | null; pptPath: string | null; pptName: string | null; pdfPath: string | null; pdfName: string | null; objectives: string | null; preparation: string | null; extension: string | null; reflection: string | null; assessmentData: string | null; useTemplate: boolean; sortOrder: number; steps: LessonStep[]; } export interface LessonStep { id: number; lessonId: number; name: string; content: string; duration: number; objective: string | null; resourceIds: string | null; sortOrder: number; } // 更新Course接口 export interface Course { // ... 保留原有字段 ... // 新增字段 themeId: number | null; coreContent: string | null; introSummary: string | null; introHighlights: string | null; introGoals: string | null; introSchedule: string | null; introKeyPoints: string | null; introMethods: string | null; introEvaluation: string | null; introNotes: string | null; scheduleRefData: string | null; environmentConstruction: string | null; hasCollectiveLesson: boolean; // 新增关联 theme: Theme | null; lessons: CourseLesson[]; } // 新增Theme接口 export interface Theme { id: number; name: string; description: string | null; } ``` #### 1.2 后端API适配 **文件:** `reading-platform-backend/src/modules/course/course.controller.ts` ```typescript // 确保课程详情API返回lessons @Get(':id') async getCourseDetail(@Param('id') id: string) { return this.courseService.findById(+id, { include: { theme: true, lessons: { include: { steps: { orderBy: { sortOrder: 'asc' } } }, orderBy: { sortOrder: 'asc' } } } }); } ``` ### Phase 2: 课程详情页重构(1-2天) #### 2.1 课程详情页布局 **文件:** `reading-platform-frontend/src/views/teacher/courses/CourseDetailView.vue` ``` ┌──────────────────────────────────────────────────────────────────────┐ │ ◀ 返回课程中心 [收藏] [创建校本] │ ├──────────────────────────────────────────────────────────────────────┤ │ │ │ 【顶部信息卡片】 │ │ ┌────────────────────────────────────────────────────────────────┐ │ │ │ 封面 | 名称 | 主题 | 年级 | 评分 | 使用数 | 包含课程数 | 时长 │ │ │ └────────────────────────────────────────────────────────────────┘ │ │ │ │ 【Tab导航】 │ │ ┌────────┬────────┬────────┬────────┬────────┐ │ │ │ 课程介绍│ 课程内容│ 排课参考│ 环创建设│ 用户评价│ │ │ └────────┴────────┴────────┴────────┴────────┘ │ │ │ │ 【内容区域】 │ │ - 课程介绍Tab:展示8个富文本字段 │ │ - 课程内容Tab:展示导入课+集体课+领域课列表 │ │ - 排课参考Tab:展示排课计划表格 │ │ - 环创建设Tab:展示环创建设内容 │ │ - 用户评价Tab:展示用户评价 │ │ │ │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ │ │ [开始备课] [选择课程上课] │ │ │ └──────────────────────────────────────────────────────────────────────┘ ``` #### 2.2 组件结构 ``` CourseDetailView.vue ├── CourseInfoCard.vue # 顶部信息卡片 ├── CourseDetailTabs.vue # Tab导航 │ ├── CourseIntroTab.vue # 课程介绍Tab(8个富文本) │ ├── CourseContentTab.vue # 课程内容Tab(课程列表) │ ├── CourseScheduleTab.vue # 排课参考Tab │ ├── CourseEnvironmentTab.vue # 环创建设Tab │ └── CourseReviewsTab.vue # 用户评价Tab └── ActionButtons.vue # 底部操作按钮 ``` #### 2.3 CourseContentTab 详细设计 ```vue 整体备课(全部课程) 选择课程上课 ``` #### 2.4 LessonCard 组件 ```vue {{ type }} {{ lesson.name }} {{ lesson.duration }}分钟 [备课] 教学目标:{{ lesson.objectives }} 教学环节: {{ step.name }} {{ index < lesson.steps.length - 1 ? ' → ' : '' }} 核心资源: 动画视频 教学课件 电子绘本 ``` ### Phase 3: 备课模式重构(2-3天) #### 3.1 备课模式布局 **文件:** `reading-platform-frontend/src/views/teacher/courses/PrepareModeView.vue` ``` ┌──────────────────────────────────────────────────────────────────────┐ │ 📚 备课模式:好饿的毛毛虫 [退出备课] │ ├──────────────────────────────────────────────────────────────────────┤ │ │ │ ┌─────────────────────────┐ ┌───────────────────────────────────┐ │ │ │ 【左侧:课程导航】 │ │ 【右侧:内容预览】 │ │ │ │ │ │ │ │ │ │ 📋 课程包概览 │ │ 当前选中内容的详细展示 │ │ │ │ ├─ 基本信息 │ │ │ │ │ │ ├─ 课程介绍 │ │ - 基本信息/课程介绍/排课参考 │ │ │ │ ├─ 排课计划参考 │ │ - 教学目标/教学准备 │ │ │ │ └─ 环创建设 │ │ - 教学环节列表 │ │ │ │ │ │ - 核心资源预览 │ │ │ │ 📖 包含课程 │ │ │ │ │ │ ├─ 1.导入课 │ │ │ │ │ │ │ ├─ 教学目标 │ │ │ │ │ │ │ ├─ 教学准备 │ │ │ │ │ │ │ ├─ 教学过程 │ │ │ │ │ │ │ └─ 教学反思 │ │ │ │ │ │ │ │ │ │ │ │ │ ├─ 2.集体课 ● │ │ │ │ │ │ │ ├─ 核心资源 │ │ │ │ │ │ │ ├─ 教学目标 │ │ │ │ │ │ │ ├─ 教学准备 │ │ │ │ │ │ │ ├─ 教学过程 │ │ │ │ │ │ │ │ ├─ 导入环节 │ │ │ │ │ │ │ │ ├─ 动画观看 │ │ │ │ │ │ │ │ ├─ 绘本跟读 │ │ │ │ │ │ │ │ └─ 结束环节 │ │ │ │ │ │ │ ├─ 教学延伸 │ │ │ │ │ │ │ └─ 教学反思 │ │ │ │ │ │ │ │ │ │ │ │ │ └─ 3.五大领域课... │ │ │ │ │ │ │ │ │ │ │ └─────────────────────────┘ └───────────────────────────────────┘ │ │ │ │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ │ │ │ │ 我的备课笔记: [保存] [清除] │ │ ┌────────────────────────────────────────────────────────────┐ │ │ │ • 备课笔记内容... │ │ │ └────────────────────────────────────────────────────────────┘ │ │ │ │ [打印素材清单] [我已熟悉,开始上课] │ │ │ └──────────────────────────────────────────────────────────────────────┘ ``` #### 3.2 左侧导航组件 **文件:** `reading-platform-frontend/src/views/teacher/courses/components/PrepareNavigation.vue` ```vue 📋 课程包概览 基本信息 课程介绍 排课计划参考 环创建设 📖 包含课程 📖 1. 导入课 教学目标 教学准备 教学过程 教学反思 👥 2. 集体课 核心资源 教学目标 教学准备 教学过程 教学延伸 教学反思 {{ getLessonIcon(lesson.lessonType) }} {{ getLessonNumber(lesson) }}. {{ getLessonTypeName(lesson.lessonType) }} 核心资源 教学目标 教学准备 教学过程 教学延伸 教学反思 ``` #### 3.3 右侧预览组件 **文件:** `reading-platform-frontend/src/views/teacher/courses/components/PreparePreview.vue` ```vue ``` ### Phase 4: 上课模式重构(2-3天) #### 4.1 课程选择弹窗 **文件:** `reading-platform-frontend/src/views/teacher/lessons/components/SelectLessonsModal.vue` ```vue 课程包:{{ course.name }} 当前班级:{{ currentClass.name }} 【推荐:整体教学】 按课程包完整教学 按顺序完成:导入课 → 集体课 → 五大领域课 预计总时长:约 {{ totalDuration }} 分钟(可分多次完成) 适合:首次教学、完整学习 【灵活:选择课程】 选择单次课程 1. 导入课 - {{ introductionLesson.name }} ({{ introductionLesson.duration }}分钟) 2. 集体课 - {{ collectiveLesson.name }} ({{ collectiveLesson.duration }}分钟) {{ getLessonNumber(lesson) }}. {{ getLessonTypeName(lesson.lessonType) }} - {{ lesson.name }} ({{ lesson.duration }}分钟) 已选择 {{ selectedLessonIds.length }} 节课,预计时长:{{ selectedDuration }} 分钟 ``` #### 4.2 上课模式主界面 **文件:** `reading-platform-frontend/src/views/teacher/lessons/LessonView.vue` ``` 主要修改: 1. 支持传入课程列表(而非单个课程) 2. 添加课程进度导航 3. 添加课程内环节进度导航 4. 更新资源展示逻辑 ``` ```vue {{ formattedTime }} ◀ 退出课堂 {{ currentCourse?.name }} - {{ currentLesson?.name }} {{ currentClass?.name }} 结束 当前:{{ currentStep?.name }} ({{ currentStepIndex + 1 }}/{{ currentLesson?.steps?.length }}) {{ step.name }} 💡 教师指引 - {{ currentStep?.name }} (预计{{ currentStep?.duration }}分钟) 教学目的: {{ currentStep?.objective }} 操作提示: {{ tip }} 📢 指导语: {{ getCurrentScript() }} 暂停 音频 笔记 计时器 全屏 上一环节 完成此环节 → ``` ### Phase 5: 课程进度追踪(1天) #### 5.1 进度记录逻辑 ```typescript // 课程进度记录结构 interface CourseProgress { id: number; teacherId: number; classId: number; courseId: number; completedLessonIds: number[]; // 已完成的课程ID列表 currentLessonId: number | null; // 当前进行到的课程 currentStepId: number | null; // 当前进行到的环节 lastSessionAt: Date; } // 进度API // GET /teacher/course-progress/:courseId/:classId // POST /teacher/course-progress // PUT /teacher/course-progress/:id ``` #### 5.2 进度恢复逻辑 ```typescript // 进入上课模式时检查进度 async function loadCourseProgress(courseId: number, classId: number) { const progress = await api.getCourseProgress(courseId, classId); if (progress) { // 询问是否继续上次进度 Modal.confirm({ title: '继续上次课程?', content: `上次进行到:${getLessonName(progress.currentLessonId)},是否继续?`, onOk: () => { restoreProgress(progress); }, onCancel: () => { startNewSession(); } }); } else { startNewSession(); } } ``` ### Phase 6: 校本课程包功能完善(1-2天) #### 6.1 创建校本课程包流程 ``` 1. 选择平台课程包 2. 选择要调整的内容(教学目标/教学过程/资源等) 3. 保存为本校版本 ``` #### 6.2 校本课程包数据结构 ```typescript interface SchoolCourse { id: number; tenantId: number; sourceCourseId: number; name: string; description: string | null; createdBy: number; changesSummary: string | null; // 调整摘要 changesData: string | null; // 调整详情JSON usageCount: number; status: 'ACTIVE' | 'ARCHIVED'; sourceCourse: Course; lessons: SchoolCourseLesson[]; } interface SchoolCourseLesson { id: number; schoolCourseId: number; sourceLessonId: number; lessonType: string; objectives: string | null; preparation: string | null; extension: string | null; reflection: string | null; changeNote: string | null; stepsData: string | null; // 调整后的环节数据 } ``` --- ## 四、开发时间表 | 阶段 | 任务 | 预计时间 | 优先级 | |-----|------|---------|-------| | Phase 1 | API类型定义更新、后端API适配 | 1-2天 | P0 | | Phase 2 | 课程详情页重构 | 1-2天 | P0 | | Phase 3 | 备课模式重构 | 2-3天 | P0 | | Phase 4 | 上课模式重构 | 2-3天 | P0 | | Phase 5 | 课程进度追踪 | 1天 | P1 | | Phase 6 | 校本课程包功能完善 | 1-2天 | P1 | | **总计** | | **8-13天** | | --- ## 五、测试计划 ### 5.1 功能测试 | 测试项 | 测试内容 | 预期结果 | |-------|---------|---------| | 课程详情页 | 展示新结构内容 | 正确展示7步内容 | | 备课模式 | 按课程维度切换 | 左侧导航正确展开课程 | | 上课模式 | 选择课程上课 | 可选择单次或整体上课 | | 进度追踪 | 保存和恢复进度 | 下次进入时可继续上次进度 | ### 5.2 兼容性测试 - 旧课程包数据正确显示 - 无课程数据的课程包不报错 - 各类课程(导入/集体/领域)正确展示 --- ## 六、风险与注意事项 ### 6.1 技术风险 | 风险 | 应对措施 | |-----|---------| | 旧数据兼容 | 保留旧字段,渐进式迁移 | | 性能问题 | 课程数据量大时使用分页/虚拟滚动 | | 状态管理复杂 | 使用Pinia管理备课/上课状态 | ### 6.2 用户体验风险 | 风险 | 应对措施 | |-----|---------| | 信息过载 | 默认折叠,按需展开 | | 操作复杂 | 提供引导和默认选项 | | 兼容性困惑 | 旧版课程标识"经典版",新版标识"完整版" | --- ## 七、后续优化方向 - [ ] 离线备课/上课支持 - [ ] 课程分享功能 - [ ] 教学数据分析 - [ ] AI辅助备课建议 - [ ] 家长端联动(学生表现反馈) --- *本文档创建于 2026-03-11* *基于需求文档:17-课程包套餐重构需求.md*