diff --git a/reading-platform-frontend/src/api/school.ts b/reading-platform-frontend/src/api/school.ts index 627e664..bbd5cf0 100644 --- a/reading-platform-frontend/src/api/school.ts +++ b/reading-platform-frontend/src/api/school.ts @@ -301,6 +301,7 @@ export interface CoursePackage { name: string; gradeLevel: string; sortOrder: number; + scheduleRefData?: string; }>; } diff --git a/reading-platform-frontend/src/views/school/schedule/components/CreateScheduleModal.vue b/reading-platform-frontend/src/views/school/schedule/components/CreateScheduleModal.vue index 44f4515..8b54ab1 100644 --- a/reading-platform-frontend/src/views/school/schedule/components/CreateScheduleModal.vue +++ b/reading-platform-frontend/src/views/school/schedule/components/CreateScheduleModal.vue @@ -405,7 +405,29 @@ const handleCollectionChange = async (collectionId: number) => { const selectPackage = async (packageId: number) => { formData.packageId = packageId; formData.courseId = undefined; - scheduleRefData.value = []; + + // 加载排课计划参考(从选中的课程包中获取) + if (selectedCollection.value?.packages) { + const selectedPkg = selectedCollection.value.packages.find((p: any) => p.id === packageId); + if (selectedPkg?.courses && selectedPkg.courses.length > 0) { + // 取第一门课程的排课计划参考作为模板 + const firstCourse = selectedPkg.courses[0]; + if (firstCourse.scheduleRefData) { + try { + const parsedData = JSON.parse(firstCourse.scheduleRefData); + scheduleRefData.value = Array.isArray(parsedData) ? parsedData : []; + console.log('✅ 排课计划参考数据:', scheduleRefData.value); + } catch (e) { + console.error('解析排课数据失败:', e); + scheduleRefData.value = []; + } + } else { + scheduleRefData.value = []; + } + } else { + scheduleRefData.value = []; + } + } // 加载课程类型列表 await loadLessonTypes(packageId); @@ -414,31 +436,6 @@ const selectPackage = async (packageId: number) => { // 选择课程 const selectCourse = (courseId: number) => { formData.courseId = courseId; - // 加载该课程的排课计划参考 - loadScheduleRefData(courseId); -}; - -// 加载排课计划参考数据 -const loadScheduleRefData = async (courseId: number) => { - try { - // TODO: 调用获取课程详情的API - // const course = await getCourseDetail(courseId); - // if (course?.scheduleRefData) { - // try { - // const parsedData = JSON.parse(course.scheduleRefData); - // scheduleRefData.value = Array.isArray(parsedData) ? parsedData : []; - // } catch (e) { - // console.error('Failed to parse scheduleRefData:', e); - // scheduleRefData.value = []; - // } - // } else { - // scheduleRefData.value = []; - // } - scheduleRefData.value = []; - } catch (error) { - console.error('Failed to load course detail:', error); - scheduleRefData.value = []; - } }; // 加载课程类型列表 diff --git a/reading-platform-java/src/main/java/com/reading/platform/dto/response/CoursePackageResponse.java b/reading-platform-java/src/main/java/com/reading/platform/dto/response/CoursePackageResponse.java index dd4b5a0..54cb60c 100644 --- a/reading-platform-java/src/main/java/com/reading/platform/dto/response/CoursePackageResponse.java +++ b/reading-platform-java/src/main/java/com/reading/platform/dto/response/CoursePackageResponse.java @@ -98,5 +98,11 @@ public class CoursePackageResponse { @Schema(description = "排序号") private Integer sortOrder; + + @Schema(description = "排课计划参考数据(JSON)") + private String scheduleRefData; + + @Schema(description = "课程类型") + private String lessonType; } } diff --git a/reading-platform-java/src/main/java/com/reading/platform/service/CourseCollectionService.java b/reading-platform-java/src/main/java/com/reading/platform/service/CourseCollectionService.java index ee59818..f99cd2b 100644 --- a/reading-platform-java/src/main/java/com/reading/platform/service/CourseCollectionService.java +++ b/reading-platform-java/src/main/java/com/reading/platform/service/CourseCollectionService.java @@ -8,12 +8,16 @@ import com.reading.platform.common.enums.TenantPackageStatus; import com.reading.platform.common.response.PageResult; import com.reading.platform.dto.response.CourseCollectionResponse; import com.reading.platform.dto.response.CoursePackageResponse; +import com.reading.platform.entity.Course; import com.reading.platform.entity.CourseCollection; import com.reading.platform.entity.CourseCollectionPackage; import com.reading.platform.entity.CoursePackage; +import com.reading.platform.entity.CoursePackageCourse; import com.reading.platform.entity.TenantPackage; import com.reading.platform.mapper.CourseCollectionMapper; import com.reading.platform.mapper.CourseCollectionPackageMapper; +import com.reading.platform.mapper.CourseMapper; +import com.reading.platform.mapper.CoursePackageCourseMapper; import com.reading.platform.mapper.CoursePackageMapper; import com.reading.platform.mapper.TenantPackageMapper; import lombok.RequiredArgsConstructor; @@ -39,6 +43,8 @@ public class CourseCollectionService extends ServiceImpl courseItems = new ArrayList<>(); + + // 查询课程包关联的课程 + List packageCourses = packageCourseMapper.selectList( + new LambdaQueryWrapper() + .eq(CoursePackageCourse::getPackageId, pkg.getId()) + .orderByAsc(CoursePackageCourse::getSortOrder) + ); + + if (!packageCourses.isEmpty()) { + courseItems = packageCourses.stream() + .map(pkc -> { + CoursePackageResponse.CoursePackageCourseItem item = new CoursePackageResponse.CoursePackageCourseItem(); + // 从 CoursePackageCourse 获取课程信息 + Course course = courseMapper.selectById(pkc.getCourseId()); + if (course != null) { + item.setId(course.getId()); + item.setName(course.getName()); + item.setScheduleRefData(course.getScheduleRefData()); + } + item.setGradeLevel(pkc.getGradeLevel()); + item.setSortOrder(pkc.getSortOrder()); + return item; + }) + .collect(Collectors.toList()); + } + return CoursePackageResponse.builder() .id(pkg.getId()) .name(pkg.getName()) @@ -333,7 +376,7 @@ public class CourseCollectionService extends ServiceImpl