From ddd3d8c1520eb083c21ab52d772a90009a6db231 Mon Sep 17 00:00:00 2001 From: "Claude Opus 4.6" Date: Wed, 18 Mar 2026 18:19:25 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A5=97=E9=A4=90=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=A2=9E=E5=BC=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增功能: - 后端新增套餐状态管理端点(下架、重新发布、撤销审核) - 前端套餐详情页增加完整状态流转操作 - 前端套餐管理增加课程包添加/移除功能 - 修复套餐详情页空值引用错误 - 新增 collections.ts API 封装模块 后端变更: - AdminCourseCollectionController 新增 archive/republish/withdraw 端点 - CourseCollectionService 新增对应服务方法 前端变更: - collections.ts 新增 API 封装 - CollectionDetailView 增加状态管理按钮和课程包管理 - CollectionListView 增加状态筛选和操作按钮 - 修复 route 配置和 API 调用路径 - 合并远程更新,解决 TenantListView.vue 冲突 Co-Authored-By: Claude Opus 4.6 --- .claude/CLAUDE.md | 53 +- reading-platform-frontend/openapi.json | 2401 +++++++---------- .../scripts/fetch-openapi.js | 2 +- .../src/api/collections.ts | 224 ++ reading-platform-frontend/src/api/course.ts | 4 +- .../src/api/generated/index.ts | 387 ++- .../model/activeTenantItemResponse.ts | 21 + .../model/activeTenantsQueryRequest.ts | 15 + .../model/addPackageToCollectionParams.ts | 12 + .../generated/model/basicSettingsResponse.ts | 25 + .../model/basicSettingsUpdateRequest.ts | 25 + .../generated/model/calendarViewResponse.ts | 20 + .../model/calendarViewResponseSchedules.ts | 13 + .../generated/model/checkConflictParams.ts | 14 + .../generated/model/conflictCheckResult.ts | 18 + .../src/api/generated/model/conflictInfo.ts | 25 + .../model/courseCollectionPageQueryRequest.ts | 19 + .../model/courseCollectionResponse.ts | 54 + .../src/api/generated/model/coursePackage.ts | 108 +- .../api/generated/model/coursePackageItem.ts | 25 + .../generated/model/coursePageQueryRequest.ts | 25 + .../generated/model/courseReportResponse.ts | 25 + .../model/createCollectionRequest.ts | 22 + .../model/createTaskFromTemplateRequest.ts | 27 + .../api/generated/model/dayScheduleItem.ts | 27 + .../model/generateEditTokenParams.ts | 12 + .../model/generateReadOnlyTokenParams.ts | 12 + .../model/getCalendarViewDataParams.ts | 14 + .../api/generated/model/getOssTokenParams.ts | 12 + .../generated/model/getSchoolCoursesParams.ts | 12 + .../generated/model/grantCollectionRequest.ts | 16 + .../src/api/generated/model/immTokenVo.ts | 14 + .../src/api/generated/model/index.ts | 5 + .../generated/model/lessonDetailResponse.ts | 19 + .../src/api/generated/model/lessonFeedback.ts | 45 + .../generated/model/lessonFeedbackRequest.ts | 47 + .../generated/model/lessonFeedbackResponse.ts | 43 + .../generated/model/lessonProgressRequest.ts | 24 + .../lessonProgressRequestProgressData.ts | 12 + .../model/lessonStepCreateRequest.ts | 23 + .../api/generated/model/lessonStepResponse.ts | 33 + .../src/api/generated/model/lessonTypeInfo.ts | 19 + .../src/api/generated/model/librarySummary.ts | 16 + .../model/notificationSettingsResponse.ts | 23 + .../notificationSettingsUpdateRequest.ts | 23 + .../generated/model/operationLogResponse.ts | 37 + .../src/api/generated/model/ossTokenVo.ts | 17 + .../generated/model/packageGrantRequest.ts | 19 + .../generated/model/packageInfoResponse.ts | 25 + .../generated/model/packageReviewRequest.ts | 19 + .../generated/model/packageUsageResponse.ts | 16 + .../src/api/generated/model/pageParams.ts | 12 + .../pageResultCourseCollectionResponse.ts | 16 + .../model/pageResultLessonFeedbackResponse.ts | 16 + .../model/pageResultOperationLogResponse.ts | 16 + .../model/pageResultResourceItemResponse.ts | 16 + .../pageResultResourceLibraryResponse.ts | 16 + .../model/pageResultSchedulePlanResponse.ts | 16 + .../model/pageResultTaskTemplateResponse.ts | 16 + .../model/popularCourseItemResponse.ts | 21 + .../model/popularCoursesQueryRequest.ts | 15 + .../model/recentActivitiesQueryRequest.ts | 15 + .../model/recentActivityItemResponse.ts | 25 + .../generated/model/refreshTokenRequest.ts | 12 + .../generated/model/reportOverviewResponse.ts | 28 + .../reportOverviewResponseCourseStats.ts | 12 + .../model/resourceItemCreateRequest.ts | 29 + .../generated/model/resourceItemResponse.ts | 39 + .../model/resourceItemUpdateRequest.ts | 19 + .../model/resourceLibraryCreateRequest.ts | 21 + .../model/resourceLibraryResponse.ts | 31 + .../model/resourceLibraryUpdateRequest.ts | 17 + .../model/resultBasicSettingsResponse.ts | 14 + .../model/resultCalendarViewResponse.ts | 14 + .../model/resultConflictCheckResult.ts | 14 + .../model/resultCourseCollectionResponse.ts | 14 + .../model/resultCourseLessonResponse.ts | 14 + .../api/generated/model/resultImmTokenVo.ts | 14 + .../model/resultLessonDetailResponse.ts | 14 + .../generated/model/resultLessonFeedback.ts | 14 + .../model/resultLessonStepResponse.ts | 14 + .../resultListActiveTenantItemResponse.ts | 14 + .../resultListCourseCollectionResponse.ts | 14 + .../model/resultListCourseLessonResponse.ts | 14 + .../model/resultListCoursePackage.ts | 14 + .../model/resultListCourseReportResponse.ts | 14 + .../model/resultListLessonStepResponse.ts | 14 + .../model/resultListLessonTypeInfo.ts | 14 + .../resultListPopularCourseItemResponse.ts | 14 + .../resultListRecentActivityItemResponse.ts | 14 + .../model/resultListSchedulePlanResponse.ts | 14 + .../model/resultListStudentRecordResponse.ts | 14 + .../model/resultListStudentReportResponse.ts | 14 + .../model/resultListTeacherReportResponse.ts | 14 + .../model/resultListTeacherResponse.ts | 14 + .../model/resultListThemeResponse.ts | 14 + .../model/resultListTimetableResponse.ts | 14 + .../resultNotificationSettingsResponse.ts | 14 + .../model/resultOperationLogResponse.ts | 14 + .../api/generated/model/resultOssTokenVo.ts | 14 + .../model/resultPackageInfoResponse.ts | 14 + .../model/resultPackageUsageResponse.ts | 14 + ...esultPageResultCourseCollectionResponse.ts | 14 + .../resultPageResultLessonFeedbackResponse.ts | 14 + .../resultPageResultOperationLogResponse.ts | 14 + .../resultPageResultResourceItemResponse.ts | 14 + ...resultPageResultResourceLibraryResponse.ts | 14 + .../resultPageResultSchedulePlanResponse.ts | 14 + .../resultPageResultTaskTemplateResponse.ts | 14 + .../model/resultReportOverviewResponse.ts | 14 + .../model/resultResourceItemResponse.ts | 14 + .../model/resultResourceLibraryResponse.ts | 14 + .../model/resultSchedulePlanResponse.ts | 14 + .../model/resultSchoolSettingsResponse.ts | 14 + .../model/resultSecuritySettingsResponse.ts | 14 + .../generated/model/resultStatsResponse.ts | 14 + .../model/resultStatsTrendResponse.ts | 14 + .../src/api/generated/model/resultString.ts | 13 + .../model/resultStudentRecordResponse.ts | 14 + .../model/resultTaskTemplateResponse.ts | 14 + .../generated/model/resultThemeResponse.ts | 14 + .../model/resultTimetableResponse.ts | 14 + .../model/scheduleCreateByClassesRequest.ts | 33 + .../model/schedulePlanCreateRequest.ts | 39 + .../generated/model/schedulePlanResponse.ts | 59 + .../model/schedulePlanUpdateRequest.ts | 37 + .../generated/model/schoolSettingsResponse.ts | 19 + .../model/schoolSettingsUpdateRequest.ts | 19 + .../model/securitySettingsResponse.ts | 23 + .../model/securitySettingsUpdateRequest.ts | 23 + .../src/api/generated/model/statsResponse.ts | 25 + .../api/generated/model/statsTrendResponse.ts | 21 + .../generated/model/studentRecordRequest.ts | 31 + .../generated/model/studentRecordResponse.ts | 41 + .../generated/model/studentReportResponse.ts | 27 + .../model/taskTemplateCreateRequest.ts | 31 + .../generated/model/taskTemplateResponse.ts | 43 + .../generated/model/teacherReportResponse.ts | 25 + .../generated/model/tenantCreateRequest.ts | 2 +- .../generated/model/tenantUpdateRequest.ts | 2 + .../src/api/generated/model/themeResponse.ts | 27 + .../api/generated/model/timetableResponse.ts | 20 + .../src/api/generated/model/usageInfo.ts | 19 + reading-platform-frontend/src/api/school.ts | 6 +- reading-platform-frontend/src/router/index.ts | 54 +- .../src/views/admin/DashboardView.vue | 4 +- .../src/views/admin/LayoutView.vue | 17 +- .../collections/CollectionDetailView.vue | 328 +++ .../admin/collections/CollectionEditView.vue | 99 + .../admin/collections/CollectionListView.vue | 244 ++ .../views/admin/courses/CourseDetailView.vue | 6 +- .../views/admin/courses/CourseEditView.vue | 4 +- .../views/admin/courses/CourseListView.vue | 12 +- .../views/admin/packages/PackageListView.vue | 8 +- .../views/admin/tenants/TenantListView.vue | 16 +- .../src/views/school/PackageView.vue | 48 +- .../platform/common/mapper/CourseMapper.java | 32 - .../common/mapper/CoursePackageMapper.java | 30 +- .../AdminCourseCollectionController.java | 24 + .../admin/AdminCourseController.java | 39 +- .../admin/AdminPackageController.java | 168 -- .../school/SchoolCourseController.java | 14 +- .../school/SchoolPackageController.java | 12 +- .../teacher/TeacherCourseController.java | 14 +- .../teacher/TeacherLessonController.java | 12 +- .../teacher/TeacherStatsController.java | 4 +- .../dto/request/TenantUpdateRequest.java | 3 + .../com/reading/platform/entity/Course.java | 187 -- .../platform/entity/CoursePackage.java | 157 +- .../reading/platform/mapper/CourseMapper.java | 9 - .../platform/mapper/CoursePackageMapper.java | 5 +- .../service/CourseCollectionService.java | 129 +- .../platform/service/CourseLessonService.java | 1 + .../service/CoursePackageService.java | 591 +--- .../platform/service/CourseService.java | 63 - .../platform/service/TeacherStatsService.java | 4 +- .../platform/service/ThemeService.java | 8 +- .../service/impl/CourseServiceImpl.java | 691 ----- .../impl/SchoolScheduleServiceImpl.java | 20 +- .../service/impl/StatsServiceImpl.java | 28 +- .../service/impl/TeacherStatsServiceImpl.java | 38 +- .../service/impl/TenantServiceImpl.java | 47 + .../src/main/resources/application-dev.yml | 2 +- 183 files changed, 5397 insertions(+), 3602 deletions(-) create mode 100644 reading-platform-frontend/src/api/collections.ts create mode 100644 reading-platform-frontend/src/api/generated/model/activeTenantItemResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/activeTenantsQueryRequest.ts create mode 100644 reading-platform-frontend/src/api/generated/model/addPackageToCollectionParams.ts create mode 100644 reading-platform-frontend/src/api/generated/model/basicSettingsResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/basicSettingsUpdateRequest.ts create mode 100644 reading-platform-frontend/src/api/generated/model/calendarViewResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/calendarViewResponseSchedules.ts create mode 100644 reading-platform-frontend/src/api/generated/model/checkConflictParams.ts create mode 100644 reading-platform-frontend/src/api/generated/model/conflictCheckResult.ts create mode 100644 reading-platform-frontend/src/api/generated/model/conflictInfo.ts create mode 100644 reading-platform-frontend/src/api/generated/model/courseCollectionPageQueryRequest.ts create mode 100644 reading-platform-frontend/src/api/generated/model/courseCollectionResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/coursePackageItem.ts create mode 100644 reading-platform-frontend/src/api/generated/model/coursePageQueryRequest.ts create mode 100644 reading-platform-frontend/src/api/generated/model/courseReportResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/createCollectionRequest.ts create mode 100644 reading-platform-frontend/src/api/generated/model/createTaskFromTemplateRequest.ts create mode 100644 reading-platform-frontend/src/api/generated/model/dayScheduleItem.ts create mode 100644 reading-platform-frontend/src/api/generated/model/generateEditTokenParams.ts create mode 100644 reading-platform-frontend/src/api/generated/model/generateReadOnlyTokenParams.ts create mode 100644 reading-platform-frontend/src/api/generated/model/getCalendarViewDataParams.ts create mode 100644 reading-platform-frontend/src/api/generated/model/getOssTokenParams.ts create mode 100644 reading-platform-frontend/src/api/generated/model/getSchoolCoursesParams.ts create mode 100644 reading-platform-frontend/src/api/generated/model/grantCollectionRequest.ts create mode 100644 reading-platform-frontend/src/api/generated/model/immTokenVo.ts create mode 100644 reading-platform-frontend/src/api/generated/model/lessonDetailResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/lessonFeedback.ts create mode 100644 reading-platform-frontend/src/api/generated/model/lessonFeedbackRequest.ts create mode 100644 reading-platform-frontend/src/api/generated/model/lessonFeedbackResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/lessonProgressRequest.ts create mode 100644 reading-platform-frontend/src/api/generated/model/lessonProgressRequestProgressData.ts create mode 100644 reading-platform-frontend/src/api/generated/model/lessonStepCreateRequest.ts create mode 100644 reading-platform-frontend/src/api/generated/model/lessonStepResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/lessonTypeInfo.ts create mode 100644 reading-platform-frontend/src/api/generated/model/librarySummary.ts create mode 100644 reading-platform-frontend/src/api/generated/model/notificationSettingsResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/notificationSettingsUpdateRequest.ts create mode 100644 reading-platform-frontend/src/api/generated/model/operationLogResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/ossTokenVo.ts create mode 100644 reading-platform-frontend/src/api/generated/model/packageGrantRequest.ts create mode 100644 reading-platform-frontend/src/api/generated/model/packageInfoResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/packageReviewRequest.ts create mode 100644 reading-platform-frontend/src/api/generated/model/packageUsageResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/pageParams.ts create mode 100644 reading-platform-frontend/src/api/generated/model/pageResultCourseCollectionResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/pageResultLessonFeedbackResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/pageResultOperationLogResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/pageResultResourceItemResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/pageResultResourceLibraryResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/pageResultSchedulePlanResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/pageResultTaskTemplateResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/popularCourseItemResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/popularCoursesQueryRequest.ts create mode 100644 reading-platform-frontend/src/api/generated/model/recentActivitiesQueryRequest.ts create mode 100644 reading-platform-frontend/src/api/generated/model/recentActivityItemResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/refreshTokenRequest.ts create mode 100644 reading-platform-frontend/src/api/generated/model/reportOverviewResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/reportOverviewResponseCourseStats.ts create mode 100644 reading-platform-frontend/src/api/generated/model/resourceItemCreateRequest.ts create mode 100644 reading-platform-frontend/src/api/generated/model/resourceItemResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/resourceItemUpdateRequest.ts create mode 100644 reading-platform-frontend/src/api/generated/model/resourceLibraryCreateRequest.ts create mode 100644 reading-platform-frontend/src/api/generated/model/resourceLibraryResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/resourceLibraryUpdateRequest.ts create mode 100644 reading-platform-frontend/src/api/generated/model/resultBasicSettingsResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/resultCalendarViewResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/resultConflictCheckResult.ts create mode 100644 reading-platform-frontend/src/api/generated/model/resultCourseCollectionResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/resultCourseLessonResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/resultImmTokenVo.ts create mode 100644 reading-platform-frontend/src/api/generated/model/resultLessonDetailResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/resultLessonFeedback.ts create mode 100644 reading-platform-frontend/src/api/generated/model/resultLessonStepResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/resultListActiveTenantItemResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/resultListCourseCollectionResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/resultListCourseLessonResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/resultListCoursePackage.ts create mode 100644 reading-platform-frontend/src/api/generated/model/resultListCourseReportResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/resultListLessonStepResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/resultListLessonTypeInfo.ts create mode 100644 reading-platform-frontend/src/api/generated/model/resultListPopularCourseItemResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/resultListRecentActivityItemResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/resultListSchedulePlanResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/resultListStudentRecordResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/resultListStudentReportResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/resultListTeacherReportResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/resultListTeacherResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/resultListThemeResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/resultListTimetableResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/resultNotificationSettingsResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/resultOperationLogResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/resultOssTokenVo.ts create mode 100644 reading-platform-frontend/src/api/generated/model/resultPackageInfoResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/resultPackageUsageResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/resultPageResultCourseCollectionResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/resultPageResultLessonFeedbackResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/resultPageResultOperationLogResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/resultPageResultResourceItemResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/resultPageResultResourceLibraryResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/resultPageResultSchedulePlanResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/resultPageResultTaskTemplateResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/resultReportOverviewResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/resultResourceItemResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/resultResourceLibraryResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/resultSchedulePlanResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/resultSchoolSettingsResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/resultSecuritySettingsResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/resultStatsResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/resultStatsTrendResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/resultString.ts create mode 100644 reading-platform-frontend/src/api/generated/model/resultStudentRecordResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/resultTaskTemplateResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/resultThemeResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/resultTimetableResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/scheduleCreateByClassesRequest.ts create mode 100644 reading-platform-frontend/src/api/generated/model/schedulePlanCreateRequest.ts create mode 100644 reading-platform-frontend/src/api/generated/model/schedulePlanResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/schedulePlanUpdateRequest.ts create mode 100644 reading-platform-frontend/src/api/generated/model/schoolSettingsResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/schoolSettingsUpdateRequest.ts create mode 100644 reading-platform-frontend/src/api/generated/model/securitySettingsResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/securitySettingsUpdateRequest.ts create mode 100644 reading-platform-frontend/src/api/generated/model/statsResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/statsTrendResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/studentRecordRequest.ts create mode 100644 reading-platform-frontend/src/api/generated/model/studentRecordResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/studentReportResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/taskTemplateCreateRequest.ts create mode 100644 reading-platform-frontend/src/api/generated/model/taskTemplateResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/teacherReportResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/themeResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/timetableResponse.ts create mode 100644 reading-platform-frontend/src/api/generated/model/usageInfo.ts create mode 100644 reading-platform-frontend/src/views/admin/collections/CollectionDetailView.vue create mode 100644 reading-platform-frontend/src/views/admin/collections/CollectionEditView.vue create mode 100644 reading-platform-frontend/src/views/admin/collections/CollectionListView.vue delete mode 100644 reading-platform-java/src/main/java/com/reading/platform/common/mapper/CourseMapper.java delete mode 100644 reading-platform-java/src/main/java/com/reading/platform/controller/admin/AdminPackageController.java delete mode 100644 reading-platform-java/src/main/java/com/reading/platform/entity/Course.java delete mode 100644 reading-platform-java/src/main/java/com/reading/platform/mapper/CourseMapper.java delete mode 100644 reading-platform-java/src/main/java/com/reading/platform/service/CourseService.java delete mode 100644 reading-platform-java/src/main/java/com/reading/platform/service/impl/CourseServiceImpl.java diff --git a/.claude/CLAUDE.md b/.claude/CLAUDE.md index e3b9c59..9d46624 100644 --- a/.claude/CLAUDE.md +++ b/.claude/CLAUDE.md @@ -505,6 +505,57 @@ definePage({ --- +## 代码修改验证流程 + +**重要**: 修改代码后必须执行以下验证步骤,确保没有影响其他模块。 + +### 修改后验证清单(必须执行) + +**1. 检查是否影响了其他模块** +- 确认修改的文件不会被其他模块引用 +- 检查是否有共享组件、工具类或配置被修改 +- 验证 API 路径是否与预期一致(超管端用 `/api/v1/admin/*`,学校端用 `/api/v1/school/*`) + +**2. 确认 API 调用的正确性** +- 前端调用的 API 路径与后端 Controller 的 `@RequestMapping` 一致 +- 返回的数据结构与前端期望的类型匹配 +- 分页接口使用 `PageResult` 统一结构 + +**3. 验证数据流向** +- 数据库表名、字段名与实体类映射正确 +- 三层架构(Controller → Service → Mapper)数据传递使用正确的类型 +- DTO/VO 仅在 Controller 层使用,Service 和 Mapper 层使用 Entity + +### 问题定位步骤 + +当发现功能异常时,按以下步骤定位: + +1. **打开浏览器开发者工具(F12)** + - 查看 Console 标签页:是否有 JavaScript 错误 + - 查看 Network 标签页:API 请求返回了什么数据 + - 检查请求路径是否正确(应该 `/api/v1/...` 不是 `/api/api/v1/...`) + +2. **检查后端日志** + - 确认后端服务是否启动(端口 8480) + - 查看 SQL 查询日志,确认查询的表和字段正确 + - 检查是否有异常堆栈信息 + +3. **验证数据库数据** + - 确认数据库表中的数据是否符合预期 + - 检查关联关系(外键、中间表)是否正确 + - 验证三层架构的数据层级关系是否混淆 + +### 常见问题排查 + +| 问题症状 | 可能原因 | 排查方法 | +|---------|---------|---------| +| API 404 错误 | 前端调用路径与后端不匹配 | 对比前端 API 路径和后端 `@RequestMapping` | +| 数据格式错误 | 返回类型与前端期望不符 | 检查后端返回的 VO 和前端类型定义 | +| 空数据或错误数据 | 查询了错误的表或字段 | 查看后端 SQL 日志和数据库实际数据 | +| 编译错误 | 类型不匹配或导入错误 | 运行 `npm run build` 或 `mvn compile` 检查 | + +--- + ## 测试完成后清理 **重要**: 测试完成后请关闭前后端服务,避免占用端口和资源。 @@ -699,6 +750,6 @@ npm run test:e2e:ui | 后端测试(待创建) | `reading-platform-java/src/test/` | | 启动脚本 | `start-all.sh` | -*本规范最后更新于 2026-03-17* +*本规范最后更新于 2026-03-18* *技术栈:统一使用 Spring Boot (Java) 后端* *JDK 版本:17(必须)* diff --git a/reading-platform-frontend/openapi.json b/reading-platform-frontend/openapi.json index 1a54f51..af5c98f 100644 --- a/reading-platform-frontend/openapi.json +++ b/reading-platform-frontend/openapi.json @@ -11,7 +11,7 @@ }, "servers": [ { - "url": "http://localhost:8080", + "url": "http://localhost:8480", "description": "Generated server url" } ], @@ -61,6 +61,10 @@ "name": "学校端 - 排课管理", "description": "School Schedule APIs" }, + { + "name": "数据修复", + "description": "临时数据修复接口" + }, { "name": "阿里云 IMM 服务", "description": "WebOffice 文档预览和编辑相关接口" @@ -7374,397 +7378,9 @@ "/api/v1/admin/packages/{id}": { "get": { "tags": [ - "超管端 - 课程套餐" + "超管端 - 课程包管理" ], - "summary": "查询套餐详情", - "operationId": "findOne_1", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "integer", - "format": "int64" - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultCoursePackageResponse" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "403": { - "description": "Forbidden", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "405": { - "description": "Method Not Allowed", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "500": { - "description": "Internal Server Error", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - } - } - }, - "put": { - "tags": [ - "超管端 - 课程套餐" - ], - "summary": "更新套餐", - "operationId": "update_1", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "integer", - "format": "int64" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PackageCreateRequest" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "OK", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultCoursePackageResponse" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "403": { - "description": "Forbidden", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "405": { - "description": "Method Not Allowed", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "500": { - "description": "Internal Server Error", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - } - } - }, - "delete": { - "tags": [ - "超管端 - 课程套餐" - ], - "summary": "删除套餐", - "operationId": "delete_1", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "integer", - "format": "int64" - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "403": { - "description": "Forbidden", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "405": { - "description": "Method Not Allowed", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "500": { - "description": "Internal Server Error", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - } - } - } - }, - "/api/v1/admin/packages/{id}/courses": { - "put": { - "tags": [ - "超管端 - 课程套餐" - ], - "summary": "设置套餐课程", - "operationId": "setCourses", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "integer", - "format": "int64" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "type": "integer", - "format": "int64" - } - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "OK", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "403": { - "description": "Forbidden", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "405": { - "description": "Method Not Allowed", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "500": { - "description": "Internal Server Error", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - } - } - } - }, - "/api/v1/admin/courses/{id}": { - "get": { - "tags": [ - "超管端 - 课程管理" - ], - "summary": "查询课程详情", + "summary": "查询课程包详情", "operationId": "getCourse_1", "parameters": [ { @@ -7852,9 +7468,9 @@ }, "put": { "tags": [ - "超管端 - 课程管理" + "超管端 - 课程包管理" ], - "summary": "更新课程", + "summary": "更新课程包", "operationId": "updateCourse", "parameters": [ { @@ -7952,9 +7568,9 @@ }, "delete": { "tags": [ - "超管端 - 课程管理" + "超管端 - 课程包管理" ], - "summary": "删除课程", + "summary": "删除课程包", "operationId": "deleteCourse", "parameters": [ { @@ -8162,7 +7778,7 @@ "超管端 - 课程环节" ], "summary": "获取课程环节详情", - "operationId": "findOne_2", + "operationId": "findOne_1", "parameters": [ { "name": "courseId", @@ -8261,7 +7877,7 @@ "超管端 - 课程环节" ], "summary": "更新课程环节", - "operationId": "update_2", + "operationId": "update_1", "parameters": [ { "name": "courseId", @@ -8370,7 +7986,7 @@ "超管端 - 课程环节" ], "summary": "删除课程环节", - "operationId": "delete_2", + "operationId": "delete_1", "parameters": [ { "name": "courseId", @@ -8787,7 +8403,7 @@ "超管端 - 课程套餐管理" ], "summary": "查询课程套餐详情", - "operationId": "findOne_3", + "operationId": "findOne_2", "parameters": [ { "name": "id", @@ -8877,7 +8493,7 @@ "超管端 - 课程套餐管理" ], "summary": "更新课程套餐", - "operationId": "update_3", + "operationId": "update_2", "parameters": [ { "name": "id", @@ -8977,7 +8593,7 @@ "超管端 - 课程套餐管理" ], "summary": "删除课程套餐", - "operationId": "delete_3", + "operationId": "delete_2", "parameters": [ { "name": "id", @@ -13362,7 +12978,7 @@ "tags": [ "学校端 - 课程套餐" ], - "summary": "续费套餐", + "summary": "续费套餐(已废弃,请使用课程套餐续费)", "operationId": "renewPackage", "parameters": [ { @@ -13385,6 +13001,109 @@ }, "required": true }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResultVoid" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResultVoid" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResultVoid" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResultVoid" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResultVoid" + } + } + } + }, + "405": { + "description": "Method Not Allowed", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResultVoid" + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResultVoid" + } + } + } + } + }, + "deprecated": true + } + }, + "/api/v1/school/packages/{collectionId}/renew": { + "post": { + "tags": [ + "学校端 - 课程套餐" + ], + "summary": "续费课程套餐", + "operationId": "renewCollection", + "parameters": [ + { + "name": "collectionId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RenewRequest" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", @@ -15231,6 +14950,86 @@ } } }, + "/api/v1/admin/util/repair-flyway": { + "post": { + "tags": [ + "admin-util-controller" + ], + "operationId": "repairFlyway", + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResultString" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResultVoid" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResultVoid" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResultVoid" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResultVoid" + } + } + } + }, + "405": { + "description": "Method Not Allowed", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResultVoid" + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResultVoid" + } + } + } + } + } + } + }, "/api/v1/admin/themes": { "get": { "tags": [ @@ -16222,689 +16021,9 @@ "/api/v1/admin/packages": { "get": { "tags": [ - "超管端 - 课程套餐" + "超管端 - 课程包管理" ], - "summary": "分页查询套餐", - "operationId": "findAll_1", - "parameters": [ - { - "name": "status", - "in": "query", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "pageNum", - "in": "query", - "required": false, - "schema": { - "type": "integer", - "format": "int32", - "default": 1 - } - }, - { - "name": "pageSize", - "in": "query", - "required": false, - "schema": { - "type": "integer", - "format": "int32", - "default": 20 - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultPageResultCoursePackageResponse" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "403": { - "description": "Forbidden", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "405": { - "description": "Method Not Allowed", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "500": { - "description": "Internal Server Error", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - } - } - }, - "post": { - "tags": [ - "超管端 - 课程套餐" - ], - "summary": "创建套餐", - "operationId": "create_1", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PackageCreateRequest" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "OK", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultCoursePackageResponse" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "403": { - "description": "Forbidden", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "405": { - "description": "Method Not Allowed", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "500": { - "description": "Internal Server Error", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - } - } - } - }, - "/api/v1/admin/packages/{id}/submit": { - "post": { - "tags": [ - "超管端 - 课程套餐" - ], - "summary": "提交审核", - "operationId": "submit", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "integer", - "format": "int64" - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "403": { - "description": "Forbidden", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "405": { - "description": "Method Not Allowed", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "500": { - "description": "Internal Server Error", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - } - } - } - }, - "/api/v1/admin/packages/{id}/review": { - "post": { - "tags": [ - "超管端 - 课程套餐" - ], - "summary": "审核套餐", - "operationId": "review", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "integer", - "format": "int64" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PackageReviewRequest" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "OK", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "403": { - "description": "Forbidden", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "405": { - "description": "Method Not Allowed", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "500": { - "description": "Internal Server Error", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - } - } - } - }, - "/api/v1/admin/packages/{id}/publish": { - "post": { - "tags": [ - "超管端 - 课程套餐" - ], - "summary": "发布套餐", - "operationId": "publish", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "integer", - "format": "int64" - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "403": { - "description": "Forbidden", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "405": { - "description": "Method Not Allowed", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "500": { - "description": "Internal Server Error", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - } - } - } - }, - "/api/v1/admin/packages/{id}/offline": { - "post": { - "tags": [ - "超管端 - 课程套餐" - ], - "summary": "下线套餐", - "operationId": "offline", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "integer", - "format": "int64" - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "403": { - "description": "Forbidden", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "405": { - "description": "Method Not Allowed", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "500": { - "description": "Internal Server Error", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - } - } - } - }, - "/api/v1/admin/packages/{id}/grant": { - "post": { - "tags": [ - "超管端 - 课程套餐" - ], - "summary": "授权套餐给租户", - "operationId": "grantToTenant", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "integer", - "format": "int64" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PackageGrantRequest" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "OK", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "403": { - "description": "Forbidden", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "405": { - "description": "Method Not Allowed", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - }, - "500": { - "description": "Internal Server Error", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultVoid" - } - } - } - } - } - } - }, - "/api/v1/admin/courses": { - "get": { - "tags": [ - "超管端 - 课程管理" - ], - "summary": "分页查询课程", + "summary": "分页查询课程包", "operationId": "getCoursePage_1", "parameters": [ { @@ -16991,9 +16110,9 @@ }, "post": { "tags": [ - "超管端 - 课程管理" + "超管端 - 课程包管理" ], - "summary": "创建课程", + "summary": "创建课程包", "operationId": "createCourse", "requestBody": { "content": { @@ -17079,12 +16198,12 @@ } } }, - "/api/v1/admin/courses/{id}/publish": { + "/api/v1/admin/packages/{id}/publish": { "post": { "tags": [ - "超管端 - 课程管理" + "超管端 - 课程包管理" ], - "summary": "发布课程", + "summary": "发布课程包", "operationId": "publishCourse", "parameters": [ { @@ -17171,12 +16290,12 @@ } } }, - "/api/v1/admin/courses/{id}/archive": { + "/api/v1/admin/packages/{id}/archive": { "post": { "tags": [ - "超管端 - 课程管理" + "超管端 - 课程包管理" ], - "summary": "归档课程", + "summary": "归档课程包", "operationId": "archiveCourse", "parameters": [ { @@ -17263,13 +16382,197 @@ } } }, + "/api/v1/admin/data-fix/fix-collection-packages": { + "post": { + "tags": [ + "数据修复" + ], + "summary": "修复套餐关联数据", + "description": "修复 packageCount 与实际关联数据不一致的问题", + "operationId": "fixCollectionPackages", + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResultMapStringObject" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResultVoid" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResultVoid" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResultVoid" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResultVoid" + } + } + } + }, + "405": { + "description": "Method Not Allowed", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResultVoid" + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResultVoid" + } + } + } + } + } + } + }, + "/api/v1/admin/data-fix/add-package-to-collection": { + "post": { + "tags": [ + "数据修复" + ], + "summary": "添加课程包到套餐", + "description": "手动添加课程包关联", + "operationId": "addPackageToCollection", + "parameters": [ + { + "name": "collectionId", + "in": "query", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "packageId", + "in": "query", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResultString" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResultVoid" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResultVoid" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResultVoid" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResultVoid" + } + } + } + }, + "405": { + "description": "Method Not Allowed", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResultVoid" + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResultVoid" + } + } + } + } + } + } + }, "/api/v1/admin/courses/{courseId}/lessons": { "get": { "tags": [ "超管端 - 课程环节" ], "summary": "获取课程的所有环节", - "operationId": "findAll_2", + "operationId": "findAll_1", "parameters": [ { "name": "courseId", @@ -17359,7 +16662,7 @@ "超管端 - 课程环节" ], "summary": "创建课程环节", - "operationId": "create_2", + "operationId": "create_1", "parameters": [ { "name": "courseId", @@ -17760,7 +17063,7 @@ "超管端 - 课程套餐管理" ], "summary": "创建课程套餐", - "operationId": "create_3", + "operationId": "create_2", "requestBody": { "content": { "application/json": { @@ -17845,13 +17148,391 @@ } } }, + "/api/v1/admin/collections/{id}/withdraw": { + "post": { + "tags": [ + "超管端 - 课程套餐管理" + ], + "summary": "撤销审核", + "operationId": "withdraw", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResultVoid" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResultVoid" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResultVoid" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResultVoid" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResultVoid" + } + } + } + }, + "405": { + "description": "Method Not Allowed", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResultVoid" + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResultVoid" + } + } + } + } + } + } + }, + "/api/v1/admin/collections/{id}/republish": { + "post": { + "tags": [ + "超管端 - 课程套餐管理" + ], + "summary": "重新发布套餐", + "operationId": "republish", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResultVoid" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResultVoid" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResultVoid" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResultVoid" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResultVoid" + } + } + } + }, + "405": { + "description": "Method Not Allowed", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResultVoid" + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResultVoid" + } + } + } + } + } + } + }, "/api/v1/admin/collections/{id}/publish": { "post": { "tags": [ "超管端 - 课程套餐管理" ], "summary": "发布套餐", - "operationId": "publish_1", + "operationId": "publish", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResultVoid" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResultVoid" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResultVoid" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResultVoid" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResultVoid" + } + } + } + }, + "405": { + "description": "Method Not Allowed", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResultVoid" + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResultVoid" + } + } + } + } + } + } + }, + "/api/v1/admin/collections/{id}/grant": { + "post": { + "tags": [ + "超管端 - 课程套餐管理" + ], + "summary": "授权课程套餐给租户", + "operationId": "grantToTenant", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GrantCollectionRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResultVoid" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResultVoid" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResultVoid" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResultVoid" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResultVoid" + } + } + } + }, + "405": { + "description": "Method Not Allowed", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResultVoid" + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResultVoid" + } + } + } + } + } + } + }, + "/api/v1/admin/collections/{id}/archive": { + "post": { + "tags": [ + "超管端 - 课程套餐管理" + ], + "summary": "下架套餐", + "operationId": "archive", "parameters": [ { "name": "id", @@ -18496,7 +18177,7 @@ "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/ResultListCourse" + "$ref": "#/components/schemas/ResultListCoursePackage" } } } @@ -21593,7 +21274,7 @@ "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/ResultCoursePackageResponse" + "$ref": "#/components/schemas/ResultCourseResponse" } } } @@ -22763,17 +22444,35 @@ "/api/v1/school/courses": { "get": { "tags": [ - "学校端 - 课程包管理" + "学校端 - 课程管理" ], "summary": "获取学校课程包列表", "operationId": "getSchoolCourses", + "parameters": [ + { + "name": "keyword", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "grade", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/ResultListCourse" + "$ref": "#/components/schemas/ResultListCoursePackage" } } } @@ -22844,9 +22543,9 @@ "/api/v1/school/courses/{id}": { "get": { "tags": [ - "学校端 - 课程包管理" + "学校端 - 课程管理" ], - "summary": "获取课程包详情", + "summary": "获取课程详情", "operationId": "getSchoolCourse", "parameters": [ { @@ -22865,7 +22564,7 @@ "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/ResultCourse" + "$ref": "#/components/schemas/ResultCoursePackage" } } } @@ -25167,20 +24866,21 @@ } } }, - "/api/v1/admin/packages/all": { + "/api/v1/admin/data-fix/check-consistency": { "get": { "tags": [ - "超管端 - 课程套餐" + "数据修复" ], - "summary": "查询所有已发布的套餐列表", - "operationId": "getPublishedPackages", + "summary": "检查数据一致性", + "description": "检查所有套餐的 packageCount 与实际关联记录是否一致", + "operationId": "checkConsistency", "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/ResultListCoursePackageResponse" + "$ref": "#/components/schemas/ResultMapStringObject" } } } @@ -27095,6 +26795,11 @@ "type": "string", "description": "套餐类型" }, + "collectionId": { + "type": "integer", + "description": "课程套餐ID(用于三层架构)", + "format": "int64" + }, "teacherQuota": { "type": "integer", "description": "教师配额", @@ -27477,210 +27182,6 @@ } } }, - "PackageCreateRequest": { - "required": [ - "gradeLevels", - "name", - "price" - ], - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "套餐名称" - }, - "description": { - "type": "string", - "description": "套餐描述" - }, - "price": { - "type": "integer", - "description": "价格(分)", - "format": "int64" - }, - "discountPrice": { - "type": "integer", - "description": "折后价格(分)", - "format": "int64" - }, - "discountType": { - "type": "string", - "description": "折扣类型" - }, - "gradeLevels": { - "type": "array", - "description": "适用年级", - "items": { - "type": "string", - "description": "适用年级" - } - } - }, - "description": "套餐创建请求" - }, - "CoursePackageCourseItem": { - "type": "object", - "properties": { - "id": { - "type": "integer", - "description": "课程 ID", - "format": "int64" - }, - "name": { - "type": "string", - "description": "课程名称" - }, - "gradeLevel": { - "type": "string", - "description": "适用年级" - }, - "sortOrder": { - "type": "integer", - "description": "排序号", - "format": "int32" - }, - "scheduleRefData": { - "type": "string", - "description": "排课计划参考数据(JSON)" - }, - "lessonType": { - "type": "string", - "description": "课程类型" - } - }, - "description": "课程包中的课程项" - }, - "CoursePackageResponse": { - "type": "object", - "properties": { - "id": { - "type": "integer", - "description": "ID", - "format": "int64" - }, - "name": { - "type": "string", - "description": "名称" - }, - "description": { - "type": "string", - "description": "描述" - }, - "price": { - "type": "integer", - "description": "价格(分)", - "format": "int64" - }, - "discountPrice": { - "type": "integer", - "description": "折后价格(分)", - "format": "int64" - }, - "discountType": { - "type": "string", - "description": "折扣类型" - }, - "gradeLevels": { - "type": "array", - "description": "年级水平(数组)", - "items": { - "type": "string", - "description": "年级水平(数组)" - } - }, - "courseCount": { - "type": "integer", - "description": "课程数量", - "format": "int32" - }, - "tenantCount": { - "type": "integer", - "description": "使用学校数", - "format": "int32" - }, - "status": { - "type": "string", - "description": "状态" - }, - "submittedAt": { - "type": "string", - "description": "提交时间", - "format": "date-time" - }, - "submittedBy": { - "type": "integer", - "description": "提交人 ID", - "format": "int64" - }, - "reviewedAt": { - "type": "string", - "description": "审核时间", - "format": "date-time" - }, - "reviewedBy": { - "type": "integer", - "description": "审核人 ID", - "format": "int64" - }, - "reviewComment": { - "type": "string", - "description": "审核意见" - }, - "publishedAt": { - "type": "string", - "description": "发布时间", - "format": "date-time" - }, - "createdAt": { - "type": "string", - "description": "创建时间", - "format": "date-time" - }, - "updatedAt": { - "type": "string", - "description": "更新时间", - "format": "date-time" - }, - "courses": { - "type": "array", - "description": "包含的课程", - "items": { - "$ref": "#/components/schemas/CoursePackageCourseItem" - } - }, - "startDate": { - "type": "string", - "description": "开始日期(租户套餐)", - "format": "date" - }, - "endDate": { - "type": "string", - "description": "结束日期(租户套餐)", - "format": "date" - }, - "sortOrder": { - "type": "integer", - "description": "排序号(在课程套餐中的顺序)", - "format": "int32" - } - }, - "description": "课程套餐响应" - }, - "ResultCoursePackageResponse": { - "type": "object", - "properties": { - "code": { - "type": "integer", - "format": "int32" - }, - "message": { - "type": "string" - }, - "data": { - "$ref": "#/components/schemas/CoursePackageResponse" - } - } - }, "CourseUpdateRequest": { "type": "object", "properties": { @@ -29699,6 +29200,21 @@ } } }, + "ResultString": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "data": { + "type": "string" + } + } + }, "TenantCreateRequest": { "required": [ "code", @@ -29758,7 +29274,7 @@ "description": "结束日期", "format": "date" }, - "packageId": { + "collectionId": { "type": "integer", "description": "课程套餐 ID(可选)", "format": "int64" @@ -29849,44 +29365,6 @@ }, "description": "资源项目创建请求" }, - "PackageReviewRequest": { - "type": "object", - "properties": { - "approved": { - "type": "boolean", - "description": "是否通过" - }, - "comment": { - "type": "string", - "description": "审核意见" - }, - "publish": { - "type": "boolean", - "description": "是否同时发布(仅当 approved=true 时有效)" - } - }, - "description": "套餐审核请求" - }, - "PackageGrantRequest": { - "type": "object", - "properties": { - "tenantId": { - "type": "integer", - "description": "租户 ID", - "format": "int64" - }, - "endDate": { - "type": "string", - "description": "结束日期" - }, - "pricePaid": { - "type": "integer", - "description": "支付金额(分)", - "format": "int64" - } - }, - "description": "套餐授权请求" - }, "CourseCreateRequest": { "required": [ "name" @@ -30050,6 +29528,25 @@ }, "description": "课程创建请求" }, + "GrantCollectionRequest": { + "type": "object", + "properties": { + "tenantId": { + "type": "integer", + "description": "租户ID", + "format": "int64" + }, + "endDate": { + "type": "string", + "description": "结束日期(ISO格式,如:2024-12-31)" + }, + "pricePaid": { + "type": "integer", + "description": "支付价格(分)", + "format": "int64" + } + } + }, "Lesson": { "type": "object", "properties": { @@ -30412,7 +29909,7 @@ }, "description": "课表响应" }, - "Course": { + "CoursePackage": { "type": "object", "properties": { "id": { @@ -30669,9 +30166,9 @@ "description": "平均评分" } }, - "description": "课程包实体" + "description": "课程包实体(通过7步创建流程创建)" }, - "ResultListCourse": { + "ResultListCoursePackage": { "type": "object", "properties": { "code": { @@ -30684,7 +30181,7 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/Course" + "$ref": "#/components/schemas/CoursePackage" } } } @@ -31708,6 +31205,154 @@ } } }, + "CoursePackageCourseItem": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "description": "课程 ID", + "format": "int64" + }, + "name": { + "type": "string", + "description": "课程名称" + }, + "gradeLevel": { + "type": "string", + "description": "适用年级" + }, + "sortOrder": { + "type": "integer", + "description": "排序号", + "format": "int32" + }, + "scheduleRefData": { + "type": "string", + "description": "排课计划参考数据(JSON)" + }, + "lessonType": { + "type": "string", + "description": "课程类型" + } + }, + "description": "课程包中的课程项" + }, + "CoursePackageResponse": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "description": "ID", + "format": "int64" + }, + "name": { + "type": "string", + "description": "名称" + }, + "description": { + "type": "string", + "description": "描述" + }, + "price": { + "type": "integer", + "description": "价格(分)", + "format": "int64" + }, + "discountPrice": { + "type": "integer", + "description": "折后价格(分)", + "format": "int64" + }, + "discountType": { + "type": "string", + "description": "折扣类型" + }, + "gradeLevels": { + "type": "array", + "description": "年级水平(数组)", + "items": { + "type": "string", + "description": "年级水平(数组)" + } + }, + "courseCount": { + "type": "integer", + "description": "课程数量", + "format": "int32" + }, + "tenantCount": { + "type": "integer", + "description": "使用学校数", + "format": "int32" + }, + "status": { + "type": "string", + "description": "状态" + }, + "submittedAt": { + "type": "string", + "description": "提交时间", + "format": "date-time" + }, + "submittedBy": { + "type": "integer", + "description": "提交人 ID", + "format": "int64" + }, + "reviewedAt": { + "type": "string", + "description": "审核时间", + "format": "date-time" + }, + "reviewedBy": { + "type": "integer", + "description": "审核人 ID", + "format": "int64" + }, + "reviewComment": { + "type": "string", + "description": "审核意见" + }, + "publishedAt": { + "type": "string", + "description": "发布时间", + "format": "date-time" + }, + "createdAt": { + "type": "string", + "description": "创建时间", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "description": "更新时间", + "format": "date-time" + }, + "courses": { + "type": "array", + "description": "包含的课程", + "items": { + "$ref": "#/components/schemas/CoursePackageCourseItem" + } + }, + "startDate": { + "type": "string", + "description": "开始日期(租户套餐)", + "format": "date" + }, + "endDate": { + "type": "string", + "description": "结束日期(租户套餐)", + "format": "date" + }, + "sortOrder": { + "type": "integer", + "description": "排序号(在课程套餐中的顺序)", + "format": "int32" + } + }, + "description": "课程套餐响应" + }, "ResultListCoursePackageResponse": { "type": "object", "properties": { @@ -31980,7 +31625,7 @@ } } }, - "ResultCourse": { + "ResultCoursePackage": { "type": "object", "properties": { "code": { @@ -31991,7 +31636,7 @@ "type": "string" }, "data": { - "$ref": "#/components/schemas/Course" + "$ref": "#/components/schemas/CoursePackage" } } }, @@ -32793,48 +32438,6 @@ } } }, - "PageResultCoursePackageResponse": { - "type": "object", - "properties": { - "list": { - "type": "array", - "items": { - "$ref": "#/components/schemas/CoursePackageResponse" - } - }, - "total": { - "type": "integer", - "format": "int64" - }, - "pageNum": { - "type": "integer", - "format": "int64" - }, - "pageSize": { - "type": "integer", - "format": "int64" - }, - "pages": { - "type": "integer", - "format": "int64" - } - } - }, - "ResultPageResultCoursePackageResponse": { - "type": "object", - "properties": { - "code": { - "type": "integer", - "format": "int32" - }, - "message": { - "type": "string" - }, - "data": { - "$ref": "#/components/schemas/PageResultCoursePackageResponse" - } - } - }, "CoursePageQueryRequest": { "type": "object", "properties": { diff --git a/reading-platform-frontend/scripts/fetch-openapi.js b/reading-platform-frontend/scripts/fetch-openapi.js index 8327c8d..a3b6926 100644 --- a/reading-platform-frontend/scripts/fetch-openapi.js +++ b/reading-platform-frontend/scripts/fetch-openapi.js @@ -7,7 +7,7 @@ import { join, dirname } from 'path'; import { fileURLToPath } from 'url'; const __dirname = dirname(fileURLToPath(import.meta.url)); -const TARGET = 'http://localhost:8080/v3/api-docs'; +const TARGET = 'http://localhost:8480/v3/api-docs'; const OUTPUT = join(__dirname, '../openapi.json'); async function fetchAndFix() { diff --git a/reading-platform-frontend/src/api/collections.ts b/reading-platform-frontend/src/api/collections.ts new file mode 100644 index 0000000..d4f213b --- /dev/null +++ b/reading-platform-frontend/src/api/collections.ts @@ -0,0 +1,224 @@ +import { getReadingPlatformAPI } from './generated'; + +const api = getReadingPlatformAPI(); + +// ============= 类型定义 ============= + +export interface CollectionQueryParams { + pageNum?: number; + pageSize?: number; + status?: string; +} + +export interface Collection { + id: number; + name: string; + description?: string; + price: number; + discountPrice?: number; + discountType?: string; + gradeLevels: string[]; + packageCount?: number; + status: string; + createdAt: string; + updatedAt: string; + packages?: CollectionPackage[]; + reviewComment?: string; +} + +export interface CollectionPackage { + id: number; + name: string; + description?: string; +} + +export interface CreateCollectionDto { + name: string; + description?: string; + price: number; + discountPrice?: number; + discountType?: string; + gradeLevels: string[]; +} + +export interface UpdateCollectionDto { + name?: string; + description?: string; + price?: number; + discountPrice?: number; + discountType?: string; + gradeLevels?: string[]; +} + +// ============= 辅助函数 ============= + +// 修复 gradeLevels 格式:后端返回的格式是 ["[\"小班\"", " \"中班\""] +// 需要转换为 ["小班", "中班"] +function fixGradeLevels(gradeLevels: string | string[] | undefined): string[] { + if (!gradeLevels) return []; + + // 如果是字符串数组,尝试拼接并解析 + if (Array.isArray(gradeLevels)) { + if (gradeLevels.length === 0) return []; + // 检查是否是被分割的 JSON 字符串 + if (gradeLevels[0]?.startsWith('[')) { + try { + const joined = gradeLevels.join(''); + return JSON.parse(joined); + } catch { + return []; + } + } + return gradeLevels; + } + + // 如果是字符串,尝试解析 JSON + if (typeof gradeLevels === 'string') { + try { + return JSON.parse(gradeLevels); + } catch { + return []; + } + } + + return []; +} + +// 转换 API 响应数据为前端格式 +function normalizeCollection(data: any): Collection { + // 如果数据是包装的响应格式 { code, message, data },提取 data 字段 + const collectionData = data?.data ?? data; + + if (!collectionData) { + throw new Error('套餐数据为空'); + } + + return { + ...collectionData, + id: Number(collectionData.id), + price: Number(collectionData.price), + discountPrice: collectionData.discountPrice ? Number(collectionData.discountPrice) : undefined, + gradeLevels: fixGradeLevels(collectionData.gradeLevels), + }; +} + +function normalizePageResult(raw: any): { + items: Collection[]; + total: number; + page: number; + pageSize: number; +} { + const list = raw?.list ?? raw?.items ?? []; + return { + items: Array.isArray(list) ? list.map(normalizeCollection) : [], + total: Number(raw?.total ?? 0), + page: Number(raw?.pageNum ?? raw?.page ?? 1), + pageSize: Number(raw?.pageSize ?? 10), + }; +} + +// ============= API 函数 ============= + +// 获取课程套餐列表 +export function getCollections(params: CollectionQueryParams = {}): Promise<{ + items: Collection[]; + total: number; + page: number; + pageSize: number; +}> { + return (api.page as any)({ + pageNum: params.pageNum ?? 1, + pageSize: params.pageSize ?? 10, + ...(params.status ? { status: params.status } : {}), + }).then(normalizePageResult) as any; +} + +// 获取课程套餐详情 +export async function getCollection(id: number | string): Promise { + const data = await (api.findOne2 as any)(Number(id)) as any; + if (!data) { + throw new Error('获取套餐详情失败:返回数据为空'); + } + return normalizeCollection(data); +} + +// 创建课程套餐 +export function createCollection(data: CreateCollectionDto): Promise { + return (api.create as any)(data) as any; +} + +// 更新课程套餐 +export function updateCollection(id: number | string, data: UpdateCollectionDto): Promise { + return (api.update2 as any)(id as number, data) as any; +} + +// 删除课程套餐 +export function deleteCollection(id: number | string): Promise { + return (api.delete2 as any)(id as number) as any; +} + +// 设置套餐课程包 +export function setCollectionPackages(id: number | string, packageIds: number[]): Promise { + return (api.setPackages as any)(id as number, packageIds) as any; +} + +// 发布课程套餐 +export function publishCollection(id: number | string): Promise { + return (api.publish as any)(id as number) as any; +} + +// 下架课程套餐 +export function archiveCollection(id: number | string): Promise { + return (api.archive as any)(id as number) as any; +} + +// 重新发布课程套餐 +export function republishCollection(id: number | string): Promise { + return (api.republish as any)(id as number) as any; +} + +// 撤销审核 +export function withdrawCollection(id: number | string): Promise { + return (api.withdraw as any)(id as number) as any; +} + +// 授予租户 +export function grantToTenant(collectionId: number | string, tenantIds: number[]): Promise { + return (api.grantToTenant as any)(collectionId as number, tenantIds) as any; +} + +// ============= 常量 ============= + +export const COLLECTION_STATUS_MAP: Record = { + DRAFT: { label: '草稿', color: 'default' }, + PENDING: { label: '待审核', color: 'processing' }, + APPROVED: { label: '已通过', color: 'success' }, + PUBLISHED: { label: '已发布', color: 'blue' }, + ARCHIVED: { label: '已下架', color: 'warning' }, + REJECTED: { label: '已驳回', color: 'error' }, +}; + +export function getCollectionStatusInfo(status: string) { + return COLLECTION_STATUS_MAP[status] || { label: status, color: 'default' }; +} + +// 解析适用年级 +export function parseGradeLevels(gradeLevels: string | string[]): string[] { + if (Array.isArray(gradeLevels)) return gradeLevels; + try { + return JSON.parse(gradeLevels || '[]'); + } catch { + return []; + } +} + +// 格式化价格 +export function formatPrice(price: number | null | undefined): string { + if (price === null || price === undefined) return '-'; + return `¥${(price / 100).toFixed(2)}`; +} + +// 格式化日期 +export function formatDate(date: string): string { + return new Date(date).toLocaleString('zh-CN'); +} diff --git a/reading-platform-frontend/src/api/course.ts b/reading-platform-frontend/src/api/course.ts index 8395e3a..1dc63a2 100644 --- a/reading-platform-frontend/src/api/course.ts +++ b/reading-platform-frontend/src/api/course.ts @@ -197,9 +197,9 @@ export function approveCourse(id: number, data: { checklist?: any; comment?: str return api.publishCourse(id) as any; } -// 审核驳回(课程专用,调用 POST /api/v1/admin/courses/{id}/reject) +// 审核驳回(课程专用,调用 POST /api/v1/admin/packages/{id}/reject) export function rejectCourse(id: number, data: { checklist?: any; comment: string }): Promise { - return axios.post(`/api/v1/admin/courses/${id}/reject`, { comment: data.comment }).then((res: any) => { + return axios.post(`/api/v1/admin/packages/${id}/reject`, { comment: data.comment }).then((res: any) => { const body = res?.data; if (body && typeof body === 'object' && 'code' in body && body.code !== 200 && body.code !== 0) { throw new Error(body.message || '驳回失败'); diff --git a/reading-platform-frontend/src/api/generated/index.ts b/reading-platform-frontend/src/api/generated/index.ts index 33c8fd0..62d2c15 100644 --- a/reading-platform-frontend/src/api/generated/index.ts +++ b/reading-platform-frontend/src/api/generated/index.ts @@ -6,6 +6,7 @@ * OpenAPI spec version: 1.0.0 */ import type { + AddPackageToCollectionParams, BasicSettingsUpdateRequest, BindStudentParams, ChangePasswordParams, @@ -21,7 +22,6 @@ import type { DeleteFileBody, ExportGrowthRecordsParams, ExportLessonsParams, - FindAll1Params, FindAllItemsParams, FindAllLibrariesParams, GenerateEditTokenParams, @@ -55,6 +55,7 @@ import type { GetRecentGrowthRecordsParams, GetSchedules1Params, GetSchedulesParams, + GetSchoolCoursesParams, GetStudentPageParams, GetTaskPage1Params, GetTaskPageParams, @@ -65,6 +66,7 @@ import type { GetTenantPageParams, GetTimetable1Params, GetTimetableParams, + GrantCollectionRequest, GrowthRecordCreateRequest, GrowthRecordUpdateRequest, LessonCreateRequest, @@ -74,9 +76,6 @@ import type { LessonUpdateRequest, LoginRequest, NotificationSettingsUpdateRequest, - PackageCreateRequest, - PackageGrantRequest, - PackageReviewRequest, PageParams, ParentCreateRequest, ParentUpdateRequest, @@ -1224,9 +1223,9 @@ const deleteItem = ( } /** - * @summary 查询套餐详情 + * @summary 查询课程包详情 */ -const findOne1 = ( +const getCourse1 = ( id: number, ) => { return customMutator( @@ -1237,72 +1236,14 @@ const findOne1 = ( } /** - * @summary 更新套餐 - */ -const update1 = ( - id: number, - packageCreateRequest: PackageCreateRequest, - ) => { - return customMutator( - {url: `/api/v1/admin/packages/${id}`, method: 'PUT', - headers: {'Content-Type': 'application/json', }, - data: packageCreateRequest, - responseType: 'blob' - }, - ); - } - -/** - * @summary 删除套餐 - */ -const delete1 = ( - id: number, - ) => { - return customMutator( - {url: `/api/v1/admin/packages/${id}`, method: 'DELETE', - responseType: 'blob' - }, - ); - } - -/** - * @summary 设置套餐课程 - */ -const setCourses = ( - id: number, - setCoursesBody: number[], - ) => { - return customMutator( - {url: `/api/v1/admin/packages/${id}/courses`, method: 'PUT', - headers: {'Content-Type': 'application/json', }, - data: setCoursesBody, - responseType: 'blob' - }, - ); - } - -/** - * @summary 查询课程详情 - */ -const getCourse1 = ( - id: number, - ) => { - return customMutator( - {url: `/api/v1/admin/courses/${id}`, method: 'GET', - responseType: 'blob' - }, - ); - } - -/** - * @summary 更新课程 + * @summary 更新课程包 */ const updateCourse = ( id: number, courseUpdateRequest: CourseUpdateRequest, ) => { return customMutator( - {url: `/api/v1/admin/courses/${id}`, method: 'PUT', + {url: `/api/v1/admin/packages/${id}`, method: 'PUT', headers: {'Content-Type': 'application/json', }, data: courseUpdateRequest, responseType: 'blob' @@ -1311,13 +1252,13 @@ const updateCourse = ( } /** - * @summary 删除课程 + * @summary 删除课程包 */ const deleteCourse = ( id: number, ) => { return customMutator( - {url: `/api/v1/admin/courses/${id}`, method: 'DELETE', + {url: `/api/v1/admin/packages/${id}`, method: 'DELETE', responseType: 'blob' }, ); @@ -1343,7 +1284,7 @@ const reorderSteps = ( /** * @summary 获取课程环节详情 */ -const findOne2 = ( +const findOne1 = ( courseId: number, id: number, ) => { @@ -1357,7 +1298,7 @@ const findOne2 = ( /** * @summary 更新课程环节 */ -const update2 = ( +const update1 = ( courseId: number, id: number, courseLessonCreateRequest: CourseLessonCreateRequest, @@ -1374,7 +1315,7 @@ const update2 = ( /** * @summary 删除课程环节 */ -const delete2 = ( +const delete1 = ( courseId: number, id: number, ) => { @@ -1435,7 +1376,7 @@ const reorder1 = ( /** * @summary 查询课程套餐详情 */ -const findOne3 = ( +const findOne2 = ( id: number, ) => { return customMutator( @@ -1448,7 +1389,7 @@ const findOne3 = ( /** * @summary 更新课程套餐 */ -const update3 = ( +const update2 = ( id: number, createCollectionRequest: CreateCollectionRequest, ) => { @@ -1464,7 +1405,7 @@ const update3 = ( /** * @summary 删除课程套餐 */ -const delete3 = ( +const delete2 = ( id: number, ) => { return customMutator( @@ -2082,7 +2023,8 @@ const resetPassword1 = ( } /** - * @summary 续费套餐 + * @deprecated + * @summary 续费套餐(已废弃,请使用课程套餐续费) */ const renewPackage = ( id: number, @@ -2097,6 +2039,22 @@ const renewPackage = ( ); } +/** + * @summary 续费课程套餐 + */ +const renewCollection = ( + collectionId: number, + renewRequest: RenewRequest, + ) => { + return customMutator( + {url: `/api/v1/school/packages/${collectionId}/renew`, method: 'POST', + headers: {'Content-Type': 'application/json', }, + data: renewRequest, + responseType: 'blob' + }, + ); + } + /** * @summary Get growth record page */ @@ -2359,6 +2317,16 @@ const changePassword = ( ); } +const repairFlyway = ( + + ) => { + return customMutator( + {url: `/api/v1/admin/util/repair-flyway`, method: 'POST', + responseType: 'blob' + }, + ); + } + /** * @summary 查询所有主题 */ @@ -2503,10 +2471,10 @@ const batchDeleteItems = ( } /** - * @summary 分页查询套餐 + * @summary 分页查询课程包 */ -const findAll1 = ( - params?: FindAll1Params, +const getCoursePage1 = ( + params: GetCoursePage1Params, ) => { return customMutator( {url: `/api/v1/admin/packages`, method: 'GET', @@ -2517,53 +2485,24 @@ const findAll1 = ( } /** - * @summary 创建套餐 + * @summary 创建课程包 */ -const create1 = ( - packageCreateRequest: PackageCreateRequest, +const createCourse = ( + courseCreateRequest: CourseCreateRequest, ) => { return customMutator( {url: `/api/v1/admin/packages`, method: 'POST', headers: {'Content-Type': 'application/json', }, - data: packageCreateRequest, + data: courseCreateRequest, responseType: 'blob' }, ); } /** - * @summary 提交审核 + * @summary 发布课程包 */ -const submit = ( - id: number, - ) => { - return customMutator( - {url: `/api/v1/admin/packages/${id}/submit`, method: 'POST', - responseType: 'blob' - }, - ); - } - -/** - * @summary 审核套餐 - */ -const review = ( - id: number, - packageReviewRequest: PackageReviewRequest, - ) => { - return customMutator( - {url: `/api/v1/admin/packages/${id}/review`, method: 'POST', - headers: {'Content-Type': 'application/json', }, - data: packageReviewRequest, - responseType: 'blob' - }, - ); - } - -/** - * @summary 发布套餐 - */ -const publish = ( +const publishCourse = ( id: number, ) => { return customMutator( @@ -2574,84 +2513,42 @@ const publish = ( } /** - * @summary 下线套餐 - */ -const offline = ( - id: number, - ) => { - return customMutator( - {url: `/api/v1/admin/packages/${id}/offline`, method: 'POST', - responseType: 'blob' - }, - ); - } - -/** - * @summary 授权套餐给租户 - */ -const grantToTenant = ( - id: number, - packageGrantRequest: PackageGrantRequest, - ) => { - return customMutator( - {url: `/api/v1/admin/packages/${id}/grant`, method: 'POST', - headers: {'Content-Type': 'application/json', }, - data: packageGrantRequest, - responseType: 'blob' - }, - ); - } - -/** - * @summary 分页查询课程 - */ -const getCoursePage1 = ( - params: GetCoursePage1Params, - ) => { - return customMutator( - {url: `/api/v1/admin/courses`, method: 'GET', - params, - responseType: 'blob' - }, - ); - } - -/** - * @summary 创建课程 - */ -const createCourse = ( - courseCreateRequest: CourseCreateRequest, - ) => { - return customMutator( - {url: `/api/v1/admin/courses`, method: 'POST', - headers: {'Content-Type': 'application/json', }, - data: courseCreateRequest, - responseType: 'blob' - }, - ); - } - -/** - * @summary 发布课程 - */ -const publishCourse = ( - id: number, - ) => { - return customMutator( - {url: `/api/v1/admin/courses/${id}/publish`, method: 'POST', - responseType: 'blob' - }, - ); - } - -/** - * @summary 归档课程 + * @summary 归档课程包 */ const archiveCourse = ( id: number, ) => { return customMutator( - {url: `/api/v1/admin/courses/${id}/archive`, method: 'POST', + {url: `/api/v1/admin/packages/${id}/archive`, method: 'POST', + responseType: 'blob' + }, + ); + } + +/** + * 修复 packageCount 与实际关联数据不一致的问题 + * @summary 修复套餐关联数据 + */ +const fixCollectionPackages = ( + + ) => { + return customMutator( + {url: `/api/v1/admin/data-fix/fix-collection-packages`, method: 'POST', + responseType: 'blob' + }, + ); + } + +/** + * 手动添加课程包关联 + * @summary 添加课程包到套餐 + */ +const addPackageToCollection = ( + params: AddPackageToCollectionParams, + ) => { + return customMutator( + {url: `/api/v1/admin/data-fix/add-package-to-collection`, method: 'POST', + params, responseType: 'blob' }, ); @@ -2660,7 +2557,7 @@ const archiveCourse = ( /** * @summary 获取课程的所有环节 */ -const findAll2 = ( +const findAll1 = ( courseId: number, ) => { return customMutator( @@ -2673,7 +2570,7 @@ const findAll2 = ( /** * @summary 创建课程环节 */ -const create2 = ( +const create1 = ( courseId: number, courseLessonCreateRequest: CourseLessonCreateRequest, ) => { @@ -2734,7 +2631,7 @@ const page = ( /** * @summary 创建课程套餐 */ -const create3 = ( +const create2 = ( createCollectionRequest: CreateCollectionRequest, ) => { return customMutator( @@ -2746,10 +2643,36 @@ const create3 = ( ); } +/** + * @summary 撤销审核 + */ +const withdraw = ( + id: number, + ) => { + return customMutator( + {url: `/api/v1/admin/collections/${id}/withdraw`, method: 'POST', + responseType: 'blob' + }, + ); + } + +/** + * @summary 重新发布套餐 + */ +const republish = ( + id: number, + ) => { + return customMutator( + {url: `/api/v1/admin/collections/${id}/republish`, method: 'POST', + responseType: 'blob' + }, + ); + } + /** * @summary 发布套餐 */ -const publish1 = ( +const publish = ( id: number, ) => { return customMutator( @@ -2759,6 +2682,35 @@ const publish1 = ( ); } +/** + * @summary 授权课程套餐给租户 + */ +const grantToTenant = ( + id: number, + grantCollectionRequest: GrantCollectionRequest, + ) => { + return customMutator( + {url: `/api/v1/admin/collections/${id}/grant`, method: 'POST', + headers: {'Content-Type': 'application/json', }, + data: grantCollectionRequest, + responseType: 'blob' + }, + ); + } + +/** + * @summary 下架套餐 + */ +const archive = ( + id: number, + ) => { + return customMutator( + {url: `/api/v1/admin/collections/${id}/archive`, method: 'POST', + responseType: 'blob' + }, + ); + } + /** * @summary 获取本周统计 */ @@ -3470,17 +3422,18 @@ const exportGrowthRecords = ( * @summary 获取学校课程包列表 */ const getSchoolCourses = ( - + params?: GetSchoolCoursesParams, ) => { return customMutator( {url: `/api/v1/school/courses`, method: 'GET', + params, responseType: 'blob' }, ); } /** - * @summary 获取课程包详情 + * @summary 获取课程详情 */ const getSchoolCourse = ( id: number, @@ -3821,13 +3774,14 @@ const getStats1 = ( } /** - * @summary 查询所有已发布的套餐列表 + * 检查所有套餐的 packageCount 与实际关联记录是否一致 + * @summary 检查数据一致性 */ -const getPublishedPackages = ( +const checkConsistency = ( ) => { return customMutator( - {url: `/api/v1/admin/packages/all`, method: 'GET', + {url: `/api/v1/admin/data-fix/check-consistency`, method: 'GET', responseType: 'blob' }, ); @@ -3862,7 +3816,7 @@ const deleteFile = ( ); } -return {getTask,updateTask,deleteTask,getTemplate,updateTemplate,deleteTemplate,getSchedule,updateSchedule,cancelSchedule,getLesson,updateLesson,getLessonProgress,saveLessonProgress,getGrowthRecord,updateGrowthRecord,deleteGrowthRecord,getTeacher,updateTeacher,deleteTeacher,getTask1,updateTask1,deleteTask1,getTemplate1,updateTemplate1,deleteTemplate1,getStudent,updateStudent,deleteStudent,getSettings,updateSettings,getSecuritySettings,updateSecuritySettings,getNotificationSettings,updateNotificationSettings,getBasicSettings,updateBasicSettings,getSchedule1,updateSchedule1,cancelSchedule1,getParent,updateParent,deleteParent,getGrowthRecord1,updateGrowthRecord1,deleteGrowthRecord1,getClass,updateClass,deleteClass,updateClassTeacher,removeClassTeacher,getGrowthRecord2,updateGrowthRecord2,deleteGrowthRecord2,findOne,update,_delete,reorder,getTenant,updateTenant,deleteTenant,updateTenantStatus,updateTenantQuota,getAllSettings,updateSettings1,getStorageSettings,updateStorageSettings,getSecuritySettings1,updateSecuritySettings1,getNotificationSettings1,updateNotificationSettings1,getBasicSettings1,updateBasicSettings1,findLibrary,updateLibrary,deleteLibrary,findItem,updateItem,deleteItem,findOne1,update1,delete1,setCourses,getCourse1,updateCourse,deleteCourse,reorderSteps,findOne2,update2,delete2,updateStep,removeStep,reorder1,findOne3,update3,delete3,setPackages,getTaskPage,createTask,getTemplates,createTemplate,createFromTemplate,getSchedules,createSchedule,markAsRead,markAllAsRead,getMyLessons,createLesson,saveStudentRecord,batchSaveStudentRecords,startLesson,getLessonFeedback,submitFeedback,completeLesson,cancelLesson,createLessonFromSchedule,startLessonFromSchedule,getGrowthRecordPage,createGrowthRecord,getTeacherPage,createTeacher,resetPassword,getTaskPage1,createTask1,getTemplates1,createTemplate1,getStudentPage,createStudent,getSchedules1,createSchedule1,checkConflict,batchCreateSchedules,createSchedulesByClasses,getParentPage,createParent,bindStudent,unbindStudent,resetPassword1,renewPackage,getGrowthRecordPage1,createGrowthRecord1,getClassPage,createClass,getClassTeachers1,assignTeachers,getClassStudents1,assignStudents,completeTask,markAsRead1,markAllAsRead1,createGrowthRecord2,refreshToken,uploadFile,refreshToken1,logout,login,changePassword,findAll,create,getTenantPage,createTenant,resetTenantPassword,findAllLibraries,createLibrary,findAllItems,createItem,batchDeleteItems,findAll1,create1,submit,review,publish,offline,grantToTenant,getCoursePage1,createCourse,publishCourse,archiveCourse,findAll2,create2,findSteps,createStep,page,create3,publish1,getWeeklyStats,getTodayLessons,getDefaultTemplate,getAllStudents,getTodaySchedules,getTimetable,getRecommendedCourses,getMyNotifications,getNotification,getUnreadCount,getStudentRecords,getTodayLessons1,getLessonTrend,getFeedbacks,getFeedbackStats,getDashboard,getCoursePage,getCourse,getAllCourses,getCourseUsage,getClasses,getClassTeachers,getClassStudents,getDefaultTemplate1,getSchoolStats,getActiveTeachers,getLessonTrend1,getCourseUsageStats,getCourseDistribution,getRecentActivities,getTimetable1,getCoursePackageLessonTypes,getCalendarViewData,getTeacherReports,getStudentReports,getOverview,getCourseReports,getParentChildren,findTenantCollections,getPackagesByCollection,getPackageCourses,getPackageInfo,getPackageUsage,findTenantPackages,getLogList,getLogDetail,getLogStats,getFeedbacks1,getFeedbackStats1,exportTeacherStats,exportStudentStats,exportLessons,exportGrowthRecords,getSchoolCourses,getSchoolCourse,getMyTasks,getTask2,getTasksByStudent,getMyNotifications1,getNotification1,getUnreadCount1,getGrowthRecordsByStudent,getRecentGrowthRecords,getMyChildren,getChild,getChildGrowth,generateEditToken,generateReadOnlyToken,getOssToken,getCurrentUser,getTenantStats,getAllActiveTenants,getStats,getTrendData,getActiveTenants,getPopularCourses,getRecentActivities1,getTenantDefaults,getStats1,getPublishedPackages,findByType,deleteFile}}; +return {getTask,updateTask,deleteTask,getTemplate,updateTemplate,deleteTemplate,getSchedule,updateSchedule,cancelSchedule,getLesson,updateLesson,getLessonProgress,saveLessonProgress,getGrowthRecord,updateGrowthRecord,deleteGrowthRecord,getTeacher,updateTeacher,deleteTeacher,getTask1,updateTask1,deleteTask1,getTemplate1,updateTemplate1,deleteTemplate1,getStudent,updateStudent,deleteStudent,getSettings,updateSettings,getSecuritySettings,updateSecuritySettings,getNotificationSettings,updateNotificationSettings,getBasicSettings,updateBasicSettings,getSchedule1,updateSchedule1,cancelSchedule1,getParent,updateParent,deleteParent,getGrowthRecord1,updateGrowthRecord1,deleteGrowthRecord1,getClass,updateClass,deleteClass,updateClassTeacher,removeClassTeacher,getGrowthRecord2,updateGrowthRecord2,deleteGrowthRecord2,findOne,update,_delete,reorder,getTenant,updateTenant,deleteTenant,updateTenantStatus,updateTenantQuota,getAllSettings,updateSettings1,getStorageSettings,updateStorageSettings,getSecuritySettings1,updateSecuritySettings1,getNotificationSettings1,updateNotificationSettings1,getBasicSettings1,updateBasicSettings1,findLibrary,updateLibrary,deleteLibrary,findItem,updateItem,deleteItem,getCourse1,updateCourse,deleteCourse,reorderSteps,findOne1,update1,delete1,updateStep,removeStep,reorder1,findOne2,update2,delete2,setPackages,getTaskPage,createTask,getTemplates,createTemplate,createFromTemplate,getSchedules,createSchedule,markAsRead,markAllAsRead,getMyLessons,createLesson,saveStudentRecord,batchSaveStudentRecords,startLesson,getLessonFeedback,submitFeedback,completeLesson,cancelLesson,createLessonFromSchedule,startLessonFromSchedule,getGrowthRecordPage,createGrowthRecord,getTeacherPage,createTeacher,resetPassword,getTaskPage1,createTask1,getTemplates1,createTemplate1,getStudentPage,createStudent,getSchedules1,createSchedule1,checkConflict,batchCreateSchedules,createSchedulesByClasses,getParentPage,createParent,bindStudent,unbindStudent,resetPassword1,renewPackage,renewCollection,getGrowthRecordPage1,createGrowthRecord1,getClassPage,createClass,getClassTeachers1,assignTeachers,getClassStudents1,assignStudents,completeTask,markAsRead1,markAllAsRead1,createGrowthRecord2,refreshToken,uploadFile,refreshToken1,logout,login,changePassword,repairFlyway,findAll,create,getTenantPage,createTenant,resetTenantPassword,findAllLibraries,createLibrary,findAllItems,createItem,batchDeleteItems,getCoursePage1,createCourse,publishCourse,archiveCourse,fixCollectionPackages,addPackageToCollection,findAll1,create1,findSteps,createStep,page,create2,withdraw,republish,publish,grantToTenant,archive,getWeeklyStats,getTodayLessons,getDefaultTemplate,getAllStudents,getTodaySchedules,getTimetable,getRecommendedCourses,getMyNotifications,getNotification,getUnreadCount,getStudentRecords,getTodayLessons1,getLessonTrend,getFeedbacks,getFeedbackStats,getDashboard,getCoursePage,getCourse,getAllCourses,getCourseUsage,getClasses,getClassTeachers,getClassStudents,getDefaultTemplate1,getSchoolStats,getActiveTeachers,getLessonTrend1,getCourseUsageStats,getCourseDistribution,getRecentActivities,getTimetable1,getCoursePackageLessonTypes,getCalendarViewData,getTeacherReports,getStudentReports,getOverview,getCourseReports,getParentChildren,findTenantCollections,getPackagesByCollection,getPackageCourses,getPackageInfo,getPackageUsage,findTenantPackages,getLogList,getLogDetail,getLogStats,getFeedbacks1,getFeedbackStats1,exportTeacherStats,exportStudentStats,exportLessons,exportGrowthRecords,getSchoolCourses,getSchoolCourse,getMyTasks,getTask2,getTasksByStudent,getMyNotifications1,getNotification1,getUnreadCount1,getGrowthRecordsByStudent,getRecentGrowthRecords,getMyChildren,getChild,getChildGrowth,generateEditToken,generateReadOnlyToken,getOssToken,getCurrentUser,getTenantStats,getAllActiveTenants,getStats,getTrendData,getActiveTenants,getPopularCourses,getRecentActivities1,getTenantDefaults,getStats1,checkConsistency,findByType,deleteFile}}; export type GetTaskResult = NonNullable['getTask']>>> export type UpdateTaskResult = NonNullable['updateTask']>>> export type DeleteTaskResult = NonNullable['deleteTask']>>> @@ -3941,23 +3895,19 @@ export type DeleteLibraryResult = NonNullable['findItem']>>> export type UpdateItemResult = NonNullable['updateItem']>>> export type DeleteItemResult = NonNullable['deleteItem']>>> -export type FindOne1Result = NonNullable['findOne1']>>> -export type Update1Result = NonNullable['update1']>>> -export type Delete1Result = NonNullable['delete1']>>> -export type SetCoursesResult = NonNullable['setCourses']>>> export type GetCourse1Result = NonNullable['getCourse1']>>> export type UpdateCourseResult = NonNullable['updateCourse']>>> export type DeleteCourseResult = NonNullable['deleteCourse']>>> export type ReorderStepsResult = NonNullable['reorderSteps']>>> -export type FindOne2Result = NonNullable['findOne2']>>> -export type Update2Result = NonNullable['update2']>>> -export type Delete2Result = NonNullable['delete2']>>> +export type FindOne1Result = NonNullable['findOne1']>>> +export type Update1Result = NonNullable['update1']>>> +export type Delete1Result = NonNullable['delete1']>>> export type UpdateStepResult = NonNullable['updateStep']>>> export type RemoveStepResult = NonNullable['removeStep']>>> export type Reorder1Result = NonNullable['reorder1']>>> -export type FindOne3Result = NonNullable['findOne3']>>> -export type Update3Result = NonNullable['update3']>>> -export type Delete3Result = NonNullable['delete3']>>> +export type FindOne2Result = NonNullable['findOne2']>>> +export type Update2Result = NonNullable['update2']>>> +export type Delete2Result = NonNullable['delete2']>>> export type SetPackagesResult = NonNullable['setPackages']>>> export type GetTaskPageResult = NonNullable['getTaskPage']>>> export type CreateTaskResult = NonNullable['createTask']>>> @@ -4001,6 +3951,7 @@ export type BindStudentResult = NonNullable['unbindStudent']>>> export type ResetPassword1Result = NonNullable['resetPassword1']>>> export type RenewPackageResult = NonNullable['renewPackage']>>> +export type RenewCollectionResult = NonNullable['renewCollection']>>> export type GetGrowthRecordPage1Result = NonNullable['getGrowthRecordPage1']>>> export type CreateGrowthRecord1Result = NonNullable['createGrowthRecord1']>>> export type GetClassPageResult = NonNullable['getClassPage']>>> @@ -4019,6 +3970,7 @@ export type RefreshToken1Result = NonNullable['logout']>>> export type LoginResult = NonNullable['login']>>> export type ChangePasswordResult = NonNullable['changePassword']>>> +export type RepairFlywayResult = NonNullable['repairFlyway']>>> export type FindAllResult = NonNullable['findAll']>>> export type CreateResult = NonNullable['create']>>> export type GetTenantPageResult = NonNullable['getTenantPage']>>> @@ -4029,24 +3981,23 @@ export type CreateLibraryResult = NonNullable['findAllItems']>>> export type CreateItemResult = NonNullable['createItem']>>> export type BatchDeleteItemsResult = NonNullable['batchDeleteItems']>>> -export type FindAll1Result = NonNullable['findAll1']>>> -export type Create1Result = NonNullable['create1']>>> -export type SubmitResult = NonNullable['submit']>>> -export type ReviewResult = NonNullable['review']>>> -export type PublishResult = NonNullable['publish']>>> -export type OfflineResult = NonNullable['offline']>>> -export type GrantToTenantResult = NonNullable['grantToTenant']>>> export type GetCoursePage1Result = NonNullable['getCoursePage1']>>> export type CreateCourseResult = NonNullable['createCourse']>>> export type PublishCourseResult = NonNullable['publishCourse']>>> export type ArchiveCourseResult = NonNullable['archiveCourse']>>> -export type FindAll2Result = NonNullable['findAll2']>>> -export type Create2Result = NonNullable['create2']>>> +export type FixCollectionPackagesResult = NonNullable['fixCollectionPackages']>>> +export type AddPackageToCollectionResult = NonNullable['addPackageToCollection']>>> +export type FindAll1Result = NonNullable['findAll1']>>> +export type Create1Result = NonNullable['create1']>>> export type FindStepsResult = NonNullable['findSteps']>>> export type CreateStepResult = NonNullable['createStep']>>> export type PageResult = NonNullable['page']>>> -export type Create3Result = NonNullable['create3']>>> -export type Publish1Result = NonNullable['publish1']>>> +export type Create2Result = NonNullable['create2']>>> +export type WithdrawResult = NonNullable['withdraw']>>> +export type RepublishResult = NonNullable['republish']>>> +export type PublishResult = NonNullable['publish']>>> +export type GrantToTenantResult = NonNullable['grantToTenant']>>> +export type ArchiveResult = NonNullable['archive']>>> export type GetWeeklyStatsResult = NonNullable['getWeeklyStats']>>> export type GetTodayLessonsResult = NonNullable['getTodayLessons']>>> export type GetDefaultTemplateResult = NonNullable['getDefaultTemplate']>>> @@ -4126,6 +4077,6 @@ export type GetPopularCoursesResult = NonNullable['getRecentActivities1']>>> export type GetTenantDefaultsResult = NonNullable['getTenantDefaults']>>> export type GetStats1Result = NonNullable['getStats1']>>> -export type GetPublishedPackagesResult = NonNullable['getPublishedPackages']>>> +export type CheckConsistencyResult = NonNullable['checkConsistency']>>> export type FindByTypeResult = NonNullable['findByType']>>> export type DeleteFileResult = NonNullable['deleteFile']>>> diff --git a/reading-platform-frontend/src/api/generated/model/activeTenantItemResponse.ts b/reading-platform-frontend/src/api/generated/model/activeTenantItemResponse.ts new file mode 100644 index 0000000..44d197b --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/activeTenantItemResponse.ts @@ -0,0 +1,21 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +/** + * 活跃租户项响应 + */ +export interface ActiveTenantItemResponse { + /** 租户 ID */ + tenantId?: number; + /** 租户名称 */ + tenantName?: string; + /** 活跃用户数 */ + activeUsers?: number; + /** 课程使用数 */ + courseCount?: number; +} diff --git a/reading-platform-frontend/src/api/generated/model/activeTenantsQueryRequest.ts b/reading-platform-frontend/src/api/generated/model/activeTenantsQueryRequest.ts new file mode 100644 index 0000000..a2b93d3 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/activeTenantsQueryRequest.ts @@ -0,0 +1,15 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +/** + * 活跃租户查询请求 + */ +export interface ActiveTenantsQueryRequest { + /** 返回数量限制 */ + limit?: number; +} diff --git a/reading-platform-frontend/src/api/generated/model/addPackageToCollectionParams.ts b/reading-platform-frontend/src/api/generated/model/addPackageToCollectionParams.ts new file mode 100644 index 0000000..28e9576 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/addPackageToCollectionParams.ts @@ -0,0 +1,12 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +export type AddPackageToCollectionParams = { +collectionId: number; +packageId: number; +}; diff --git a/reading-platform-frontend/src/api/generated/model/basicSettingsResponse.ts b/reading-platform-frontend/src/api/generated/model/basicSettingsResponse.ts new file mode 100644 index 0000000..abd6452 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/basicSettingsResponse.ts @@ -0,0 +1,25 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +/** + * 基础设置响应 + */ +export interface BasicSettingsResponse { + /** 学校名称 */ + schoolName?: string; + /** 学校Logo */ + logoUrl?: string; + /** 联系电话 */ + contactPhone?: string; + /** 联系邮箱 */ + contactEmail?: string; + /** 学校地址 */ + address?: string; + /** 学校简介 */ + description?: string; +} diff --git a/reading-platform-frontend/src/api/generated/model/basicSettingsUpdateRequest.ts b/reading-platform-frontend/src/api/generated/model/basicSettingsUpdateRequest.ts new file mode 100644 index 0000000..505ad51 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/basicSettingsUpdateRequest.ts @@ -0,0 +1,25 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +/** + * 基础设置更新请求 + */ +export interface BasicSettingsUpdateRequest { + /** 学校名称 */ + schoolName?: string; + /** 学校Logo */ + logoUrl?: string; + /** 联系电话 */ + contactPhone?: string; + /** 联系邮箱 */ + contactEmail?: string; + /** 学校地址 */ + address?: string; + /** 学校简介 */ + description?: string; +} diff --git a/reading-platform-frontend/src/api/generated/model/calendarViewResponse.ts b/reading-platform-frontend/src/api/generated/model/calendarViewResponse.ts new file mode 100644 index 0000000..4fe66f7 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/calendarViewResponse.ts @@ -0,0 +1,20 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { CalendarViewResponseSchedules } from './calendarViewResponseSchedules'; + +/** + * 日历视图响应 + */ +export interface CalendarViewResponse { + /** 开始日期 */ + startDate?: string; + /** 结束日期 */ + endDate?: string; + /** 按日期分组的排课数据 */ + schedules?: CalendarViewResponseSchedules; +} diff --git a/reading-platform-frontend/src/api/generated/model/calendarViewResponseSchedules.ts b/reading-platform-frontend/src/api/generated/model/calendarViewResponseSchedules.ts new file mode 100644 index 0000000..bda6e64 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/calendarViewResponseSchedules.ts @@ -0,0 +1,13 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { DayScheduleItem } from './dayScheduleItem'; + +/** + * 按日期分组的排课数据 + */ +export type CalendarViewResponseSchedules = {[key: string]: DayScheduleItem[]}; diff --git a/reading-platform-frontend/src/api/generated/model/checkConflictParams.ts b/reading-platform-frontend/src/api/generated/model/checkConflictParams.ts new file mode 100644 index 0000000..0620b54 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/checkConflictParams.ts @@ -0,0 +1,14 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +export type CheckConflictParams = { +classId: number; +teacherId?: number; +scheduledDate: string; +scheduledTime: string; +}; diff --git a/reading-platform-frontend/src/api/generated/model/conflictCheckResult.ts b/reading-platform-frontend/src/api/generated/model/conflictCheckResult.ts new file mode 100644 index 0000000..735a810 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/conflictCheckResult.ts @@ -0,0 +1,18 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { ConflictInfo } from './conflictInfo'; + +/** + * 冲突检测结果 + */ +export interface ConflictCheckResult { + /** 是否有冲突 */ + hasConflict?: boolean; + /** 冲突信息列表 */ + conflicts?: ConflictInfo[]; +} diff --git a/reading-platform-frontend/src/api/generated/model/conflictInfo.ts b/reading-platform-frontend/src/api/generated/model/conflictInfo.ts new file mode 100644 index 0000000..1ca9fa0 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/conflictInfo.ts @@ -0,0 +1,25 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +/** + * 冲突信息 + */ +export interface ConflictInfo { + /** 冲突类型:CLASS-班级冲突,TEACHER-教师冲突 */ + type?: string; + /** 冲突描述 */ + message?: string; + /** 冲突的排课 ID */ + conflictScheduleId?: number; + /** 冲突的班级名称 */ + className?: string; + /** 冲突的教师名称 */ + teacherName?: string; + /** 冲突时间 */ + conflictTime?: string; +} diff --git a/reading-platform-frontend/src/api/generated/model/courseCollectionPageQueryRequest.ts b/reading-platform-frontend/src/api/generated/model/courseCollectionPageQueryRequest.ts new file mode 100644 index 0000000..a623c65 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/courseCollectionPageQueryRequest.ts @@ -0,0 +1,19 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +/** + * 课程套餐分页查询请求 + */ +export interface CourseCollectionPageQueryRequest { + /** 页码 */ + pageNum?: number; + /** 每页数量 */ + pageSize?: number; + /** 状态 */ + status?: string; +} diff --git a/reading-platform-frontend/src/api/generated/model/courseCollectionResponse.ts b/reading-platform-frontend/src/api/generated/model/courseCollectionResponse.ts new file mode 100644 index 0000000..0dee601 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/courseCollectionResponse.ts @@ -0,0 +1,54 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { CoursePackageItem } from './coursePackageItem'; + +/** + * 课程套餐响应 + */ +export interface CourseCollectionResponse { + /** ID */ + id?: number; + /** 名称 */ + name?: string; + /** 描述 */ + description?: string; + /** 价格(分) */ + price?: number; + /** 折后价格(分) */ + discountPrice?: number; + /** 折扣类型 */ + discountType?: string; + /** 年级水平(数组) */ + gradeLevels?: string[]; + /** 课程包数量 */ + packageCount?: number; + /** 状态 */ + status?: string; + /** 提交时间 */ + submittedAt?: string; + /** 提交人ID */ + submittedBy?: number; + /** 审核时间 */ + reviewedAt?: string; + /** 审核人ID */ + reviewedBy?: number; + /** 审核意见 */ + reviewComment?: string; + /** 发布时间 */ + publishedAt?: string; + /** 创建时间 */ + createdAt?: string; + /** 更新时间 */ + updatedAt?: string; + /** 开始日期(租户套餐) */ + startDate?: string; + /** 结束日期(租户套餐) */ + endDate?: string; + /** 包含的课程包列表 */ + packages?: CoursePackageItem[]; +} diff --git a/reading-platform-frontend/src/api/generated/model/coursePackage.ts b/reading-platform-frontend/src/api/generated/model/coursePackage.ts index 8252a67..753b703 100644 --- a/reading-platform-frontend/src/api/generated/model/coursePackage.ts +++ b/reading-platform-frontend/src/api/generated/model/coursePackage.ts @@ -7,7 +7,7 @@ */ /** - * 课程套餐实体 + * 课程包实体(通过7步创建流程创建) */ export interface CoursePackage { /** 主键 ID */ @@ -20,22 +20,94 @@ export interface CoursePackage { updateBy?: string; /** 更新时间 */ updatedAt?: string; - /** 套餐名称 */ + /** 租户 ID */ + tenantId?: number; + /** 课程名称 */ name?: string; - /** 套餐描述 */ + /** 课程编码 */ + code?: string; + /** 课程描述 */ description?: string; - /** 价格(分) */ - price?: number; - /** 折后价格(分) */ - discountPrice?: number; - /** 折扣类型:PERCENTAGE、FIXED */ - discountType?: string; - /** 适用年级(JSON 数组) */ - gradeLevels?: string; - /** 课程数量 */ - courseCount?: number; - /** 状态:DRAFT、PENDING、APPROVED、REJECTED、PUBLISHED、OFFLINE */ + /** 封面 URL */ + coverUrl?: string; + /** 课程类别 */ + category?: string; + /** 适用年龄范围 */ + ageRange?: string; + /** 难度等级 */ + difficultyLevel?: string; + /** 课程时长(分钟) */ + durationMinutes?: number; + /** 课程目标 */ + objectives?: string; + /** 状态 */ status?: string; + /** 是否系统课程 */ + isSystem?: number; + /** 核心内容 */ + coreContent?: string; + /** 课程介绍 - 概要 */ + introSummary?: string; + /** 课程介绍 - 亮点 */ + introHighlights?: string; + /** 课程介绍 - 目标 */ + introGoals?: string; + /** 课程介绍 - 进度安排 */ + introSchedule?: string; + /** 课程介绍 - 重点 */ + introKeyPoints?: string; + /** 课程介绍 - 方法 */ + introMethods?: string; + /** 课程介绍 - 评估 */ + introEvaluation?: string; + /** 课程介绍 - 注意事项 */ + introNotes?: string; + /** 进度计划参考数据(JSON) */ + scheduleRefData?: string; + /** 环境创设(步骤 7) */ + environmentConstruction?: string; + /** 主题 ID */ + themeId?: number; + /** 绘本名称 */ + pictureBookName?: string; + /** 封面图片路径 */ + coverImagePath?: string; + /** 电子绘本路径(JSON 数组) */ + ebookPaths?: string; + /** 音频资源路径(JSON 数组) */ + audioPaths?: string; + /** 视频资源路径(JSON 数组) */ + videoPaths?: string; + /** 其他资源(JSON 数组) */ + otherResources?: string; + /** PPT 课件路径 */ + pptPath?: string; + /** PPT 课件名称 */ + pptName?: string; + /** 海报图片路径 */ + posterPaths?: string; + /** 教学工具 */ + tools?: string; + /** 学生材料 */ + studentMaterials?: string; + /** 教案数据(JSON) */ + lessonPlanData?: string; + /** 活动数据(JSON) */ + activitiesData?: string; + /** 评估数据(JSON) */ + assessmentData?: string; + /** 年级标签(JSON 数组) */ + gradeTags?: string; + /** 领域标签(JSON 数组) */ + domainTags?: string; + /** 是否有集体课 */ + hasCollectiveLesson?: number; + /** 版本号 */ + version?: string; + /** 父版本 ID */ + parentId?: number; + /** 是否最新版本 */ + isLatest?: number; /** 提交时间 */ submittedAt?: string; /** 提交人 ID */ @@ -46,6 +118,14 @@ export interface CoursePackage { reviewedBy?: number; /** 审核意见 */ reviewComment?: string; + /** 审核检查清单 */ + reviewChecklist?: string; /** 发布时间 */ publishedAt?: string; + /** 使用次数 */ + usageCount?: number; + /** 教师数量 */ + teacherCount?: number; + /** 平均评分 */ + avgRating?: number; } diff --git a/reading-platform-frontend/src/api/generated/model/coursePackageItem.ts b/reading-platform-frontend/src/api/generated/model/coursePackageItem.ts new file mode 100644 index 0000000..c1340a3 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/coursePackageItem.ts @@ -0,0 +1,25 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +/** + * 课程包项 + */ +export interface CoursePackageItem { + /** 课程包ID */ + id?: number; + /** 课程包名称 */ + name?: string; + /** 课程包描述 */ + description?: string; + /** 适用年级 */ + gradeLevels?: string[]; + /** 课程数量 */ + courseCount?: number; + /** 排序号 */ + sortOrder?: number; +} diff --git a/reading-platform-frontend/src/api/generated/model/coursePageQueryRequest.ts b/reading-platform-frontend/src/api/generated/model/coursePageQueryRequest.ts new file mode 100644 index 0000000..c7ce177 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/coursePageQueryRequest.ts @@ -0,0 +1,25 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +/** + * 课程分页查询请求 + */ +export interface CoursePageQueryRequest { + /** 页码 */ + pageNum?: number; + /** 每页数量 */ + pageSize?: number; + /** 关键词 */ + keyword?: string; + /** 分类 */ + category?: string; + /** 状态 */ + status?: string; + /** 是否仅查询待审核 */ + reviewOnly?: boolean; +} diff --git a/reading-platform-frontend/src/api/generated/model/courseReportResponse.ts b/reading-platform-frontend/src/api/generated/model/courseReportResponse.ts new file mode 100644 index 0000000..3430ccb --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/courseReportResponse.ts @@ -0,0 +1,25 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +/** + * 课程报告响应 + */ +export interface CourseReportResponse { + /** 课程ID */ + courseId?: number; + /** 课程名称 */ + courseName?: string; + /** 授课次数 */ + lessonCount?: number; + /** 参与学生数 */ + studentCount?: number; + /** 平均评分 */ + averageRating?: number; + /** 完成率 */ + completionRate?: number; +} diff --git a/reading-platform-frontend/src/api/generated/model/createCollectionRequest.ts b/reading-platform-frontend/src/api/generated/model/createCollectionRequest.ts new file mode 100644 index 0000000..235a34a --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/createCollectionRequest.ts @@ -0,0 +1,22 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +export interface CreateCollectionRequest { + /** 名称 */ + name?: string; + /** 描述 */ + description?: string; + /** 价格(分) */ + price?: number; + /** 折扣价格(分) */ + discountPrice?: number; + /** 折扣类型 */ + discountType?: string; + /** 年级标签 */ + gradeLevels?: string[]; +} diff --git a/reading-platform-frontend/src/api/generated/model/createTaskFromTemplateRequest.ts b/reading-platform-frontend/src/api/generated/model/createTaskFromTemplateRequest.ts new file mode 100644 index 0000000..265eacc --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/createTaskFromTemplateRequest.ts @@ -0,0 +1,27 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +/** + * 从模板创建任务请求 + */ +export interface CreateTaskFromTemplateRequest { + /** 模板 ID */ + templateId?: number; + /** 任务标题 */ + title: string; + /** 任务描述 */ + description?: string; + /** 开始日期 */ + startDate?: string; + /** 截止日期 */ + endDate?: string; + /** 目标类型:class-班级,student-学生 */ + targetType?: string; + /** 目标 IDs */ + targetIds?: number[]; +} diff --git a/reading-platform-frontend/src/api/generated/model/dayScheduleItem.ts b/reading-platform-frontend/src/api/generated/model/dayScheduleItem.ts new file mode 100644 index 0000000..aa05d34 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/dayScheduleItem.ts @@ -0,0 +1,27 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +/** + * 日历项 + */ +export interface DayScheduleItem { + /** 排课 ID */ + id?: number; + /** 班级名称 */ + className?: string; + /** 课程包名称 */ + coursePackageName?: string; + /** 课程类型名称 */ + lessonTypeName?: string; + /** 教师名称 */ + teacherName?: string; + /** 时间段 */ + scheduledTime?: string; + /** 状态 */ + status?: string; +} diff --git a/reading-platform-frontend/src/api/generated/model/generateEditTokenParams.ts b/reading-platform-frontend/src/api/generated/model/generateEditTokenParams.ts new file mode 100644 index 0000000..2a829f9 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/generateEditTokenParams.ts @@ -0,0 +1,12 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +export type GenerateEditTokenParams = { +url: string; +name: string; +}; diff --git a/reading-platform-frontend/src/api/generated/model/generateReadOnlyTokenParams.ts b/reading-platform-frontend/src/api/generated/model/generateReadOnlyTokenParams.ts new file mode 100644 index 0000000..563d7e3 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/generateReadOnlyTokenParams.ts @@ -0,0 +1,12 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +export type GenerateReadOnlyTokenParams = { +url: string; +name: string; +}; diff --git a/reading-platform-frontend/src/api/generated/model/getCalendarViewDataParams.ts b/reading-platform-frontend/src/api/generated/model/getCalendarViewDataParams.ts new file mode 100644 index 0000000..cc6a15c --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/getCalendarViewDataParams.ts @@ -0,0 +1,14 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +export type GetCalendarViewDataParams = { +startDate?: string; +endDate?: string; +classId?: number; +teacherId?: number; +}; diff --git a/reading-platform-frontend/src/api/generated/model/getOssTokenParams.ts b/reading-platform-frontend/src/api/generated/model/getOssTokenParams.ts new file mode 100644 index 0000000..36890c5 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/getOssTokenParams.ts @@ -0,0 +1,12 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +export type GetOssTokenParams = { +fileName: string; +dir?: string; +}; diff --git a/reading-platform-frontend/src/api/generated/model/getSchoolCoursesParams.ts b/reading-platform-frontend/src/api/generated/model/getSchoolCoursesParams.ts new file mode 100644 index 0000000..5810a23 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/getSchoolCoursesParams.ts @@ -0,0 +1,12 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +export type GetSchoolCoursesParams = { +keyword?: string; +grade?: string; +}; diff --git a/reading-platform-frontend/src/api/generated/model/grantCollectionRequest.ts b/reading-platform-frontend/src/api/generated/model/grantCollectionRequest.ts new file mode 100644 index 0000000..c5eb5fb --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/grantCollectionRequest.ts @@ -0,0 +1,16 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +export interface GrantCollectionRequest { + /** 租户ID */ + tenantId?: number; + /** 结束日期(ISO格式,如:2024-12-31) */ + endDate?: string; + /** 支付价格(分) */ + pricePaid?: number; +} diff --git a/reading-platform-frontend/src/api/generated/model/immTokenVo.ts b/reading-platform-frontend/src/api/generated/model/immTokenVo.ts new file mode 100644 index 0000000..adf68d0 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/immTokenVo.ts @@ -0,0 +1,14 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +export interface ImmTokenVo { + webofficeURL?: string; + accessToken?: string; + refreshToken?: string; + expireTime?: number; +} diff --git a/reading-platform-frontend/src/api/generated/model/index.ts b/reading-platform-frontend/src/api/generated/model/index.ts index f287a10..e251bc5 100644 --- a/reading-platform-frontend/src/api/generated/model/index.ts +++ b/reading-platform-frontend/src/api/generated/model/index.ts @@ -9,6 +9,7 @@ export * from './activeTenantItemResponse'; export * from './activeTenantsQueryRequest'; export * from './addClassTeacherDto'; +export * from './addPackageToCollectionParams'; export * from './adminStatsControllerGetActiveTenantsParams'; export * from './adminStatsControllerGetPopularCoursesParams'; export * from './adminStatsControllerGetRecentActivitiesParams'; @@ -123,6 +124,7 @@ export * from './getRecentActivitiesParams'; export * from './getRecentGrowthRecordsParams'; export * from './getSchedules1Params'; export * from './getSchedulesParams'; +export * from './getSchoolCoursesParams'; export * from './getStudentPageParams'; export * from './getTaskPage1Params'; export * from './getTaskPageParams'; @@ -133,6 +135,7 @@ export * from './getTemplatesParams'; export * from './getTenantPageParams'; export * from './getTimetable1Params'; export * from './getTimetableParams'; +export * from './grantCollectionRequest'; export * from './grantRequest'; export * from './growthRecord'; export * from './growthRecordCreateRequest'; @@ -271,6 +274,7 @@ export * from './resultListCourse'; export * from './resultListCourseCollectionResponse'; export * from './resultListCourseLesson'; export * from './resultListCourseLessonResponse'; +export * from './resultListCoursePackage'; export * from './resultListCoursePackageResponse'; export * from './resultListCourseReportResponse'; export * from './resultListCourseResponse'; @@ -356,6 +360,7 @@ export * from './resultSchoolSettingsResponse'; export * from './resultSecuritySettingsResponse'; export * from './resultStatsResponse'; export * from './resultStatsTrendResponse'; +export * from './resultString'; export * from './resultStudent'; export * from './resultStudentRecordResponse'; export * from './resultStudentResponse'; diff --git a/reading-platform-frontend/src/api/generated/model/lessonDetailResponse.ts b/reading-platform-frontend/src/api/generated/model/lessonDetailResponse.ts new file mode 100644 index 0000000..3ff466e --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/lessonDetailResponse.ts @@ -0,0 +1,19 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { ClassResponse } from './classResponse'; +import type { CourseResponse } from './courseResponse'; +import type { LessonResponse } from './lessonResponse'; + +/** + * 授课记录详情响应 + */ +export interface LessonDetailResponse { + lesson?: LessonResponse; + course?: CourseResponse; + class?: ClassResponse; +} diff --git a/reading-platform-frontend/src/api/generated/model/lessonFeedback.ts b/reading-platform-frontend/src/api/generated/model/lessonFeedback.ts new file mode 100644 index 0000000..20fc8d2 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/lessonFeedback.ts @@ -0,0 +1,45 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +/** + * 课程反馈实体 + */ +export interface LessonFeedback { + /** 主键 ID */ + id?: number; + /** 创建人 */ + createBy?: string; + /** 创建时间 */ + createdAt?: string; + /** 更新人 */ + updateBy?: string; + /** 更新时间 */ + updatedAt?: string; + /** 课程 ID */ + lessonId?: number; + /** 教师 ID */ + teacherId?: number; + /** 反馈内容 */ + content?: string; + /** 评分 */ + rating?: number; + /** 教学设计评分 (1-5) */ + designQuality?: number; + /** 学生参与度评分 (1-5) */ + participation?: number; + /** 目标达成度评分 (1-5) */ + goalAchievement?: number; + /** 各步骤反馈 (JSON 数组) */ + stepFeedbacks?: string; + /** 优点 */ + pros?: string; + /** 建议 */ + suggestions?: string; + /** 已完成的活动 */ + activitiesDone?: string; +} diff --git a/reading-platform-frontend/src/api/generated/model/lessonFeedbackRequest.ts b/reading-platform-frontend/src/api/generated/model/lessonFeedbackRequest.ts new file mode 100644 index 0000000..fed0055 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/lessonFeedbackRequest.ts @@ -0,0 +1,47 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +/** + * 课程反馈提交请求 + */ +export interface LessonFeedbackRequest { + /** 反馈内容 */ + content?: string; + /** + * 总体评分 (1-5) + * @minimum 1 + * @maximum 5 + */ + rating?: number; + /** + * 教学设计评分 (1-5) + * @minimum 1 + * @maximum 5 + */ + designQuality?: number; + /** + * 学生参与度评分 (1-5) + * @minimum 1 + * @maximum 5 + */ + participation?: number; + /** + * 目标达成度评分 (1-5) + * @minimum 1 + * @maximum 5 + */ + goalAchievement?: number; + /** 各步骤反馈 (JSON 数组) */ + stepFeedbacks?: string; + /** 优点 */ + pros?: string; + /** 建议 */ + suggestions?: string; + /** 已完成的活动 */ + activitiesDone?: string; +} diff --git a/reading-platform-frontend/src/api/generated/model/lessonFeedbackResponse.ts b/reading-platform-frontend/src/api/generated/model/lessonFeedbackResponse.ts new file mode 100644 index 0000000..258fd28 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/lessonFeedbackResponse.ts @@ -0,0 +1,43 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +/** + * 课时反馈响应 + */ +export interface LessonFeedbackResponse { + /** ID */ + id?: number; + /** 课程 ID */ + lessonId?: number; + /** 教师 ID */ + teacherId?: number; + /** 教师姓名 */ + teacherName?: string; + /** 反馈内容 */ + content?: string; + /** 评分 */ + rating?: number; + /** 教学设计评分 (1-5) */ + designQuality?: number; + /** 学生参与度评分 (1-5) */ + participation?: number; + /** 目标达成度评分 (1-5) */ + goalAchievement?: number; + /** 各步骤反馈 (JSON 数组) */ + stepFeedbacks?: string; + /** 优点 */ + pros?: string; + /** 建议 */ + suggestions?: string; + /** 已完成的活动 */ + activitiesDone?: string; + /** 创建时间 */ + createdAt?: string; + /** 更新时间 */ + updatedAt?: string; +} diff --git a/reading-platform-frontend/src/api/generated/model/lessonProgressRequest.ts b/reading-platform-frontend/src/api/generated/model/lessonProgressRequest.ts new file mode 100644 index 0000000..8415de0 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/lessonProgressRequest.ts @@ -0,0 +1,24 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { LessonProgressRequestProgressData } from './lessonProgressRequestProgressData'; + +/** + * 课程进度保存请求 + */ +export interface LessonProgressRequest { + /** 当前课程 ID */ + currentLessonId?: number; + /** 当前步骤 ID */ + currentStepId?: number; + /** 课程 ID 列表 */ + lessonIds?: number[]; + /** 已完成课程 ID 列表 */ + completedLessonIds?: number[]; + /** 进度数据 (JSON 对象) */ + progressData?: LessonProgressRequestProgressData; +} diff --git a/reading-platform-frontend/src/api/generated/model/lessonProgressRequestProgressData.ts b/reading-platform-frontend/src/api/generated/model/lessonProgressRequestProgressData.ts new file mode 100644 index 0000000..57a7b04 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/lessonProgressRequestProgressData.ts @@ -0,0 +1,12 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +/** + * 进度数据 (JSON 对象) + */ +export type LessonProgressRequestProgressData = { [key: string]: unknown }; diff --git a/reading-platform-frontend/src/api/generated/model/lessonStepCreateRequest.ts b/reading-platform-frontend/src/api/generated/model/lessonStepCreateRequest.ts new file mode 100644 index 0000000..0f42a6b --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/lessonStepCreateRequest.ts @@ -0,0 +1,23 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +/** + * 教学环节创建请求 + */ +export interface LessonStepCreateRequest { + /** 环节名称 */ + name?: string; + /** 环节内容 */ + content?: string; + /** 时长(分钟) */ + duration?: number; + /** 教学目标 */ + objective?: string; + /** 关联资源 ID 列表 */ + resourceIds?: number[]; +} diff --git a/reading-platform-frontend/src/api/generated/model/lessonStepResponse.ts b/reading-platform-frontend/src/api/generated/model/lessonStepResponse.ts new file mode 100644 index 0000000..f118a53 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/lessonStepResponse.ts @@ -0,0 +1,33 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +/** + * 教学环节响应 + */ +export interface LessonStepResponse { + /** ID */ + id?: number; + /** 课时 ID */ + lessonId?: number; + /** 名称 */ + name?: string; + /** 内容 */ + content?: string; + /** 时长 */ + duration?: number; + /** 目标 */ + objective?: string; + /** 资源 IDs */ + resourceIds?: string; + /** 排序号 */ + sortOrder?: number; + /** 创建时间 */ + createdAt?: string; + /** 更新时间 */ + updatedAt?: string; +} diff --git a/reading-platform-frontend/src/api/generated/model/lessonTypeInfo.ts b/reading-platform-frontend/src/api/generated/model/lessonTypeInfo.ts new file mode 100644 index 0000000..79eba8a --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/lessonTypeInfo.ts @@ -0,0 +1,19 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +/** + * 课程类型信息 + */ +export interface LessonTypeInfo { + /** 课程类型代码 */ + lessonType?: string; + /** 课程类型名称 */ + lessonTypeName?: string; + /** 该类型的课程数量 */ + count?: number; +} diff --git a/reading-platform-frontend/src/api/generated/model/librarySummary.ts b/reading-platform-frontend/src/api/generated/model/librarySummary.ts new file mode 100644 index 0000000..ac99325 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/librarySummary.ts @@ -0,0 +1,16 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +/** + * 所属资源库信息 + */ +export interface LibrarySummary { + id?: number; + name?: string; + libraryType?: string; +} diff --git a/reading-platform-frontend/src/api/generated/model/notificationSettingsResponse.ts b/reading-platform-frontend/src/api/generated/model/notificationSettingsResponse.ts new file mode 100644 index 0000000..609e26a --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/notificationSettingsResponse.ts @@ -0,0 +1,23 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +/** + * 通知设置响应 + */ +export interface NotificationSettingsResponse { + /** 启用邮件通知 */ + emailEnabled?: boolean; + /** 启用短信通知 */ + smsEnabled?: boolean; + /** 启用站内通知 */ + inAppEnabled?: boolean; + /** 任务完成通知 */ + taskCompletionNotify?: boolean; + /** 课程提醒通知 */ + courseReminderNotify?: boolean; +} diff --git a/reading-platform-frontend/src/api/generated/model/notificationSettingsUpdateRequest.ts b/reading-platform-frontend/src/api/generated/model/notificationSettingsUpdateRequest.ts new file mode 100644 index 0000000..1d2be68 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/notificationSettingsUpdateRequest.ts @@ -0,0 +1,23 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +/** + * 通知设置更新请求 + */ +export interface NotificationSettingsUpdateRequest { + /** 启用邮件通知 */ + emailEnabled?: boolean; + /** 启用短信通知 */ + smsEnabled?: boolean; + /** 启用站内通知 */ + inAppEnabled?: boolean; + /** 任务完成通知 */ + taskCompletionNotify?: boolean; + /** 课程提醒通知 */ + courseReminderNotify?: boolean; +} diff --git a/reading-platform-frontend/src/api/generated/model/operationLogResponse.ts b/reading-platform-frontend/src/api/generated/model/operationLogResponse.ts new file mode 100644 index 0000000..1e008b7 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/operationLogResponse.ts @@ -0,0 +1,37 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +/** + * 操作日志响应 + */ +export interface OperationLogResponse { + /** ID */ + id?: number; + /** 租户 ID */ + tenantId?: number; + /** 用户 ID */ + userId?: number; + /** 用户角色 */ + userRole?: string; + /** 操作 */ + action?: string; + /** 模块 */ + module?: string; + /** 目标类型 */ + targetType?: string; + /** 目标 ID */ + targetId?: number; + /** 详情 */ + details?: string; + /** IP 地址 */ + ipAddress?: string; + /** 用户代理 */ + userAgent?: string; + /** 创建时间 */ + createdAt?: string; +} diff --git a/reading-platform-frontend/src/api/generated/model/ossTokenVo.ts b/reading-platform-frontend/src/api/generated/model/ossTokenVo.ts new file mode 100644 index 0000000..d0d7af3 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/ossTokenVo.ts @@ -0,0 +1,17 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +export interface OssTokenVo { + accessid?: string; + policy?: string; + signature?: string; + dir?: string; + host?: string; + key?: string; + expire?: number; +} diff --git a/reading-platform-frontend/src/api/generated/model/packageGrantRequest.ts b/reading-platform-frontend/src/api/generated/model/packageGrantRequest.ts new file mode 100644 index 0000000..fbb596d --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/packageGrantRequest.ts @@ -0,0 +1,19 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +/** + * 套餐授权请求 + */ +export interface PackageGrantRequest { + /** 租户 ID */ + tenantId?: number; + /** 结束日期 */ + endDate?: string; + /** 支付金额(分) */ + pricePaid?: number; +} diff --git a/reading-platform-frontend/src/api/generated/model/packageInfoResponse.ts b/reading-platform-frontend/src/api/generated/model/packageInfoResponse.ts new file mode 100644 index 0000000..e73f0d9 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/packageInfoResponse.ts @@ -0,0 +1,25 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +/** + * 套餐信息响应 + */ +export interface PackageInfoResponse { + /** 学校名称 */ + name?: string; + /** 学校编码 */ + code?: string; + /** 状态 */ + status?: string; + /** 到期时间 */ + expireDate?: string; + /** 最大教师数 */ + maxTeachers?: number; + /** 最大学生数 */ + maxStudents?: number; +} diff --git a/reading-platform-frontend/src/api/generated/model/packageReviewRequest.ts b/reading-platform-frontend/src/api/generated/model/packageReviewRequest.ts new file mode 100644 index 0000000..9d2aad7 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/packageReviewRequest.ts @@ -0,0 +1,19 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +/** + * 套餐审核请求 + */ +export interface PackageReviewRequest { + /** 是否通过 */ + approved?: boolean; + /** 审核意见 */ + comment?: string; + /** 是否同时发布(仅当 approved=true 时有效) */ + publish?: boolean; +} diff --git a/reading-platform-frontend/src/api/generated/model/packageUsageResponse.ts b/reading-platform-frontend/src/api/generated/model/packageUsageResponse.ts new file mode 100644 index 0000000..a4edc93 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/packageUsageResponse.ts @@ -0,0 +1,16 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { UsageInfo } from './usageInfo'; + +/** + * 套餐使用情况响应 + */ +export interface PackageUsageResponse { + teacher?: UsageInfo; + student?: UsageInfo; +} diff --git a/reading-platform-frontend/src/api/generated/model/pageParams.ts b/reading-platform-frontend/src/api/generated/model/pageParams.ts new file mode 100644 index 0000000..8bd6622 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/pageParams.ts @@ -0,0 +1,12 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { CourseCollectionPageQueryRequest } from './courseCollectionPageQueryRequest'; + +export type PageParams = { +request: CourseCollectionPageQueryRequest; +}; diff --git a/reading-platform-frontend/src/api/generated/model/pageResultCourseCollectionResponse.ts b/reading-platform-frontend/src/api/generated/model/pageResultCourseCollectionResponse.ts new file mode 100644 index 0000000..78ed4a5 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/pageResultCourseCollectionResponse.ts @@ -0,0 +1,16 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { CourseCollectionResponse } from './courseCollectionResponse'; + +export interface PageResultCourseCollectionResponse { + list?: CourseCollectionResponse[]; + total?: number; + pageNum?: number; + pageSize?: number; + pages?: number; +} diff --git a/reading-platform-frontend/src/api/generated/model/pageResultLessonFeedbackResponse.ts b/reading-platform-frontend/src/api/generated/model/pageResultLessonFeedbackResponse.ts new file mode 100644 index 0000000..dc60896 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/pageResultLessonFeedbackResponse.ts @@ -0,0 +1,16 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { LessonFeedbackResponse } from './lessonFeedbackResponse'; + +export interface PageResultLessonFeedbackResponse { + list?: LessonFeedbackResponse[]; + total?: number; + pageNum?: number; + pageSize?: number; + pages?: number; +} diff --git a/reading-platform-frontend/src/api/generated/model/pageResultOperationLogResponse.ts b/reading-platform-frontend/src/api/generated/model/pageResultOperationLogResponse.ts new file mode 100644 index 0000000..685f673 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/pageResultOperationLogResponse.ts @@ -0,0 +1,16 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { OperationLogResponse } from './operationLogResponse'; + +export interface PageResultOperationLogResponse { + list?: OperationLogResponse[]; + total?: number; + pageNum?: number; + pageSize?: number; + pages?: number; +} diff --git a/reading-platform-frontend/src/api/generated/model/pageResultResourceItemResponse.ts b/reading-platform-frontend/src/api/generated/model/pageResultResourceItemResponse.ts new file mode 100644 index 0000000..c311b61 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/pageResultResourceItemResponse.ts @@ -0,0 +1,16 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { ResourceItemResponse } from './resourceItemResponse'; + +export interface PageResultResourceItemResponse { + list?: ResourceItemResponse[]; + total?: number; + pageNum?: number; + pageSize?: number; + pages?: number; +} diff --git a/reading-platform-frontend/src/api/generated/model/pageResultResourceLibraryResponse.ts b/reading-platform-frontend/src/api/generated/model/pageResultResourceLibraryResponse.ts new file mode 100644 index 0000000..1083ff7 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/pageResultResourceLibraryResponse.ts @@ -0,0 +1,16 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { ResourceLibraryResponse } from './resourceLibraryResponse'; + +export interface PageResultResourceLibraryResponse { + list?: ResourceLibraryResponse[]; + total?: number; + pageNum?: number; + pageSize?: number; + pages?: number; +} diff --git a/reading-platform-frontend/src/api/generated/model/pageResultSchedulePlanResponse.ts b/reading-platform-frontend/src/api/generated/model/pageResultSchedulePlanResponse.ts new file mode 100644 index 0000000..3485b8b --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/pageResultSchedulePlanResponse.ts @@ -0,0 +1,16 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { SchedulePlanResponse } from './schedulePlanResponse'; + +export interface PageResultSchedulePlanResponse { + list?: SchedulePlanResponse[]; + total?: number; + pageNum?: number; + pageSize?: number; + pages?: number; +} diff --git a/reading-platform-frontend/src/api/generated/model/pageResultTaskTemplateResponse.ts b/reading-platform-frontend/src/api/generated/model/pageResultTaskTemplateResponse.ts new file mode 100644 index 0000000..f2f47c1 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/pageResultTaskTemplateResponse.ts @@ -0,0 +1,16 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { TaskTemplateResponse } from './taskTemplateResponse'; + +export interface PageResultTaskTemplateResponse { + list?: TaskTemplateResponse[]; + total?: number; + pageNum?: number; + pageSize?: number; + pages?: number; +} diff --git a/reading-platform-frontend/src/api/generated/model/popularCourseItemResponse.ts b/reading-platform-frontend/src/api/generated/model/popularCourseItemResponse.ts new file mode 100644 index 0000000..d566d33 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/popularCourseItemResponse.ts @@ -0,0 +1,21 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +/** + * 热门课程项响应 + */ +export interface PopularCourseItemResponse { + /** 课程 ID */ + courseId?: number; + /** 课程名称 */ + courseName?: string; + /** 使用次数 */ + usageCount?: number; + /** 教师数量 */ + teacherCount?: number; +} diff --git a/reading-platform-frontend/src/api/generated/model/popularCoursesQueryRequest.ts b/reading-platform-frontend/src/api/generated/model/popularCoursesQueryRequest.ts new file mode 100644 index 0000000..4444ae4 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/popularCoursesQueryRequest.ts @@ -0,0 +1,15 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +/** + * 热门课程查询请求 + */ +export interface PopularCoursesQueryRequest { + /** 返回数量限制 */ + limit?: number; +} diff --git a/reading-platform-frontend/src/api/generated/model/recentActivitiesQueryRequest.ts b/reading-platform-frontend/src/api/generated/model/recentActivitiesQueryRequest.ts new file mode 100644 index 0000000..d5f8b15 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/recentActivitiesQueryRequest.ts @@ -0,0 +1,15 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +/** + * 最近活动查询请求 + */ +export interface RecentActivitiesQueryRequest { + /** 返回数量限制 */ + limit?: number; +} diff --git a/reading-platform-frontend/src/api/generated/model/recentActivityItemResponse.ts b/reading-platform-frontend/src/api/generated/model/recentActivityItemResponse.ts new file mode 100644 index 0000000..6c28da3 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/recentActivityItemResponse.ts @@ -0,0 +1,25 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +/** + * 最近活动项响应 + */ +export interface RecentActivityItemResponse { + /** 活动 ID */ + activityId?: number; + /** 活动类型 */ + activityType?: string; + /** 活动描述 */ + description?: string; + /** 操作人 ID */ + operatorId?: number; + /** 操作人名称 */ + operatorName?: string; + /** 操作时间 */ + operationTime?: string; +} diff --git a/reading-platform-frontend/src/api/generated/model/refreshTokenRequest.ts b/reading-platform-frontend/src/api/generated/model/refreshTokenRequest.ts new file mode 100644 index 0000000..f2e7032 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/refreshTokenRequest.ts @@ -0,0 +1,12 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +export interface RefreshTokenRequest { + accessToken?: string; + refreshToken?: string; +} diff --git a/reading-platform-frontend/src/api/generated/model/reportOverviewResponse.ts b/reading-platform-frontend/src/api/generated/model/reportOverviewResponse.ts new file mode 100644 index 0000000..760eacd --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/reportOverviewResponse.ts @@ -0,0 +1,28 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { ReportOverviewResponseCourseStats } from './reportOverviewResponseCourseStats'; + +/** + * 报告概览响应 + */ +export interface ReportOverviewResponse { + /** 报告日期 */ + reportDate?: string; + /** 教师总数 */ + totalTeachers?: number; + /** 学生总数 */ + totalStudents?: number; + /** 班级总数 */ + totalClasses?: number; + /** 本月授课次数 */ + monthlyLessons?: number; + /** 本月任务完成数 */ + monthlyTasksCompleted?: number; + /** 课程使用统计 */ + courseStats?: ReportOverviewResponseCourseStats; +} diff --git a/reading-platform-frontend/src/api/generated/model/reportOverviewResponseCourseStats.ts b/reading-platform-frontend/src/api/generated/model/reportOverviewResponseCourseStats.ts new file mode 100644 index 0000000..fc738d1 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/reportOverviewResponseCourseStats.ts @@ -0,0 +1,12 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +/** + * 课程使用统计 + */ +export type ReportOverviewResponseCourseStats = {[key: string]: { [key: string]: unknown }}; diff --git a/reading-platform-frontend/src/api/generated/model/resourceItemCreateRequest.ts b/reading-platform-frontend/src/api/generated/model/resourceItemCreateRequest.ts new file mode 100644 index 0000000..53fcf2b --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/resourceItemCreateRequest.ts @@ -0,0 +1,29 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +/** + * 资源项目创建请求 + */ +export interface ResourceItemCreateRequest { + /** 资源库 ID */ + libraryId?: string; + /** 资源标题 */ + title?: string; + /** 文件类型 */ + fileType?: string; + /** 文件路径 */ + filePath?: string; + /** 文件大小(字节) */ + fileSize?: number; + /** 资源描述 */ + description?: string; + /** 标签(字符串数组) */ + tags?: string[]; + /** 租户 ID */ + tenantId?: string; +} diff --git a/reading-platform-frontend/src/api/generated/model/resourceItemResponse.ts b/reading-platform-frontend/src/api/generated/model/resourceItemResponse.ts new file mode 100644 index 0000000..1f82e5f --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/resourceItemResponse.ts @@ -0,0 +1,39 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { LibrarySummary } from './librarySummary'; + +/** + * 资源项响应 + */ +export interface ResourceItemResponse { + /** ID */ + id?: number; + /** 资源库 ID */ + libraryId?: string; + /** 租户 ID */ + tenantId?: string; + /** 资源标题 */ + title?: string; + /** 文件类型 (IMAGE/PDF/VIDEO/AUDIO/PPT/OTHER) */ + fileType?: string; + /** 文件路径 */ + filePath?: string; + /** 文件大小(字节) */ + fileSize?: number; + /** 资源标签 */ + tags?: string[]; + library?: LibrarySummary; + /** 资源描述 */ + description?: string; + /** 状态 */ + status?: string; + /** 创建时间 */ + createdAt?: string; + /** 更新时间 */ + updatedAt?: string; +} diff --git a/reading-platform-frontend/src/api/generated/model/resourceItemUpdateRequest.ts b/reading-platform-frontend/src/api/generated/model/resourceItemUpdateRequest.ts new file mode 100644 index 0000000..563d100 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/resourceItemUpdateRequest.ts @@ -0,0 +1,19 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +/** + * 资源项目更新请求 + */ +export interface ResourceItemUpdateRequest { + /** 资源标题 */ + title?: string; + /** 资源描述 */ + description?: string; + /** 标签(字符串数组) */ + tags?: string[]; +} diff --git a/reading-platform-frontend/src/api/generated/model/resourceLibraryCreateRequest.ts b/reading-platform-frontend/src/api/generated/model/resourceLibraryCreateRequest.ts new file mode 100644 index 0000000..fc8dbaa --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/resourceLibraryCreateRequest.ts @@ -0,0 +1,21 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +/** + * 资源库创建请求 + */ +export interface ResourceLibraryCreateRequest { + /** 资源库名称 */ + name?: string; + /** 资源库类型 */ + type?: string; + /** 资源库描述 */ + description?: string; + /** 租户 ID */ + tenantId?: string; +} diff --git a/reading-platform-frontend/src/api/generated/model/resourceLibraryResponse.ts b/reading-platform-frontend/src/api/generated/model/resourceLibraryResponse.ts new file mode 100644 index 0000000..e5859ed --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/resourceLibraryResponse.ts @@ -0,0 +1,31 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +/** + * 资源库响应 + */ +export interface ResourceLibraryResponse { + /** ID */ + id?: number; + /** 租户 ID */ + tenantId?: string; + /** 资源库名称 */ + name?: string; + /** 资源库描述 */ + description?: string; + /** 创建人 */ + createdBy?: string; + /** 更新人 */ + updatedBy?: string; + /** 创建时间 */ + createdAt?: string; + /** 更新时间 */ + updatedAt?: string; + /** 资源库类型 */ + libraryType?: string; +} diff --git a/reading-platform-frontend/src/api/generated/model/resourceLibraryUpdateRequest.ts b/reading-platform-frontend/src/api/generated/model/resourceLibraryUpdateRequest.ts new file mode 100644 index 0000000..092c519 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/resourceLibraryUpdateRequest.ts @@ -0,0 +1,17 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +/** + * 资源库更新请求 + */ +export interface ResourceLibraryUpdateRequest { + /** 资源库名称 */ + name?: string; + /** 资源库描述 */ + description?: string; +} diff --git a/reading-platform-frontend/src/api/generated/model/resultBasicSettingsResponse.ts b/reading-platform-frontend/src/api/generated/model/resultBasicSettingsResponse.ts new file mode 100644 index 0000000..0387baf --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/resultBasicSettingsResponse.ts @@ -0,0 +1,14 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { BasicSettingsResponse } from './basicSettingsResponse'; + +export interface ResultBasicSettingsResponse { + code?: number; + message?: string; + data?: BasicSettingsResponse; +} diff --git a/reading-platform-frontend/src/api/generated/model/resultCalendarViewResponse.ts b/reading-platform-frontend/src/api/generated/model/resultCalendarViewResponse.ts new file mode 100644 index 0000000..03a5f9e --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/resultCalendarViewResponse.ts @@ -0,0 +1,14 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { CalendarViewResponse } from './calendarViewResponse'; + +export interface ResultCalendarViewResponse { + code?: number; + message?: string; + data?: CalendarViewResponse; +} diff --git a/reading-platform-frontend/src/api/generated/model/resultConflictCheckResult.ts b/reading-platform-frontend/src/api/generated/model/resultConflictCheckResult.ts new file mode 100644 index 0000000..aaf099f --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/resultConflictCheckResult.ts @@ -0,0 +1,14 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { ConflictCheckResult } from './conflictCheckResult'; + +export interface ResultConflictCheckResult { + code?: number; + message?: string; + data?: ConflictCheckResult; +} diff --git a/reading-platform-frontend/src/api/generated/model/resultCourseCollectionResponse.ts b/reading-platform-frontend/src/api/generated/model/resultCourseCollectionResponse.ts new file mode 100644 index 0000000..779b610 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/resultCourseCollectionResponse.ts @@ -0,0 +1,14 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { CourseCollectionResponse } from './courseCollectionResponse'; + +export interface ResultCourseCollectionResponse { + code?: number; + message?: string; + data?: CourseCollectionResponse; +} diff --git a/reading-platform-frontend/src/api/generated/model/resultCourseLessonResponse.ts b/reading-platform-frontend/src/api/generated/model/resultCourseLessonResponse.ts new file mode 100644 index 0000000..b14500d --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/resultCourseLessonResponse.ts @@ -0,0 +1,14 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { CourseLessonResponse } from './courseLessonResponse'; + +export interface ResultCourseLessonResponse { + code?: number; + message?: string; + data?: CourseLessonResponse; +} diff --git a/reading-platform-frontend/src/api/generated/model/resultImmTokenVo.ts b/reading-platform-frontend/src/api/generated/model/resultImmTokenVo.ts new file mode 100644 index 0000000..fbedb67 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/resultImmTokenVo.ts @@ -0,0 +1,14 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { ImmTokenVo } from './immTokenVo'; + +export interface ResultImmTokenVo { + code?: number; + message?: string; + data?: ImmTokenVo; +} diff --git a/reading-platform-frontend/src/api/generated/model/resultLessonDetailResponse.ts b/reading-platform-frontend/src/api/generated/model/resultLessonDetailResponse.ts new file mode 100644 index 0000000..59e5df4 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/resultLessonDetailResponse.ts @@ -0,0 +1,14 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { LessonDetailResponse } from './lessonDetailResponse'; + +export interface ResultLessonDetailResponse { + code?: number; + message?: string; + data?: LessonDetailResponse; +} diff --git a/reading-platform-frontend/src/api/generated/model/resultLessonFeedback.ts b/reading-platform-frontend/src/api/generated/model/resultLessonFeedback.ts new file mode 100644 index 0000000..687cc33 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/resultLessonFeedback.ts @@ -0,0 +1,14 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { LessonFeedback } from './lessonFeedback'; + +export interface ResultLessonFeedback { + code?: number; + message?: string; + data?: LessonFeedback; +} diff --git a/reading-platform-frontend/src/api/generated/model/resultLessonStepResponse.ts b/reading-platform-frontend/src/api/generated/model/resultLessonStepResponse.ts new file mode 100644 index 0000000..1d67d01 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/resultLessonStepResponse.ts @@ -0,0 +1,14 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { LessonStepResponse } from './lessonStepResponse'; + +export interface ResultLessonStepResponse { + code?: number; + message?: string; + data?: LessonStepResponse; +} diff --git a/reading-platform-frontend/src/api/generated/model/resultListActiveTenantItemResponse.ts b/reading-platform-frontend/src/api/generated/model/resultListActiveTenantItemResponse.ts new file mode 100644 index 0000000..c524f4c --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/resultListActiveTenantItemResponse.ts @@ -0,0 +1,14 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { ActiveTenantItemResponse } from './activeTenantItemResponse'; + +export interface ResultListActiveTenantItemResponse { + code?: number; + message?: string; + data?: ActiveTenantItemResponse[]; +} diff --git a/reading-platform-frontend/src/api/generated/model/resultListCourseCollectionResponse.ts b/reading-platform-frontend/src/api/generated/model/resultListCourseCollectionResponse.ts new file mode 100644 index 0000000..f50f5eb --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/resultListCourseCollectionResponse.ts @@ -0,0 +1,14 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { CourseCollectionResponse } from './courseCollectionResponse'; + +export interface ResultListCourseCollectionResponse { + code?: number; + message?: string; + data?: CourseCollectionResponse[]; +} diff --git a/reading-platform-frontend/src/api/generated/model/resultListCourseLessonResponse.ts b/reading-platform-frontend/src/api/generated/model/resultListCourseLessonResponse.ts new file mode 100644 index 0000000..450ec77 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/resultListCourseLessonResponse.ts @@ -0,0 +1,14 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { CourseLessonResponse } from './courseLessonResponse'; + +export interface ResultListCourseLessonResponse { + code?: number; + message?: string; + data?: CourseLessonResponse[]; +} diff --git a/reading-platform-frontend/src/api/generated/model/resultListCoursePackage.ts b/reading-platform-frontend/src/api/generated/model/resultListCoursePackage.ts new file mode 100644 index 0000000..19d0fa8 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/resultListCoursePackage.ts @@ -0,0 +1,14 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { CoursePackage } from './coursePackage'; + +export interface ResultListCoursePackage { + code?: number; + message?: string; + data?: CoursePackage[]; +} diff --git a/reading-platform-frontend/src/api/generated/model/resultListCourseReportResponse.ts b/reading-platform-frontend/src/api/generated/model/resultListCourseReportResponse.ts new file mode 100644 index 0000000..9ffd2ca --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/resultListCourseReportResponse.ts @@ -0,0 +1,14 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { CourseReportResponse } from './courseReportResponse'; + +export interface ResultListCourseReportResponse { + code?: number; + message?: string; + data?: CourseReportResponse[]; +} diff --git a/reading-platform-frontend/src/api/generated/model/resultListLessonStepResponse.ts b/reading-platform-frontend/src/api/generated/model/resultListLessonStepResponse.ts new file mode 100644 index 0000000..9579466 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/resultListLessonStepResponse.ts @@ -0,0 +1,14 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { LessonStepResponse } from './lessonStepResponse'; + +export interface ResultListLessonStepResponse { + code?: number; + message?: string; + data?: LessonStepResponse[]; +} diff --git a/reading-platform-frontend/src/api/generated/model/resultListLessonTypeInfo.ts b/reading-platform-frontend/src/api/generated/model/resultListLessonTypeInfo.ts new file mode 100644 index 0000000..96d6260 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/resultListLessonTypeInfo.ts @@ -0,0 +1,14 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { LessonTypeInfo } from './lessonTypeInfo'; + +export interface ResultListLessonTypeInfo { + code?: number; + message?: string; + data?: LessonTypeInfo[]; +} diff --git a/reading-platform-frontend/src/api/generated/model/resultListPopularCourseItemResponse.ts b/reading-platform-frontend/src/api/generated/model/resultListPopularCourseItemResponse.ts new file mode 100644 index 0000000..ee12ff8 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/resultListPopularCourseItemResponse.ts @@ -0,0 +1,14 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { PopularCourseItemResponse } from './popularCourseItemResponse'; + +export interface ResultListPopularCourseItemResponse { + code?: number; + message?: string; + data?: PopularCourseItemResponse[]; +} diff --git a/reading-platform-frontend/src/api/generated/model/resultListRecentActivityItemResponse.ts b/reading-platform-frontend/src/api/generated/model/resultListRecentActivityItemResponse.ts new file mode 100644 index 0000000..42136e7 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/resultListRecentActivityItemResponse.ts @@ -0,0 +1,14 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { RecentActivityItemResponse } from './recentActivityItemResponse'; + +export interface ResultListRecentActivityItemResponse { + code?: number; + message?: string; + data?: RecentActivityItemResponse[]; +} diff --git a/reading-platform-frontend/src/api/generated/model/resultListSchedulePlanResponse.ts b/reading-platform-frontend/src/api/generated/model/resultListSchedulePlanResponse.ts new file mode 100644 index 0000000..88ee055 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/resultListSchedulePlanResponse.ts @@ -0,0 +1,14 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { SchedulePlanResponse } from './schedulePlanResponse'; + +export interface ResultListSchedulePlanResponse { + code?: number; + message?: string; + data?: SchedulePlanResponse[]; +} diff --git a/reading-platform-frontend/src/api/generated/model/resultListStudentRecordResponse.ts b/reading-platform-frontend/src/api/generated/model/resultListStudentRecordResponse.ts new file mode 100644 index 0000000..f3c1e179 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/resultListStudentRecordResponse.ts @@ -0,0 +1,14 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { StudentRecordResponse } from './studentRecordResponse'; + +export interface ResultListStudentRecordResponse { + code?: number; + message?: string; + data?: StudentRecordResponse[]; +} diff --git a/reading-platform-frontend/src/api/generated/model/resultListStudentReportResponse.ts b/reading-platform-frontend/src/api/generated/model/resultListStudentReportResponse.ts new file mode 100644 index 0000000..f2e6e50 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/resultListStudentReportResponse.ts @@ -0,0 +1,14 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { StudentReportResponse } from './studentReportResponse'; + +export interface ResultListStudentReportResponse { + code?: number; + message?: string; + data?: StudentReportResponse[]; +} diff --git a/reading-platform-frontend/src/api/generated/model/resultListTeacherReportResponse.ts b/reading-platform-frontend/src/api/generated/model/resultListTeacherReportResponse.ts new file mode 100644 index 0000000..ce10dc9 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/resultListTeacherReportResponse.ts @@ -0,0 +1,14 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { TeacherReportResponse } from './teacherReportResponse'; + +export interface ResultListTeacherReportResponse { + code?: number; + message?: string; + data?: TeacherReportResponse[]; +} diff --git a/reading-platform-frontend/src/api/generated/model/resultListTeacherResponse.ts b/reading-platform-frontend/src/api/generated/model/resultListTeacherResponse.ts new file mode 100644 index 0000000..fd29dac --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/resultListTeacherResponse.ts @@ -0,0 +1,14 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { TeacherResponse } from './teacherResponse'; + +export interface ResultListTeacherResponse { + code?: number; + message?: string; + data?: TeacherResponse[]; +} diff --git a/reading-platform-frontend/src/api/generated/model/resultListThemeResponse.ts b/reading-platform-frontend/src/api/generated/model/resultListThemeResponse.ts new file mode 100644 index 0000000..168908e --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/resultListThemeResponse.ts @@ -0,0 +1,14 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { ThemeResponse } from './themeResponse'; + +export interface ResultListThemeResponse { + code?: number; + message?: string; + data?: ThemeResponse[]; +} diff --git a/reading-platform-frontend/src/api/generated/model/resultListTimetableResponse.ts b/reading-platform-frontend/src/api/generated/model/resultListTimetableResponse.ts new file mode 100644 index 0000000..1c32843 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/resultListTimetableResponse.ts @@ -0,0 +1,14 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { TimetableResponse } from './timetableResponse'; + +export interface ResultListTimetableResponse { + code?: number; + message?: string; + data?: TimetableResponse[]; +} diff --git a/reading-platform-frontend/src/api/generated/model/resultNotificationSettingsResponse.ts b/reading-platform-frontend/src/api/generated/model/resultNotificationSettingsResponse.ts new file mode 100644 index 0000000..c161c24 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/resultNotificationSettingsResponse.ts @@ -0,0 +1,14 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { NotificationSettingsResponse } from './notificationSettingsResponse'; + +export interface ResultNotificationSettingsResponse { + code?: number; + message?: string; + data?: NotificationSettingsResponse; +} diff --git a/reading-platform-frontend/src/api/generated/model/resultOperationLogResponse.ts b/reading-platform-frontend/src/api/generated/model/resultOperationLogResponse.ts new file mode 100644 index 0000000..bc81edf --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/resultOperationLogResponse.ts @@ -0,0 +1,14 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { OperationLogResponse } from './operationLogResponse'; + +export interface ResultOperationLogResponse { + code?: number; + message?: string; + data?: OperationLogResponse; +} diff --git a/reading-platform-frontend/src/api/generated/model/resultOssTokenVo.ts b/reading-platform-frontend/src/api/generated/model/resultOssTokenVo.ts new file mode 100644 index 0000000..b81c0c7 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/resultOssTokenVo.ts @@ -0,0 +1,14 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { OssTokenVo } from './ossTokenVo'; + +export interface ResultOssTokenVo { + code?: number; + message?: string; + data?: OssTokenVo; +} diff --git a/reading-platform-frontend/src/api/generated/model/resultPackageInfoResponse.ts b/reading-platform-frontend/src/api/generated/model/resultPackageInfoResponse.ts new file mode 100644 index 0000000..9e078dc --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/resultPackageInfoResponse.ts @@ -0,0 +1,14 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { PackageInfoResponse } from './packageInfoResponse'; + +export interface ResultPackageInfoResponse { + code?: number; + message?: string; + data?: PackageInfoResponse; +} diff --git a/reading-platform-frontend/src/api/generated/model/resultPackageUsageResponse.ts b/reading-platform-frontend/src/api/generated/model/resultPackageUsageResponse.ts new file mode 100644 index 0000000..ec5afb0 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/resultPackageUsageResponse.ts @@ -0,0 +1,14 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { PackageUsageResponse } from './packageUsageResponse'; + +export interface ResultPackageUsageResponse { + code?: number; + message?: string; + data?: PackageUsageResponse; +} diff --git a/reading-platform-frontend/src/api/generated/model/resultPageResultCourseCollectionResponse.ts b/reading-platform-frontend/src/api/generated/model/resultPageResultCourseCollectionResponse.ts new file mode 100644 index 0000000..1d8ee07 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/resultPageResultCourseCollectionResponse.ts @@ -0,0 +1,14 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { PageResultCourseCollectionResponse } from './pageResultCourseCollectionResponse'; + +export interface ResultPageResultCourseCollectionResponse { + code?: number; + message?: string; + data?: PageResultCourseCollectionResponse; +} diff --git a/reading-platform-frontend/src/api/generated/model/resultPageResultLessonFeedbackResponse.ts b/reading-platform-frontend/src/api/generated/model/resultPageResultLessonFeedbackResponse.ts new file mode 100644 index 0000000..f9e036b --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/resultPageResultLessonFeedbackResponse.ts @@ -0,0 +1,14 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { PageResultLessonFeedbackResponse } from './pageResultLessonFeedbackResponse'; + +export interface ResultPageResultLessonFeedbackResponse { + code?: number; + message?: string; + data?: PageResultLessonFeedbackResponse; +} diff --git a/reading-platform-frontend/src/api/generated/model/resultPageResultOperationLogResponse.ts b/reading-platform-frontend/src/api/generated/model/resultPageResultOperationLogResponse.ts new file mode 100644 index 0000000..9b9a221 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/resultPageResultOperationLogResponse.ts @@ -0,0 +1,14 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { PageResultOperationLogResponse } from './pageResultOperationLogResponse'; + +export interface ResultPageResultOperationLogResponse { + code?: number; + message?: string; + data?: PageResultOperationLogResponse; +} diff --git a/reading-platform-frontend/src/api/generated/model/resultPageResultResourceItemResponse.ts b/reading-platform-frontend/src/api/generated/model/resultPageResultResourceItemResponse.ts new file mode 100644 index 0000000..c7fd13e --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/resultPageResultResourceItemResponse.ts @@ -0,0 +1,14 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { PageResultResourceItemResponse } from './pageResultResourceItemResponse'; + +export interface ResultPageResultResourceItemResponse { + code?: number; + message?: string; + data?: PageResultResourceItemResponse; +} diff --git a/reading-platform-frontend/src/api/generated/model/resultPageResultResourceLibraryResponse.ts b/reading-platform-frontend/src/api/generated/model/resultPageResultResourceLibraryResponse.ts new file mode 100644 index 0000000..07a47db --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/resultPageResultResourceLibraryResponse.ts @@ -0,0 +1,14 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { PageResultResourceLibraryResponse } from './pageResultResourceLibraryResponse'; + +export interface ResultPageResultResourceLibraryResponse { + code?: number; + message?: string; + data?: PageResultResourceLibraryResponse; +} diff --git a/reading-platform-frontend/src/api/generated/model/resultPageResultSchedulePlanResponse.ts b/reading-platform-frontend/src/api/generated/model/resultPageResultSchedulePlanResponse.ts new file mode 100644 index 0000000..796b402 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/resultPageResultSchedulePlanResponse.ts @@ -0,0 +1,14 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { PageResultSchedulePlanResponse } from './pageResultSchedulePlanResponse'; + +export interface ResultPageResultSchedulePlanResponse { + code?: number; + message?: string; + data?: PageResultSchedulePlanResponse; +} diff --git a/reading-platform-frontend/src/api/generated/model/resultPageResultTaskTemplateResponse.ts b/reading-platform-frontend/src/api/generated/model/resultPageResultTaskTemplateResponse.ts new file mode 100644 index 0000000..81a56e8 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/resultPageResultTaskTemplateResponse.ts @@ -0,0 +1,14 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { PageResultTaskTemplateResponse } from './pageResultTaskTemplateResponse'; + +export interface ResultPageResultTaskTemplateResponse { + code?: number; + message?: string; + data?: PageResultTaskTemplateResponse; +} diff --git a/reading-platform-frontend/src/api/generated/model/resultReportOverviewResponse.ts b/reading-platform-frontend/src/api/generated/model/resultReportOverviewResponse.ts new file mode 100644 index 0000000..b33b843 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/resultReportOverviewResponse.ts @@ -0,0 +1,14 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { ReportOverviewResponse } from './reportOverviewResponse'; + +export interface ResultReportOverviewResponse { + code?: number; + message?: string; + data?: ReportOverviewResponse; +} diff --git a/reading-platform-frontend/src/api/generated/model/resultResourceItemResponse.ts b/reading-platform-frontend/src/api/generated/model/resultResourceItemResponse.ts new file mode 100644 index 0000000..fc8f45a --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/resultResourceItemResponse.ts @@ -0,0 +1,14 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { ResourceItemResponse } from './resourceItemResponse'; + +export interface ResultResourceItemResponse { + code?: number; + message?: string; + data?: ResourceItemResponse; +} diff --git a/reading-platform-frontend/src/api/generated/model/resultResourceLibraryResponse.ts b/reading-platform-frontend/src/api/generated/model/resultResourceLibraryResponse.ts new file mode 100644 index 0000000..9ecd3e3 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/resultResourceLibraryResponse.ts @@ -0,0 +1,14 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { ResourceLibraryResponse } from './resourceLibraryResponse'; + +export interface ResultResourceLibraryResponse { + code?: number; + message?: string; + data?: ResourceLibraryResponse; +} diff --git a/reading-platform-frontend/src/api/generated/model/resultSchedulePlanResponse.ts b/reading-platform-frontend/src/api/generated/model/resultSchedulePlanResponse.ts new file mode 100644 index 0000000..ef22396 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/resultSchedulePlanResponse.ts @@ -0,0 +1,14 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { SchedulePlanResponse } from './schedulePlanResponse'; + +export interface ResultSchedulePlanResponse { + code?: number; + message?: string; + data?: SchedulePlanResponse; +} diff --git a/reading-platform-frontend/src/api/generated/model/resultSchoolSettingsResponse.ts b/reading-platform-frontend/src/api/generated/model/resultSchoolSettingsResponse.ts new file mode 100644 index 0000000..4106fdc --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/resultSchoolSettingsResponse.ts @@ -0,0 +1,14 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { SchoolSettingsResponse } from './schoolSettingsResponse'; + +export interface ResultSchoolSettingsResponse { + code?: number; + message?: string; + data?: SchoolSettingsResponse; +} diff --git a/reading-platform-frontend/src/api/generated/model/resultSecuritySettingsResponse.ts b/reading-platform-frontend/src/api/generated/model/resultSecuritySettingsResponse.ts new file mode 100644 index 0000000..ee1a286 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/resultSecuritySettingsResponse.ts @@ -0,0 +1,14 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { SecuritySettingsResponse } from './securitySettingsResponse'; + +export interface ResultSecuritySettingsResponse { + code?: number; + message?: string; + data?: SecuritySettingsResponse; +} diff --git a/reading-platform-frontend/src/api/generated/model/resultStatsResponse.ts b/reading-platform-frontend/src/api/generated/model/resultStatsResponse.ts new file mode 100644 index 0000000..a740cab --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/resultStatsResponse.ts @@ -0,0 +1,14 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { StatsResponse } from './statsResponse'; + +export interface ResultStatsResponse { + code?: number; + message?: string; + data?: StatsResponse; +} diff --git a/reading-platform-frontend/src/api/generated/model/resultStatsTrendResponse.ts b/reading-platform-frontend/src/api/generated/model/resultStatsTrendResponse.ts new file mode 100644 index 0000000..2f87883 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/resultStatsTrendResponse.ts @@ -0,0 +1,14 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { StatsTrendResponse } from './statsTrendResponse'; + +export interface ResultStatsTrendResponse { + code?: number; + message?: string; + data?: StatsTrendResponse; +} diff --git a/reading-platform-frontend/src/api/generated/model/resultString.ts b/reading-platform-frontend/src/api/generated/model/resultString.ts new file mode 100644 index 0000000..16eb104 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/resultString.ts @@ -0,0 +1,13 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +export interface ResultString { + code?: number; + message?: string; + data?: string; +} diff --git a/reading-platform-frontend/src/api/generated/model/resultStudentRecordResponse.ts b/reading-platform-frontend/src/api/generated/model/resultStudentRecordResponse.ts new file mode 100644 index 0000000..614a3aa --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/resultStudentRecordResponse.ts @@ -0,0 +1,14 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { StudentRecordResponse } from './studentRecordResponse'; + +export interface ResultStudentRecordResponse { + code?: number; + message?: string; + data?: StudentRecordResponse; +} diff --git a/reading-platform-frontend/src/api/generated/model/resultTaskTemplateResponse.ts b/reading-platform-frontend/src/api/generated/model/resultTaskTemplateResponse.ts new file mode 100644 index 0000000..84a0d53 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/resultTaskTemplateResponse.ts @@ -0,0 +1,14 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { TaskTemplateResponse } from './taskTemplateResponse'; + +export interface ResultTaskTemplateResponse { + code?: number; + message?: string; + data?: TaskTemplateResponse; +} diff --git a/reading-platform-frontend/src/api/generated/model/resultThemeResponse.ts b/reading-platform-frontend/src/api/generated/model/resultThemeResponse.ts new file mode 100644 index 0000000..e931eed --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/resultThemeResponse.ts @@ -0,0 +1,14 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { ThemeResponse } from './themeResponse'; + +export interface ResultThemeResponse { + code?: number; + message?: string; + data?: ThemeResponse; +} diff --git a/reading-platform-frontend/src/api/generated/model/resultTimetableResponse.ts b/reading-platform-frontend/src/api/generated/model/resultTimetableResponse.ts new file mode 100644 index 0000000..8a63425 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/resultTimetableResponse.ts @@ -0,0 +1,14 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { TimetableResponse } from './timetableResponse'; + +export interface ResultTimetableResponse { + code?: number; + message?: string; + data?: TimetableResponse; +} diff --git a/reading-platform-frontend/src/api/generated/model/scheduleCreateByClassesRequest.ts b/reading-platform-frontend/src/api/generated/model/scheduleCreateByClassesRequest.ts new file mode 100644 index 0000000..6f425c2 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/scheduleCreateByClassesRequest.ts @@ -0,0 +1,33 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +/** + * 按班级批量创建排课请求 + */ +export interface ScheduleCreateByClassesRequest { + /** 班级 ID 列表 */ + classIds?: number[]; + /** 课程 ID */ + courseId?: number; + /** 课程包 ID */ + coursePackageId?: number; + /** 课程类型 */ + lessonType?: string; + /** 教师 ID */ + teacherId?: number; + /** 排课日期 */ + scheduledDate?: string; + /** 时间段,如 '09:00-10:00' */ + scheduledTime?: string; + /** 重复类型:NONE-单次,WEEKLY-每周,BIWEEKLY-双周,DAILY-每日 */ + repeatType?: string; + /** 重复截止日期 */ + repeatEndDate?: string; + /** 备注 */ + note?: string; +} diff --git a/reading-platform-frontend/src/api/generated/model/schedulePlanCreateRequest.ts b/reading-platform-frontend/src/api/generated/model/schedulePlanCreateRequest.ts new file mode 100644 index 0000000..78a365b --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/schedulePlanCreateRequest.ts @@ -0,0 +1,39 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +/** + * 日程计划创建请求 + */ +export interface SchedulePlanCreateRequest { + /** 计划名称 */ + name: string; + /** 班级 ID */ + classId: number; + /** 课程 ID */ + courseId?: number; + /** 课程包 ID */ + coursePackageId?: number; + /** 课程类型 (INTRODUCTION/COLLECTIVE/LANGUAGE/SOCIETY/SCIENCE/ART/HEALTH) */ + lessonType?: string; + /** 教师 ID */ + teacherId?: number; + /** 排课日期 */ + scheduledDate?: string; + /** 时间段 (如:09:00-10:00) */ + scheduledTime?: string; + /** 星期几 (1-7) */ + weekDay?: number; + /** 重复方式 (NONE/WEEKLY) */ + repeatType?: string; + /** 重复截止日期 */ + repeatEndDate?: string; + /** 来源 (SCHOOL/TEACHER) */ + source?: string; + /** 备注 */ + note?: string; +} diff --git a/reading-platform-frontend/src/api/generated/model/schedulePlanResponse.ts b/reading-platform-frontend/src/api/generated/model/schedulePlanResponse.ts new file mode 100644 index 0000000..e82e5b3 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/schedulePlanResponse.ts @@ -0,0 +1,59 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +/** + * 日程计划响应 + */ +export interface SchedulePlanResponse { + /** ID */ + id?: number; + /** 租户 ID */ + tenantId?: number; + /** 计划名称 */ + name?: string; + /** 班级 ID */ + classId?: number; + /** 班级名称 */ + className?: string; + /** 课程 ID */ + courseId?: number; + /** 课程名称 */ + courseName?: string; + /** 课程包 ID */ + coursePackageId?: number; + /** 课程包名称 */ + coursePackageName?: string; + /** 课程类型 */ + lessonType?: string; + /** 课程类型名称 */ + lessonTypeName?: string; + /** 教师 ID */ + teacherId?: number; + /** 教师姓名 */ + teacherName?: string; + /** 排课日期 */ + scheduledDate?: string; + /** 时间段 (如:09:00-10:00) */ + scheduledTime?: string; + /** 星期几 (1-7) */ + weekDay?: number; + /** 重复方式 (NONE/WEEKLY) */ + repeatType?: string; + /** 重复截止日期 */ + repeatEndDate?: string; + /** 来源 (SCHOOL/TEACHER) */ + source?: string; + /** 备注 */ + note?: string; + /** 状态 */ + status?: string; + /** 创建时间 */ + createdAt?: string; + /** 更新时间 */ + updatedAt?: string; +} diff --git a/reading-platform-frontend/src/api/generated/model/schedulePlanUpdateRequest.ts b/reading-platform-frontend/src/api/generated/model/schedulePlanUpdateRequest.ts new file mode 100644 index 0000000..4360a59 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/schedulePlanUpdateRequest.ts @@ -0,0 +1,37 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +/** + * 日程计划更新请求 + */ +export interface SchedulePlanUpdateRequest { + /** 计划名称 */ + name?: string; + /** 课程 ID */ + courseId?: number; + /** 课程包 ID */ + coursePackageId?: number; + /** 课程类型 (INTRODUCTION/COLLECTIVE/LANGUAGE/SOCIETY/SCIENCE/ART/HEALTH) */ + lessonType?: string; + /** 教师 ID */ + teacherId?: number; + /** 排课日期 */ + scheduledDate?: string; + /** 时间段 (如:09:00-10:00) */ + scheduledTime?: string; + /** 星期几 (1-7) */ + weekDay?: number; + /** 重复方式 (NONE/WEEKLY) */ + repeatType?: string; + /** 重复截止日期 */ + repeatEndDate?: string; + /** 备注 */ + note?: string; + /** 状态 */ + status?: string; +} diff --git a/reading-platform-frontend/src/api/generated/model/schoolSettingsResponse.ts b/reading-platform-frontend/src/api/generated/model/schoolSettingsResponse.ts new file mode 100644 index 0000000..62ba466 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/schoolSettingsResponse.ts @@ -0,0 +1,19 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { BasicSettingsResponse } from './basicSettingsResponse'; +import type { NotificationSettingsResponse } from './notificationSettingsResponse'; +import type { SecuritySettingsResponse } from './securitySettingsResponse'; + +/** + * 学校系统设置响应 + */ +export interface SchoolSettingsResponse { + basic?: BasicSettingsResponse; + notification?: NotificationSettingsResponse; + security?: SecuritySettingsResponse; +} diff --git a/reading-platform-frontend/src/api/generated/model/schoolSettingsUpdateRequest.ts b/reading-platform-frontend/src/api/generated/model/schoolSettingsUpdateRequest.ts new file mode 100644 index 0000000..b53f30b --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/schoolSettingsUpdateRequest.ts @@ -0,0 +1,19 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { BasicSettingsUpdateRequest } from './basicSettingsUpdateRequest'; +import type { NotificationSettingsUpdateRequest } from './notificationSettingsUpdateRequest'; +import type { SecuritySettingsUpdateRequest } from './securitySettingsUpdateRequest'; + +/** + * 系统设置更新请求 + */ +export interface SchoolSettingsUpdateRequest { + basic?: BasicSettingsUpdateRequest; + notification?: NotificationSettingsUpdateRequest; + security?: SecuritySettingsUpdateRequest; +} diff --git a/reading-platform-frontend/src/api/generated/model/securitySettingsResponse.ts b/reading-platform-frontend/src/api/generated/model/securitySettingsResponse.ts new file mode 100644 index 0000000..e1b201e --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/securitySettingsResponse.ts @@ -0,0 +1,23 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +/** + * 安全设置响应 + */ +export interface SecuritySettingsResponse { + /** 密码最小长度 */ + passwordMinLength?: number; + /** 密码是否需要特殊字符 */ + passwordRequireSpecialChar?: boolean; + /** 登录失败锁定次数 */ + loginFailLockCount?: number; + /** 会话超时时间(分钟) */ + sessionTimeout?: number; + /** 启用双因素认证 */ + twoFactorEnabled?: boolean; +} diff --git a/reading-platform-frontend/src/api/generated/model/securitySettingsUpdateRequest.ts b/reading-platform-frontend/src/api/generated/model/securitySettingsUpdateRequest.ts new file mode 100644 index 0000000..ebf081a --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/securitySettingsUpdateRequest.ts @@ -0,0 +1,23 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +/** + * 安全设置更新请求 + */ +export interface SecuritySettingsUpdateRequest { + /** 密码最小长度 */ + passwordMinLength?: number; + /** 密码是否需要特殊字符 */ + passwordRequireSpecialChar?: boolean; + /** 登录失败锁定次数 */ + loginFailLockCount?: number; + /** 会话超时时间(分钟) */ + sessionTimeout?: number; + /** 启用双因素认证 */ + twoFactorEnabled?: boolean; +} diff --git a/reading-platform-frontend/src/api/generated/model/statsResponse.ts b/reading-platform-frontend/src/api/generated/model/statsResponse.ts new file mode 100644 index 0000000..58d7e91 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/statsResponse.ts @@ -0,0 +1,25 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +/** + * 统计数据响应 + */ +export interface StatsResponse { + /** 租户总数 */ + totalTenants?: number; + /** 活跃租户数 */ + activeTenants?: number; + /** 教师总数 */ + totalTeachers?: number; + /** 学生总数 */ + totalStudents?: number; + /** 课程总数 */ + totalCourses?: number; + /** 课时总数 */ + totalLessons?: number; +} diff --git a/reading-platform-frontend/src/api/generated/model/statsTrendResponse.ts b/reading-platform-frontend/src/api/generated/model/statsTrendResponse.ts new file mode 100644 index 0000000..e3dcab6 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/statsTrendResponse.ts @@ -0,0 +1,21 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +/** + * 趋势数据响应 + */ +export interface StatsTrendResponse { + /** 日期列表 */ + dates?: string[]; + /** 新增学生数列表 */ + newStudents?: number[]; + /** 新增教师数列表 */ + newTeachers?: number[]; + /** 新增课程数列表 */ + newCourses?: number[]; +} diff --git a/reading-platform-frontend/src/api/generated/model/studentRecordRequest.ts b/reading-platform-frontend/src/api/generated/model/studentRecordRequest.ts new file mode 100644 index 0000000..8c79146 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/studentRecordRequest.ts @@ -0,0 +1,31 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +/** + * 学生记录保存请求 + */ +export interface StudentRecordRequest { + /** 学生 ID */ + studentId: number; + /** 出勤状态 */ + attendance?: string; + /** 专注度评分 (1-5) */ + focus?: number; + /** 参与度评分 (1-5) */ + participation?: number; + /** 兴趣度评分 (1-5) */ + interest?: number; + /** 理解度评分 (1-5) */ + understanding?: number; + /** 领域达成 (JSON 数组) */ + domainAchievements?: string; + /** 表现评价 */ + performance?: string; + /** 备注 */ + notes?: string; +} diff --git a/reading-platform-frontend/src/api/generated/model/studentRecordResponse.ts b/reading-platform-frontend/src/api/generated/model/studentRecordResponse.ts new file mode 100644 index 0000000..7d751cb --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/studentRecordResponse.ts @@ -0,0 +1,41 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +/** + * 学生记录响应 + */ +export interface StudentRecordResponse { + /** ID */ + id?: number; + /** 课程 ID */ + lessonId?: number; + /** 学生 ID */ + studentId?: number; + /** 学生姓名 */ + studentName?: string; + /** 出勤状态 */ + attendance?: string; + /** 表现评价 */ + performance?: string; + /** 备注 */ + notes?: string; + /** 专注度评分 (1-5) */ + focus?: number; + /** 参与度评分 (1-5) */ + participation?: number; + /** 兴趣度评分 (1-5) */ + interest?: number; + /** 理解度评分 (1-5) */ + understanding?: number; + /** 领域达成 (JSON 数组) */ + domainAchievements?: string; + /** 创建时间 */ + createdAt?: string; + /** 更新时间 */ + updatedAt?: string; +} diff --git a/reading-platform-frontend/src/api/generated/model/studentReportResponse.ts b/reading-platform-frontend/src/api/generated/model/studentReportResponse.ts new file mode 100644 index 0000000..82a9d35 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/studentReportResponse.ts @@ -0,0 +1,27 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +/** + * 学生报告响应 + */ +export interface StudentReportResponse { + /** 学生ID */ + studentId?: number; + /** 学生姓名 */ + studentName?: string; + /** 班级名称 */ + className?: string; + /** 完成任务数 */ + taskCount?: number; + /** 阅读记录数 */ + readingCount?: number; + /** 成长记录数 */ + growthRecordCount?: number; + /** 出勤率 */ + attendanceRate?: number; +} diff --git a/reading-platform-frontend/src/api/generated/model/taskTemplateCreateRequest.ts b/reading-platform-frontend/src/api/generated/model/taskTemplateCreateRequest.ts new file mode 100644 index 0000000..5e64769 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/taskTemplateCreateRequest.ts @@ -0,0 +1,31 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +/** + * 任务模板创建请求 + */ +export interface TaskTemplateCreateRequest { + /** 模板名称 */ + name: string; + /** 模板描述 */ + description?: string; + /** 模板类型 */ + type?: string; + /** 任务类型 */ + taskType?: string; + /** 关联课程 ID */ + relatedCourseId?: number; + /** 默认持续时间 (天) */ + defaultDuration?: number; + /** 是否默认模板 */ + isDefault?: number; + /** 模板内容 */ + content?: string; + /** 是否公开 */ + isPublic?: number; +} diff --git a/reading-platform-frontend/src/api/generated/model/taskTemplateResponse.ts b/reading-platform-frontend/src/api/generated/model/taskTemplateResponse.ts new file mode 100644 index 0000000..4de6c9d --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/taskTemplateResponse.ts @@ -0,0 +1,43 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +/** + * 任务模板响应 + */ +export interface TaskTemplateResponse { + /** ID */ + id?: number; + /** 租户 ID */ + tenantId?: number; + /** 模板名称 */ + name?: string; + /** 模板描述 */ + description?: string; + /** 模板类型 */ + type?: string; + /** 任务类型 */ + taskType?: string; + /** 关联课程 ID */ + relatedCourseId?: number; + /** 默认持续时间 (天) */ + defaultDuration?: number; + /** 是否默认模板 */ + isDefault?: number; + /** 状态 */ + status?: string; + /** 创建人 ID */ + createdBy?: number; + /** 模板内容 */ + content?: string; + /** 是否公开 */ + isPublic?: number; + /** 创建时间 */ + createdAt?: string; + /** 更新时间 */ + updatedAt?: string; +} diff --git a/reading-platform-frontend/src/api/generated/model/teacherReportResponse.ts b/reading-platform-frontend/src/api/generated/model/teacherReportResponse.ts new file mode 100644 index 0000000..e83a19b --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/teacherReportResponse.ts @@ -0,0 +1,25 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +/** + * 教师报告响应 + */ +export interface TeacherReportResponse { + /** 教师ID */ + teacherId?: number; + /** 教师姓名 */ + teacherName?: string; + /** 授课次数 */ + lessonCount?: number; + /** 完成任务数 */ + taskCount?: number; + /** 学生评价平均分 */ + averageRating?: number; + /** 最后授课时间 */ + lastLessonTime?: string; +} diff --git a/reading-platform-frontend/src/api/generated/model/tenantCreateRequest.ts b/reading-platform-frontend/src/api/generated/model/tenantCreateRequest.ts index 6139f33..5f34774 100644 --- a/reading-platform-frontend/src/api/generated/model/tenantCreateRequest.ts +++ b/reading-platform-frontend/src/api/generated/model/tenantCreateRequest.ts @@ -35,7 +35,7 @@ export interface TenantCreateRequest { /** 结束日期 */ expireDate?: string; /** 课程套餐 ID(可选) */ - packageId?: number; + collectionId?: number; /** * 过期时间(兼容旧字段) * @deprecated diff --git a/reading-platform-frontend/src/api/generated/model/tenantUpdateRequest.ts b/reading-platform-frontend/src/api/generated/model/tenantUpdateRequest.ts index ca303f3..5b60eb4 100644 --- a/reading-platform-frontend/src/api/generated/model/tenantUpdateRequest.ts +++ b/reading-platform-frontend/src/api/generated/model/tenantUpdateRequest.ts @@ -26,6 +26,8 @@ export interface TenantUpdateRequest { status?: string; /** 套餐类型 */ packageType?: string; + /** 课程套餐ID(用于三层架构) */ + collectionId?: number; /** 教师配额 */ teacherQuota?: number; /** 学生配额 */ diff --git a/reading-platform-frontend/src/api/generated/model/themeResponse.ts b/reading-platform-frontend/src/api/generated/model/themeResponse.ts new file mode 100644 index 0000000..89712db --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/themeResponse.ts @@ -0,0 +1,27 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +/** + * 主题响应 + */ +export interface ThemeResponse { + /** ID */ + id?: number; + /** 主题名称 */ + name?: string; + /** 主题描述 */ + description?: string; + /** 排序号 */ + sortOrder?: number; + /** 状态 */ + status?: string; + /** 创建时间 */ + createdAt?: string; + /** 更新时间 */ + updatedAt?: string; +} diff --git a/reading-platform-frontend/src/api/generated/model/timetableResponse.ts b/reading-platform-frontend/src/api/generated/model/timetableResponse.ts new file mode 100644 index 0000000..f1952ec --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/timetableResponse.ts @@ -0,0 +1,20 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ +import type { SchedulePlanResponse } from './schedulePlanResponse'; + +/** + * 课表响应 + */ +export interface TimetableResponse { + /** 日期 */ + date?: string; + /** 星期几 (1-7) */ + weekDay?: number; + /** 排课列表 */ + schedules?: SchedulePlanResponse[]; +} diff --git a/reading-platform-frontend/src/api/generated/model/usageInfo.ts b/reading-platform-frontend/src/api/generated/model/usageInfo.ts new file mode 100644 index 0000000..91b1af1 --- /dev/null +++ b/reading-platform-frontend/src/api/generated/model/usageInfo.ts @@ -0,0 +1,19 @@ +/** + * Generated by orval v8.5.3 🍺 + * Do not edit manually. + * Reading Platform API + * Reading Platform Backend Service API Documentation + * OpenAPI spec version: 1.0.0 + */ + +/** + * 使用情况详情 + */ +export interface UsageInfo { + /** 已使用数量 */ + used?: number; + /** 配额 */ + quota?: number; + /** 使用百分比 */ + percentage?: number; +} diff --git a/reading-platform-frontend/src/api/school.ts b/reading-platform-frontend/src/api/school.ts index d66e526..174d07e 100644 --- a/reading-platform-frontend/src/api/school.ts +++ b/reading-platform-frontend/src/api/school.ts @@ -310,7 +310,7 @@ export interface RenewPackageDto { pricePaid?: number; } -// 获取课程套餐列表(两层结构-最上层) +// 获取课程套餐列表(三层架构) export const getCourseCollections = () => http.get('/v1/school/packages'); @@ -318,6 +318,10 @@ export const getCourseCollections = () => export const getCourseCollectionPackages = (collectionId: number) => http.get(`/v1/school/packages/${collectionId}/packages`); +// 续费课程套餐(三层架构) +export const renewCollection = (collectionId: number, data: RenewPackageDto) => + http.post(`/v1/school/packages/${collectionId}/renew`, data); + // 旧版API(已废弃) export const getTenantPackages = () => http.get('/v1/school/packages/legacy'); diff --git a/reading-platform-frontend/src/router/index.ts b/reading-platform-frontend/src/router/index.ts index bd05d41..868ebbb 100644 --- a/reading-platform-frontend/src/router/index.ts +++ b/reading-platform-frontend/src/router/index.ts @@ -28,38 +28,38 @@ const routes: RouteRecordRaw[] = [ meta: { title: '数据看板' }, }, { - path: 'courses', - name: 'AdminCourses', + path: 'packages', + name: 'AdminPackages', component: () => import('@/views/admin/courses/CourseListView.vue'), meta: { title: '课程包管理' }, }, { - path: 'courses/review', - name: 'AdminCourseReview', + path: 'packages/review', + name: 'AdminPackageReview', component: () => import('@/views/admin/courses/CourseReviewView.vue'), meta: { title: '审核管理' }, }, { - path: 'courses/:id', - name: 'AdminCourseDetail', + path: 'packages/:id', + name: 'AdminPackageDetail', component: () => import('@/views/admin/courses/CourseDetailView.vue'), meta: { title: '课程包详情' }, }, { - path: 'courses/create', - name: 'AdminCourseCreate', + path: 'packages/create', + name: 'AdminPackageCreate', component: () => import('@/views/admin/courses/CourseEditView.vue'), meta: { title: '创建课程包' }, }, { - path: 'courses/:id/edit', - name: 'AdminCourseEdit', + path: 'packages/:id/edit', + name: 'AdminPackageEdit', component: () => import('@/views/admin/courses/CourseEditView.vue'), meta: { title: '编辑课程包' }, }, { - path: 'courses/:id/stats', - name: 'AdminCourseStats', + path: 'packages/:id/stats', + name: 'AdminPackageStats', component: () => import('@/views/admin/courses/CourseStatsView.vue'), meta: { title: '课程数据统计' }, }, @@ -77,33 +77,27 @@ const routes: RouteRecordRaw[] = [ }, // V2 新增路由 { - path: 'packages', - name: 'AdminPackages', - component: () => import('@/views/admin/packages/PackageListView.vue'), + path: 'collections', + name: 'AdminCollections', + component: () => import('@/views/admin/collections/CollectionListView.vue'), meta: { title: '套餐管理' }, }, { - path: 'packages/review', - name: 'AdminPackageReview', - component: () => import('@/views/admin/packages/PackageReviewView.vue'), - meta: { title: '套餐审核管理' }, - }, - { - path: 'packages/create', - name: 'AdminPackageCreate', - component: () => import('@/views/admin/packages/PackageEditView.vue'), + path: 'collections/create', + name: 'AdminCollectionCreate', + component: () => import('@/views/admin/collections/CollectionEditView.vue'), meta: { title: '创建套餐' }, }, { - path: 'packages/:id', - name: 'AdminPackageDetail', - component: () => import('@/views/admin/packages/PackageDetailView.vue'), + path: 'collections/:id', + name: 'AdminCollectionDetail', + component: () => import('@/views/admin/collections/CollectionDetailView.vue'), meta: { title: '套餐详情' }, }, { - path: 'packages/:id/edit', - name: 'AdminPackageEdit', - component: () => import('@/views/admin/packages/PackageEditView.vue'), + path: 'collections/:id/edit', + name: 'AdminCollectionEdit', + component: () => import('@/views/admin/collections/CollectionEditView.vue'), meta: { title: '编辑套餐' }, }, { diff --git a/reading-platform-frontend/src/views/admin/DashboardView.vue b/reading-platform-frontend/src/views/admin/DashboardView.vue index 39596f0..5b215e3 100644 --- a/reading-platform-frontend/src/views/admin/DashboardView.vue +++ b/reading-platform-frontend/src/views/admin/DashboardView.vue @@ -50,7 +50,7 @@
-
+
@@ -224,7 +224,7 @@ const viewTenantDetail = (id: number) => { }; const viewCourseDetail = (id: number) => { - router.push(`/admin/courses/${id}`); + router.push(`/admin/packages/${id}`); }; // Initialize trend chart diff --git a/reading-platform-frontend/src/views/admin/LayoutView.vue b/reading-platform-frontend/src/views/admin/LayoutView.vue index 0376aca..4f51437 100644 --- a/reading-platform-frontend/src/views/admin/LayoutView.vue +++ b/reading-platform-frontend/src/views/admin/LayoutView.vue @@ -30,16 +30,16 @@ 数据看板 - + 课程包管理 - + 套餐管理 @@ -142,6 +142,7 @@ import { Building2, FolderOpen, Settings, + Gift, } from 'lucide-vue-next'; import { DatabaseOutlined, FormatPainterOutlined } from '@ant-design/icons-vue'; import { useUserStore } from '@/stores/user'; @@ -157,10 +158,10 @@ const selectedKeys = ref(['dashboard']); watch( () => route.path, (path) => { - if (path.startsWith('/admin/courses')) { - selectedKeys.value = ['courses']; - } else if (path.startsWith('/admin/packages')) { + if (path.startsWith('/admin/packages')) { selectedKeys.value = ['packages']; + } else if (path.startsWith('/admin/collections')) { + selectedKeys.value = ['collections']; } else if (path.startsWith('/admin/themes')) { selectedKeys.value = ['themes']; } else if (path.startsWith('/admin/tenants')) { @@ -182,8 +183,8 @@ const handleMenuSelect = ({ key }: { key: string | number }) => { const keyStr = String(key); const routeMap: Record = { dashboard: '/admin/dashboard', - courses: '/admin/courses', packages: '/admin/packages', + collections: '/admin/collections', themes: '/admin/themes', tenants: '/admin/tenants', resources: '/admin/resources', diff --git a/reading-platform-frontend/src/views/admin/collections/CollectionDetailView.vue b/reading-platform-frontend/src/views/admin/collections/CollectionDetailView.vue new file mode 100644 index 0000000..84f7772 --- /dev/null +++ b/reading-platform-frontend/src/views/admin/collections/CollectionDetailView.vue @@ -0,0 +1,328 @@ + + + + + diff --git a/reading-platform-frontend/src/views/admin/collections/CollectionEditView.vue b/reading-platform-frontend/src/views/admin/collections/CollectionEditView.vue new file mode 100644 index 0000000..7dbcee4 --- /dev/null +++ b/reading-platform-frontend/src/views/admin/collections/CollectionEditView.vue @@ -0,0 +1,99 @@ + + + + + diff --git a/reading-platform-frontend/src/views/admin/collections/CollectionListView.vue b/reading-platform-frontend/src/views/admin/collections/CollectionListView.vue new file mode 100644 index 0000000..cad39d4 --- /dev/null +++ b/reading-platform-frontend/src/views/admin/collections/CollectionListView.vue @@ -0,0 +1,244 @@ + + + + + diff --git a/reading-platform-frontend/src/views/admin/courses/CourseDetailView.vue b/reading-platform-frontend/src/views/admin/courses/CourseDetailView.vue index 76f54ad..2b6206f 100644 --- a/reading-platform-frontend/src/views/admin/courses/CourseDetailView.vue +++ b/reading-platform-frontend/src/views/admin/courses/CourseDetailView.vue @@ -752,18 +752,18 @@ const previewFile = (filePath: string, fileName: string) => { }; const editCourse = () => { - router.push(`/admin/courses/${route.params.id}/edit`); + router.push(`/admin/packages/${route.params.id}/edit`); }; const viewStats = () => { - router.push(`/admin/courses/${route.params.id}/stats`); + router.push(`/admin/packages/${route.params.id}/stats`); }; const deleteCourse = async () => { try { await courseApi.deleteCourse(route.params.id as string); message.success('删除成功'); - router.push('/admin/courses'); + router.push('/admin/packages'); } catch (error) { message.error('删除失败'); } diff --git a/reading-platform-frontend/src/views/admin/courses/CourseEditView.vue b/reading-platform-frontend/src/views/admin/courses/CourseEditView.vue index 5131340..1215b7e 100644 --- a/reading-platform-frontend/src/views/admin/courses/CourseEditView.vue +++ b/reading-platform-frontend/src/views/admin/courses/CourseEditView.vue @@ -382,7 +382,7 @@ const handleSave = async (isDraft = false) => { console.log('Course created with ID:', savedCourseId); // 更新路由以支持后续保存 if (savedCourseId) { - router.replace(`/admin/courses/${savedCourseId}/edit`); + router.replace(`/admin/packages/${savedCourseId}/edit`); } } @@ -436,7 +436,7 @@ const handleSave = async (isDraft = false) => { // 确保所有异步操作完成后再跳转 await new Promise(resolve => setTimeout(resolve, 500)); console.log('🚀 即将执行 router.push 跳转...'); - await router.push('/admin/courses'); + await router.push('/admin/packages'); console.log('✅ 已执行 router.push 跳转'); } } catch (error: any) { diff --git a/reading-platform-frontend/src/views/admin/courses/CourseListView.vue b/reading-platform-frontend/src/views/admin/courses/CourseListView.vue index a0eec06..8a06af1 100644 --- a/reading-platform-frontend/src/views/admin/courses/CourseListView.vue +++ b/reading-platform-frontend/src/views/admin/courses/CourseListView.vue @@ -26,11 +26,11 @@ - + 审核管理 - + 新建课程包 @@ -275,15 +275,15 @@ const handleTableChange = (pag: any) => { }; const viewCourse = (id: number | string) => { - router.push(`/admin/courses/${id}`); + router.push(`/admin/packages/${id}`); }; const editCourse = (id: number | string) => { - router.push(`/admin/courses/${id}/edit`); + router.push(`/admin/packages/${id}/edit`); }; const viewStats = (id: number | string) => { - router.push(`/admin/courses/${id}/stats`); + router.push(`/admin/packages/${id}/stats`); }; const deleteCourseHandler = async (id: number | string) => { @@ -482,7 +482,7 @@ const republishCourse = async (id: number) => { }; const iterateCourse = (id: number) => { - router.push(`/admin/courses/${id}/iterate`); + router.push(`/admin/packages/${id}/iterate`); }; const parseGradeTags = (gradeTags: string) => { diff --git a/reading-platform-frontend/src/views/admin/packages/PackageListView.vue b/reading-platform-frontend/src/views/admin/packages/PackageListView.vue index 73b82f3..0d74296 100644 --- a/reading-platform-frontend/src/views/admin/packages/PackageListView.vue +++ b/reading-platform-frontend/src/views/admin/packages/PackageListView.vue @@ -2,7 +2,7 @@
@@ -180,11 +180,11 @@ const fetchData = async () => { pageSize: pagination.pageSize, }) as any; dataSource.value = res.list || []; - pagination.total = res.total || 0; + pagination.total = Number(res.total) || 0; // 获取待审核数量 try { const pendingRes = await getPackageList({ status: 'PENDING', pageNum: 1, pageSize: 1 }) as any; - pendingCount.value = pendingRes.total || 0; + pendingCount.value = Number(pendingRes.total) || 0; } catch { pendingCount.value = 0; } diff --git a/reading-platform-frontend/src/views/admin/tenants/TenantListView.vue b/reading-platform-frontend/src/views/admin/tenants/TenantListView.vue index d8b6e9e..4aeb840 100644 --- a/reading-platform-frontend/src/views/admin/tenants/TenantListView.vue +++ b/reading-platform-frontend/src/views/admin/tenants/TenantListView.vue @@ -157,7 +157,7 @@ {{ currentTenant?.name }} - + 基础版 标准版 @@ -204,7 +204,7 @@ {{ detailData.address || '-' }} - + {{ getPackageTypeLabel(detailData.packageType) }} @@ -325,7 +325,7 @@ const isEdit = ref(false); const formRef = ref(); const editingId = ref(null); -const formData = reactive({ +const formData = reactive({ name: '', loginAccount: '', password: '', @@ -333,7 +333,7 @@ const formData = reactive({ contactPhone: '', address: '', packageType: '', - packageId: undefined, + collectionId: undefined, teacherQuota: 20, studentQuota: 200, startDate: '', @@ -400,12 +400,12 @@ const formatPackagePrice = (priceInCents: number) => { return (priceInCents / 100).toFixed(2); }; -// 处理套餐类型变化,自动填充配额等信息 +// 处理套餐变化,自动填充配额等信息 const handlePackageTypeChange = (value: string) => { const selectedPackage = packageList.value.find(pkg => pkg.name === value); if (selectedPackage) { - // 设置选中的套餐 ID - formData.packageId = selectedPackage.id; + // 设置选中的课程套餐ID(用于三层架构关联) + formData.collectionId = selectedPackage.id; // 根据套餐自动设置配额(这里可以根据实际需求调整) if (selectedPackage.name.includes('基础')) { @@ -485,7 +485,7 @@ const showAddModal = () => { contactPhone: '', address: '', packageType: '', - packageId: undefined, + collectionId: undefined, teacherQuota: 20, studentQuota: 200, dateRange: [ diff --git a/reading-platform-frontend/src/views/school/PackageView.vue b/reading-platform-frontend/src/views/school/PackageView.vue index 9b35d67..da8fa01 100644 --- a/reading-platform-frontend/src/views/school/PackageView.vue +++ b/reading-platform-frontend/src/views/school/PackageView.vue @@ -87,7 +87,7 @@
包含课程包 - {{ item.courseCount }} 个 + {{ item.packageCount }} 个
授权时间 @@ -105,14 +105,14 @@
-
+
包含课程包:
- - {{ course.name }} + + {{ pkg.name }} - - +{{ item.courses.length - 5 }} 更多 + + +{{ item.packages.length - 5 }} 更多
@@ -174,20 +174,23 @@
- 包含课程包 ({{ selectedPackage.courses?.length || 0 }}个) + 包含课程包 ({{ selectedPackage.packages?.length || 0 }}个)