# 开发日志 - 2026-03-21 ## 学校端课程中心重构 ### 背景 原有学校端"课程管理"模块功能单一: - 课程详情页展示数据不完整(缺少课程介绍、排课参考、环创建设等) - 与教师端课程中心存在功能重复 - 用户体验与教师端不一致 ### 目标 1. 学校端课程中心照搬教师端实现 2. 课程详情页返回完整数据 3. 统一两端浏览体验 --- ## 完成的工作 ### 1. 后端修改 #### SchoolCourseController.java - `getSchoolCourse()` 改为返回 `CourseResponse`(之前返回 `SchoolCourseResponse`) - 使用 `courseService.getCourseByIdWithLessons(id)` 获取完整数据 - 与教师端 `TeacherCourseController.getCourse()` 保持一致 ```java // 修改后 @GetMapping("/{id}") public Result getSchoolCourse(@PathVariable Long id) { Long tenantId = SecurityUtils.getCurrentTenantId(); courseService.getCourseByIdWithTenantCheck(id, tenantId); return Result.success(courseService.getCourseByIdWithLessons(id)); } ``` #### SchoolPackageController.java - 新增 `getPackagesByCollection()` - 获取套餐下的课程包列表 - 新增 `getFilterMeta()` - 获取筛选元数据(年级、主题) #### CourseCollectionService.java / Impl - 新增 `getPackagesByCollection()` 方法 - 新增 `getFilterMeta()` 方法 #### PackageFilterMetaResponse.java(新增) - 筛选元数据响应类 - 包含 grades 和 themes 两个列表 ### 2. 前端修改 #### 新增文件 | 文件 | 说明 | |-----|------| | `src/api/course-center.ts` | 课程中心通用 API | | `src/views/school/courses-new/CourseCenterView.vue` | 学校端课程中心页面 | | `src/views/school/courses-new/components/CoursePackageCard.vue` | 课程包卡片组件 | | `src/views/teacher/courses-new/CourseCenterView.vue` | 教师端课程中心页面 | | `src/views/teacher/courses-new/components/CoursePackageCard.vue` | 课程包卡片组件 | #### 修改文件 | 文件 | 修改内容 | |-----|---------| | `src/router/index.ts` | 课程中心路由指向新组件 | | `src/views/school/LayoutView.vue` | 菜单文案:课程管理 → 课程中心 | | `src/api/school.ts` | `getSchoolCourse()` 返回 `Promise` | ### 3. 设计文档 新增:`docs/design/25-课程中心重构设计.md` 内容包括: - 功能对比矩阵(教师端 vs 学校端) - 数据展示对比(重构前后) - 架构设计(组件、API、后端) - 页面布局设计 - 关键技术实现 - 文件变更清单 - 测试验证清单 --- ## 课程详情页数据对比 | 数据项 | 重构前 | 重构后 | |-------|:------:|:------:| | 基本信息 | ✅ | ✅ | | 使用统计 | ✅ | ✅ | | 版本记录 | ✅ | ✅ | | 课程介绍(8项) | ❌ | ✅ | | 排课计划参考 | ❌ | ✅ | | 环创建设 | ❌ | ✅ | | 课程配置(lessons) | ❌ | ✅ | | 数字资源 | ❌ | ✅ | --- ## 关键技术点 ### 1. API 返回完整 CourseResponse 课程详情 API 现在返回完整的 `CourseResponse`,包含: ```typescript { // 基本信息 id, name, description, coverImagePath, durationMinutes, gradeTags, domainTags, // 课程介绍(8项) introSummary, introHighlights, introGoals, introSchedule, introKeyPoints, introMethods, introEvaluation, introNotes, // 排课参考 scheduleRefData: JSON 格式的周计划表, // 环创建设 environmentConstruction, // 课程配置 courseLessons: [ { id, name, lessonType, duration, objectives, preparation, extension, reflection, videoPath, pptPath, pdfPath, steps: [{ id, name, duration, objective, content }] } ], // 统计 usageCount, teacherCount, avgRating } ``` ### 2. 前端页面布局 课程中心采用左右两栏布局: - **左侧**:套餐列表(垂直列表) - **右侧**:课程包网格 + 筛选区 课程详情页展示区域: 1. 封面图 2. 基本信息卡片(3列) 3. 课程介绍(Tab 切换) 4. 排课计划参考(表格) 5. 环创建设 6. 课程配置(课程卡片列表) 7. 数字资源(分类展示) --- ## 测试验证 ### API 测试 ```bash # 登录获取 token curl -X POST http://localhost:8480/api/v1/auth/login \ -H "Content-Type: application/json" \ -d '{"username":"school1","password":"123456"}' # 获取课程详情 curl -H "Authorization: Bearer $TOKEN" \ http://localhost:8480/api/v1/school/courses/17 | jq '.data | keys' ``` 结果验证: - ✅ courseLessons: 7 个课程 - ✅ scheduleRefData: 存在 - ✅ introSummary 等字段: 存在 - ✅ environmentConstruction: 存在 ### 前端测试 - ✅ 学校端课程中心页面正常加载 - ✅ 套餐列表正常显示 - ✅ 课程包网格正常显示 - ✅ 筛选功能正常 - ✅ 课程详情页展示完整数据 --- ## Git 提交记录 ``` ca56d85 docs: 添加课程中心重构设计文档 3183d1d feat: 学校端课程中心优化 - 照搬教师端实现 ``` --- ## 遗留问题 1. **组件复用**:学校端和教师端的 CourseCenterView 代码高度相似,可考虑抽象为通用组件 2. **学校端收藏**:暂未实现收藏功能 3. **学校端创建校本**:暂未实现 --- *本日志创建于 2026-03-21*