diff --git a/docs/dev-logs/2026-03-21.md b/docs/dev-logs/2026-03-21.md new file mode 100644 index 0000000..d3d4f35 --- /dev/null +++ b/docs/dev-logs/2026-03-21.md @@ -0,0 +1,203 @@ +# 开发日志 - 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*