Merge branch 'main' of http://8.148.151.56:3000/tonytech/kindergarten_java
This commit is contained in:
commit
a51e334107
161
API 对比分析.md
161
API 对比分析.md
@ -1,161 +0,0 @@
|
||||
# API 对比分析报告
|
||||
|
||||
## 概述
|
||||
对比 reading-platform-backend (Node.js/NestJS) 和 reading-platform-java (Spring Boot) 的 API 接口差异
|
||||
|
||||
---
|
||||
|
||||
## 已补全的接口
|
||||
|
||||
### 1. 任务管理相关接口(SchoolTaskController, TeacherTaskController)
|
||||
|
||||
#### 任务统计接口
|
||||
- `GET /api/v1/school/tasks/stats` - 获取任务统计数据
|
||||
- `GET /api/v1/school/tasks/stats/by-type` - 按任务类型统计
|
||||
- `GET /api/v1/school/tasks/stats/by-class` - 按班级统计
|
||||
- `GET /api/v1/school/tasks/stats/monthly` - 月度统计趋势
|
||||
|
||||
#### 任务完成情况接口
|
||||
- `GET /api/v1/school/tasks/:id/completions` - 获取任务完成情况分页
|
||||
- `PUT /api/v1/school/tasks/:taskId/completions/:studentId` - 更新任务完成状态
|
||||
|
||||
#### 任务模板接口
|
||||
- `GET /api/v1/school/task-templates` - 获取任务模板列表
|
||||
- `GET /api/v1/school/task-templates/:id` - 获取单个模板
|
||||
- `GET /api/v1/school/task-templates/default/:taskType` - 获取默认模板
|
||||
- `POST /api/v1/school/task-templates` - 创建模板
|
||||
- `PUT /api/v1/school/task-templates/:id` - 更新模板
|
||||
- `DELETE /api/v1/school/task-templates/:id` - 删除模板
|
||||
- `POST /api/v1/school/tasks/from-template` - 从模板创建任务
|
||||
|
||||
### 2. 通知相关接口
|
||||
|
||||
#### 学校管理员通知(SchoolNotificationController - 新增)
|
||||
- `GET /api/v1/school/notifications` - 获取通知列表
|
||||
- `GET /api/v1/school/notifications/:id` - 根据 ID 获取通知
|
||||
- `GET /api/v1/school/notifications/unread-count` - 获取未读数量
|
||||
- `POST /api/v1/school/notifications/:id/read` - 标记已读
|
||||
- `POST /api/v1/school/notifications/read-all` - 全部标记已读
|
||||
|
||||
### 3. 排课和课表相关接口(SchoolScheduleController)
|
||||
- `GET /api/v1/school/schedules/timetable` - 获取课表(带日期范围)
|
||||
- `POST /api/v1/school/schedules/batch` - 批量创建排课
|
||||
- `GET /api/v1/school/schedules/templates/:id` - 获取单个模板
|
||||
- `PUT /api/v1/school/schedules/templates/:id` - 更新模板
|
||||
- `POST /api/v1/school/schedules/templates/:id/apply` - 应用模板
|
||||
|
||||
### 4. 新增 DTO
|
||||
- `TaskTemplateCreateRequest` - 任务模板创建请求
|
||||
- `TaskTemplateUpdateRequest` - 任务模板更新请求
|
||||
- `CreateTaskFromTemplateRequest` - 从模板创建任务请求
|
||||
- `SchedulePlanCreateRequest` - 课表计划创建请求
|
||||
- `ScheduleTemplateApplyRequest` - 课表模板应用请求
|
||||
|
||||
---
|
||||
|
||||
## 仍需补全的接口
|
||||
|
||||
### P1 - 重要功能
|
||||
|
||||
#### 1. 成长档案接口(SchoolGrowthController, TeacherGrowthController)
|
||||
- `GET /api/v1/school/students/:studentId/growth-records` - 按学生查询成长档案
|
||||
- `GET /api/v1/school/classes/:classId/growth-records` - 按班级查询成长档案
|
||||
- `GET /api/v1/teacher/classes/:classId/growth-records` - 教师端按班级查询
|
||||
|
||||
#### 2. 教师端课时增强接口(TeacherLessonController)
|
||||
- `POST /api/v1/teacher/lessons/:id/finish` - 完成课时(带反馈数据)
|
||||
- `POST /api/v1/teacher/lessons/:id/students/:studentId/record` - 保存学生记录
|
||||
- `GET /api/v1/teacher/lessons/:id/student-records` - 获取学生记录
|
||||
- `POST /api/v1/teacher/lessons/:id/student-records/batch` - 批量保存学生记录
|
||||
- `POST /api/v1/teacher/lessons/:id/feedback` - 提交反馈
|
||||
- `GET /api/v1/teacher/lessons/:id/feedback` - 获取反馈
|
||||
|
||||
#### 3. 教师端课程增强接口(TeacherCourseController)
|
||||
- `GET /api/v1/teacher/courses/classes` - 获取班级列表
|
||||
- `GET /api/v1/teacher/students` - 获取所有学生
|
||||
- `GET /api/v1/teacher/classes/:id/students` - 获取班级学生
|
||||
- `GET /api/v1/teacher/classes/:id/teachers` - 获取班级教师
|
||||
- `GET /api/v1/teacher/schedules/timetable` - 获取课表
|
||||
- `GET /api/v1/teacher/schedules/today` - 获取今天排课
|
||||
- `POST /api/v1/teacher/schedules` - 创建排课
|
||||
- `PUT /api/v1/teacher/schedules/:id` - 更新排课
|
||||
- `DELETE /api/v1/teacher/schedules/:id` - 取消排课
|
||||
|
||||
#### 4. 班级管理接口(SchoolClassController)
|
||||
- `GET /api/v1/school/classes/:id/students` - 获取班级学生
|
||||
- `GET /api/v1/school/classes/:id/teachers` - 获取班级教师
|
||||
- `POST /api/v1/school/classes/:id/teachers` - 添加班级教师
|
||||
- `PUT /api/v1/school/classes/:id/teachers/:teacherId` - 更新班级教师
|
||||
- `DELETE /api/v1/school/classes/:id/teachers/:teacherId` - 移除班级教师
|
||||
- `POST /api/v1/school/students/:id/transfer` - 学生调班
|
||||
- `GET /api/v1/school/students/:id/history` - 学生调班历史
|
||||
- `POST /api/v1/school/students/import` - 批量导入学生
|
||||
- `GET /api/v1/school/students/import/template` - 获取导入模板
|
||||
|
||||
### P2 - 辅助功能
|
||||
|
||||
#### 1. 统计报告接口(SchoolStatsController)
|
||||
- `GET /api/v1/school/stats/teachers` - 活跃教师统计
|
||||
- `GET /api/v1/school/stats/courses` - 课程使用统计
|
||||
- `GET /api/v1/school/stats/activities` - 最近活动
|
||||
- `GET /api/v1/school/stats/lesson-trend` - 课时趋势
|
||||
- `GET /api/v1/school/stats/course-distribution` - 课程分布
|
||||
- `GET /api/v1/school/reports/overview` - 概览报告
|
||||
- `GET /api/v1/school/reports/teachers` - 教师报告
|
||||
- `GET /api/v1/school/reports/courses` - 课程报告
|
||||
- `GET /api/v1/school/reports/students` - 学生报告
|
||||
|
||||
#### 2. 导出接口增强(SchoolExportController)
|
||||
- `GET /api/v1/school/export/lessons?startDate=&endDate=` - 导出课时(带日期范围)
|
||||
- `GET /api/v1/school/export/teacher-stats?startDate=&endDate=` - 导出教师统计
|
||||
- `GET /api/v1/school/export/student-stats?classId=` - 导出学生统计(按班级)
|
||||
|
||||
#### 3. 课程包/套餐接口
|
||||
- `GET /api/v1/school/package` - 获取套餐信息
|
||||
- `GET /api/v1/school/package/usage` - 获取套餐使用情况
|
||||
|
||||
#### 4. 家长相关接口
|
||||
- `POST /api/v1/school/parents/:parentId/children/:studentId` - 添加孩子到家长
|
||||
- `DELETE /api/v1/school/parents/:parentId/children/:studentId` - 从家长移除孩子
|
||||
|
||||
#### 5. 管理员课程接口
|
||||
- `GET /api/v1/admin/courses/:id/stats` - 课程统计
|
||||
- `GET /api/v1/admin/courses/:id/validate` - 验证课程
|
||||
- `GET /api/v1/admin/courses/:id/versions` - 版本历史
|
||||
- `POST /api/v1/admin/courses/:id/submit` - 提交审核
|
||||
- `POST /api/v1/admin/courses/:id/withdraw` - 撤销审核
|
||||
- `POST /api/v1/admin/courses/:id/approve` - 审核通过
|
||||
- `POST /api/v1/admin/courses/:id/reject` - 审核驳回
|
||||
- `POST /api/v1/admin/courses/:id/direct-publish` - 直接发布
|
||||
- `POST /api/v1/admin/courses/:id/publish` - 发布
|
||||
- `POST /api/v1/admin/courses/:id/unpublish` - 下架
|
||||
- `POST /api/v1/admin/courses/:id/republish` - 重新发布
|
||||
|
||||
#### 6. 资源接口增强
|
||||
- `POST /api/v1/admin/resources/items/batch-delete` - 批量删除资源项
|
||||
- `GET /api/v1/admin/resources/stats` - 资源统计
|
||||
|
||||
#### 7. 反馈接口
|
||||
- `GET /api/v1/teacher/feedbacks` - 获取反馈列表
|
||||
- `GET /api/v1/teacher/feedbacks/stats` - 获取反馈统计
|
||||
- `GET /api/v1/school/feedbacks` - 获取反馈列表(学校端)
|
||||
- `GET /api/v1/school/feedbacks/stats` - 获取反馈统计(学校端)
|
||||
|
||||
#### 8. 认证接口
|
||||
- `GET /api/v1/auth/profile` - 获取用户信息
|
||||
- `POST /api/v1/auth/logout` - 登出
|
||||
|
||||
---
|
||||
|
||||
## 总结
|
||||
|
||||
本次补全了以下主要功能:
|
||||
1. 任务管理:统计、模板、完成情况更新
|
||||
2. 通知:学校管理员通知接口
|
||||
3. 排课:课表模板、批量创建、应用模板
|
||||
|
||||
下一步建议优先补全:
|
||||
1. 成长档案按学生/班级查询接口
|
||||
2. 教师端课时反馈接口
|
||||
3. 班级管理相关接口
|
||||
4. 学生调班和批量导入接口
|
||||
586
CLAUDE.md
586
CLAUDE.md
@ -87,8 +87,483 @@ Result<T> error(code, msg) // { code: xxx, message: "...", data: null }
|
||||
```
|
||||
|
||||
### 4. OpenAPI 驱动开发
|
||||
- 后端:在 Controller 上使用 `@Operation`、`@Parameter`、`@Schema` 注解
|
||||
- 前端:运行 `npm run api:update` 从 `api-spec.yml` 重新生成 TypeScript 客户端
|
||||
|
||||
- **后端**:在 Controller 上使用 `@Operation`、`@Parameter`、`@Schema` 注解
|
||||
- **前端**:运行 `npm run api:update` 从 `api-spec.yml` 重新生成 TypeScript 客户端
|
||||
|
||||
### 5. 前后端接口规范
|
||||
|
||||
#### 后端:以 Controller 为"唯一真源"
|
||||
|
||||
以后端 `Spring Boot Controller` 为接口定义的唯一真源,通过 `SpringDoc/Knife4j` 导出`OpenAPI` 规范,所有接口必须符合统一响应模型。
|
||||
|
||||
**统一响应模型:**
|
||||
```java
|
||||
// 普通接口
|
||||
Result<T> success(T data) // { code: 200, message: "success", data: ... }
|
||||
Result<T> error(code, msg) // { code: xxx, message: "...", data: null }
|
||||
|
||||
// 分页接口
|
||||
Result<PageResult<T>> // { code: 200, message: "success", data: { items, total, page, pageSize } }
|
||||
```
|
||||
|
||||
**响应结构说明:**
|
||||
| 接口类型 | 返回类型 | 分页字段命名 |
|
||||
|---------|---------|-------------|
|
||||
| 普通接口 | `Result<T>` | - |
|
||||
| 分页接口 | `Result<PageResult<T>>` | `page`, `pageSize`, `total`, `items` |
|
||||
| 错误响应 | `Result<Void>` | 参考 `ErrorCode` 枚举 |
|
||||
|
||||
**请求参数规范:**
|
||||
| 参数类型 | 注解 | 说明 |
|
||||
|---------|------|------|
|
||||
| 路径变量 | `@PathVariable` | 与 OpenAPI path 模板保持一致 |
|
||||
| 查询参数 | `@RequestParam` | 分页:`page`, `pageSize`;过滤:`keyword`, `category` 等 |
|
||||
| 请求体 | `@RequestBody DTO` | 使用 `*Request` 类,不直接暴露实体 |
|
||||
|
||||
#### 前端:src/apis + fetch.ts 调用模式
|
||||
|
||||
围绕 `src/apis` + `fetch.ts` 的调用模式,将真实接口规范(路径、method、参数、响应结构)维护到 `apis.ts`。
|
||||
|
||||
**工作流程:**
|
||||
```
|
||||
后端 Controller (带 @Schema 注解)
|
||||
↓
|
||||
Knife4j/Swagger → /v3/api-docs
|
||||
↓
|
||||
api-spec.yml (OpenAPI 规范)
|
||||
↓
|
||||
orval (npm run api:gen)
|
||||
↓
|
||||
生成的 TypeScript 类型 + API 客户端
|
||||
↓
|
||||
Vue 组件使用 (强制类型校验)
|
||||
```
|
||||
|
||||
#### 实施步骤
|
||||
|
||||
**一、梳理并固化接口响应规范**
|
||||
|
||||
1. **确认统一响应模型**
|
||||
- 普通接口:`Result<业务 DTO>`,字段 `code/message/data`
|
||||
- 分页接口:`Result<PageResult<业务 DTO>>`,分页字段命名(`page`, `pageSize`, `total` 等)
|
||||
- 错误响应:统一使用 `Result<Void>` 或类似 `ResultVoid` schema
|
||||
|
||||
2. **从后端提炼规范说明**
|
||||
- 位置:`reading-platform-java/common/response` 与 `common/enums/ErrorCode`
|
||||
- 输出:简短的"接口规范说明"文档,写入 `docs/` 目录
|
||||
|
||||
**二、从后端生成/校准 OpenAPI 规范**
|
||||
|
||||
1. **配置 SpringDoc/Knife4j 导出 OpenAPI**
|
||||
- 查看/完善后端 OpenAPI 配置类(如 `OpenApiConfig` 或 Knife4j 配置)
|
||||
- 指定 API 基本信息(title/description/version),与当前 `api-spec.yml` 对齐
|
||||
- 扫描 `controller/*` 包下所有带 `@RestController` 的类
|
||||
- 支持 `@Operation`、`@Parameter`、`@Schema` 注解
|
||||
|
||||
2. **规范化 Controller 注解与返回类型**
|
||||
- 检查 Controller 方法返回类型是否全部为 `Result<T>` 或`Result<PageResult<T>>`
|
||||
- 为缺少注解的接口补全 `@Operation`、`@Parameter`、`@Schema`
|
||||
- 校准路径前缀与角色划分(`/api/v1/teacher/*`、`/api/v1/school/*` 等)
|
||||
|
||||
3. **替换/同步前端 api-spec.yml**
|
||||
- 使用导出的 OpenAPI JSON/YAML 覆盖/更新 `reading-platform-frontend/api-spec.yml`
|
||||
- 约定更新流程:修改后端 Controller → 查看/验证文档 → 导出并覆盖 api-spec.yml → 前端重新生成客户端
|
||||
|
||||
**三、将接口规范映射到前端 src/apis 体系**
|
||||
|
||||
1. **分析现有 src/apis 使用方式**
|
||||
- 搜索全项目对 `from 'src/apis/fetch'` 或`getRequests` 的引用
|
||||
- 列出当前真实在用的 URL 列表及对应页面组件
|
||||
- 对比这些 URL 与后端 Controller 路径以及 `api-spec.yml` 中的 paths
|
||||
|
||||
2. **设计 apis.ts 的"接口字典"结构**
|
||||
- 以 `SwaggerType` / `RequestType` 为基础
|
||||
- 将真实接口按模块分类(教师端、学校端、家长端、管理员端)
|
||||
- 每个接口包含:路径、method、请求参数类型、响应类型
|
||||
|
||||
### 6. DTO/VO 使用规范
|
||||
|
||||
#### 响应对象(Response/VO)
|
||||
- **必须创建独立的 VO 实体类**,不要使用 `Map`、`HashMap` 或 `JSONObject` 返回数据
|
||||
- VO 类应放在 `com.reading.platform.dto.response` 包下
|
||||
- 使用 `@Schema` 注解描述字段含义,便于生成 API 文档
|
||||
- 使用 `@Data` 和 `@Builder` 注解简化代码
|
||||
|
||||
**示例:**
|
||||
```java
|
||||
@Data
|
||||
@Builder
|
||||
@Schema(description = "用户信息响应")
|
||||
public class UserInfoResponse {
|
||||
@Schema(description = "用户 ID")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "用户名")
|
||||
private String username;
|
||||
|
||||
@Schema(description = "昵称")
|
||||
private String nickname;
|
||||
|
||||
@Schema(description = "角色")
|
||||
private String role;
|
||||
}
|
||||
```
|
||||
|
||||
#### 请求对象(Request/DTO)
|
||||
- 复杂请求参数应创建 DTO 类,放在 `com.reading.platform.dto.request` 包下
|
||||
- 使用 `@Valid` 和校验注解确保参数合法性
|
||||
|
||||
#### 为什么不用 Map?
|
||||
- ✅ VO 实体类:类型安全、IDE 智能提示、API 文档自动生成、易于维护
|
||||
- ❌ Map:类型不安全、无文档、易出错、难以重构
|
||||
|
||||
### 7. Swagger/OpenAPI 注解规范
|
||||
|
||||
#### 强制要求
|
||||
**所有实体类(Entity)、DTO、VO 都必须添加 `@Schema` 注解**,确保 API 文档完整性和前端类型生成准确性。
|
||||
|
||||
#### 注解使用规范
|
||||
|
||||
**1. 类级别注解**
|
||||
```java
|
||||
// Entity 类
|
||||
@Data
|
||||
@TableName("users")
|
||||
@Schema(description = "用户信息") // 必须添加
|
||||
public class User { ... }
|
||||
|
||||
// DTO/VO 类
|
||||
@Data
|
||||
@Schema(description = "用户创建请求") // 必须添加
|
||||
public class UserCreateRequest { ... }
|
||||
|
||||
@Data
|
||||
@Schema(description = "用户信息响应") // 必须添加
|
||||
public class UserResponse { ... }
|
||||
```
|
||||
|
||||
**2. 字段级别注解**
|
||||
```java
|
||||
@Schema(description = "用户 ID", example = "1", requiredMode = Schema.RequiredMode.READ_ONLY)
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "用户名", example = "zhangsan", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private String username;
|
||||
|
||||
@Schema(description = "年龄", example = "18", minimum = "1", maximum = "150")
|
||||
private Integer age;
|
||||
|
||||
@Schema(description = "创建时间", example = "2024-01-01 12:00:00")
|
||||
private LocalDateTime createdAt;
|
||||
```
|
||||
|
||||
**3. Controller 方法注解**
|
||||
```java
|
||||
@Operation(summary = "创建用户", description = "创建新用户并返回用户信息")
|
||||
@ApiResponses({
|
||||
@ApiResponse(responseCode = "200", description = "创建成功"),
|
||||
@ApiResponse(responseCode = "400", description = "参数错误"),
|
||||
@ApiResponse(responseCode = "409", description = "用户名已存在")
|
||||
})
|
||||
@PostMapping
|
||||
public Result<UserResponse> createUser(@Valid @RequestBody UserCreateRequest request) {
|
||||
return Result.success(userService.createUser(request));
|
||||
}
|
||||
```
|
||||
|
||||
**4. 参数注解**
|
||||
```java
|
||||
@Operation(summary = "根据 ID 获取用户")
|
||||
@GetMapping("/{id}")
|
||||
public Result<UserResponse> getUser(
|
||||
@Parameter(description = "用户 ID", required = true)
|
||||
@PathVariable Long id,
|
||||
|
||||
@Parameter(description = "是否包含详细信息")
|
||||
@RequestParam(defaultValue = "false")
|
||||
Boolean includeDetails
|
||||
) {
|
||||
return Result.success(userService.getUser(id, includeDetails));
|
||||
}
|
||||
```
|
||||
|
||||
#### 常用注解说明
|
||||
|
||||
| 注解 | 位置 | 说明 |
|
||||
|------|------|------|
|
||||
| `@Schema(description = "...")` | 类/字段 | 描述类或字段的含义 |
|
||||
| `@Schema(example = "...")` | 字段 | 示例值 |
|
||||
| `@Schema(requiredMode = REQUIRED)` | 字段 | 必填字段 |
|
||||
| `@Schema(requiredMode = READ_ONLY)` | 字段 | 只读字段(如 ID、创建时间) |
|
||||
| `@Schema(minimum = "1", maximum = "100")` | 字段 | 数值范围 |
|
||||
| `@Schema(minLength = 1, maxLength = 50)` | 字段 | 字符串长度 |
|
||||
| `@Schema(pattern = "^[a-zA-Z]+$")` | 字段 | 正则表达式 |
|
||||
| `@Operation(summary = "...")` | 方法 | 接口摘要 |
|
||||
| `@Parameter(description = "...")` | 参数 | 参数描述 |
|
||||
|
||||
#### 完整示例
|
||||
|
||||
**Entity 类:**
|
||||
```java
|
||||
package com.reading.platform.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@Data
|
||||
@TableName("courses")
|
||||
@Schema(description = "课程信息")
|
||||
public class Course {
|
||||
|
||||
@Schema(description = "课程 ID", requiredMode = Schema.RequiredMode.READ_ONLY)
|
||||
@TableId(type = IdType.AUTO)
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "租户 ID", requiredMode = Schema.RequiredMode.READ_ONLY)
|
||||
private Long tenantId;
|
||||
|
||||
@Schema(description = "课程名称", example = "绘本阅读入门", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private String name;
|
||||
|
||||
@Schema(description = "课程编码", example = "READ001")
|
||||
private String code;
|
||||
|
||||
@Schema(description = "课程描述")
|
||||
private String description;
|
||||
|
||||
@Schema(description = "封面图片 URL")
|
||||
private String coverUrl;
|
||||
|
||||
@Schema(description = "分类", example = "language")
|
||||
private String category;
|
||||
|
||||
@Schema(description = "适用年龄段", example = "5-6 岁")
|
||||
private String ageRange;
|
||||
|
||||
@Schema(description = "难度等级", example = "beginner")
|
||||
private String difficultyLevel;
|
||||
|
||||
@Schema(description = "课程时长(分钟)", example = "30")
|
||||
private Integer durationMinutes;
|
||||
|
||||
@Schema(description = "状态", example = "published")
|
||||
private String status;
|
||||
|
||||
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.READ_ONLY)
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
private LocalDateTime createdAt;
|
||||
|
||||
@Schema(description = "更新时间", requiredMode = Schema.RequiredMode.READ_ONLY)
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
private LocalDateTime updatedAt;
|
||||
}
|
||||
```
|
||||
|
||||
**DTO 类:**
|
||||
```java
|
||||
package com.reading.platform.dto.request;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.Size;
|
||||
|
||||
@Data
|
||||
@Schema(description = "课程创建请求")
|
||||
public class CourseCreateRequest {
|
||||
|
||||
@Schema(description = "课程名称", example = "绘本阅读入门", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotBlank(message = "课程名称不能为空")
|
||||
@Size(max = 100, message = "课程名称不能超过 100 个字符")
|
||||
private String name;
|
||||
|
||||
@Schema(description = "课程描述", example = "适合大班幼儿的绘本阅读课程")
|
||||
private String description;
|
||||
|
||||
@Schema(description = "分类", example = "language")
|
||||
private String category;
|
||||
|
||||
@Schema(description = "适用年龄段", example = "5-6 岁")
|
||||
private String ageRange;
|
||||
}
|
||||
```
|
||||
|
||||
#### 代码审查要点
|
||||
|
||||
- [ ] Entity 类是否添加了 `@Schema(description = "...")`
|
||||
- [ ] Entity 字段是否添加了 `@Schema` 注解描述字段含义
|
||||
- [ ] DTO/VO 类是否添加了 `@Schema(description = "...")`
|
||||
- [ ] DTO/VO 字段是否添加了 `@Schema` 注解
|
||||
- [ ] Controller 方法是否添加了 `@Operation` 注解
|
||||
- [ ] Controller 参数是否添加了 `@Parameter` 注解
|
||||
- [ ] 必填字段是否标注了 `requiredMode = REQUIRED`
|
||||
- [ ] 只读字段(ID、时间戳)是否标注了 `requiredMode = READ_ONLY`
|
||||
- [ ] 是否有合适的 `example` 示例值
|
||||
|
||||
#### 注意事项
|
||||
|
||||
1. **导入正确的包**
|
||||
```java
|
||||
import io.swagger.v3.oas.annotations.media.Schema; // Swagger 3.x
|
||||
```
|
||||
|
||||
2. **Lombok 与 Schema 的配合**
|
||||
- `@Data` 生成的 getter 方法会自动继承字段上的 `@Schema` 注解
|
||||
- 但建议字段和方法都加上注解以确保兼容性
|
||||
|
||||
3. **必填校验**
|
||||
- `requiredMode = REQUIRED` 仅用于文档说明
|
||||
- 实际校验需要配合 `@NotNull`、`@NotBlank` 等校验注解
|
||||
|
||||
4. **枚举类型**
|
||||
```java
|
||||
@Schema(description = "状态", example = "active", allowableValues = {"active", "inactive"})
|
||||
private String status;
|
||||
```
|
||||
|
||||
### 8. 前端接口校验规范
|
||||
|
||||
#### 基于 OpenAPI + orval + TypeScript 的强制校验链路
|
||||
|
||||
本项目前端采用**从接口文档到页面代码的强制类型校验链路**,确保前后端接口一致性和类型安全。
|
||||
|
||||
**技术栈:**
|
||||
- **OpenAPI 3.0**:统一的 API 接口规范
|
||||
- **orval**:从 OpenAPI 规范生成 TypeScript 类型和 API 客户端
|
||||
- **TypeScript**:静态类型检查
|
||||
- **ESLint**:代码规范约束
|
||||
- **axios**:HTTP 请求(由 orval 自动生成)
|
||||
|
||||
**工作流程:**
|
||||
|
||||
```
|
||||
后端 Controller (带 @Schema 注解)
|
||||
↓
|
||||
Knife4j/Swagger
|
||||
↓
|
||||
api-spec.yml (OpenAPI 规范)
|
||||
↓
|
||||
orval (npm run api:gen)
|
||||
↓
|
||||
生成的 TypeScript 类型 + API 客户端
|
||||
↓
|
||||
Vue 组件使用 (强制类型校验)
|
||||
```
|
||||
|
||||
#### 配置说明
|
||||
|
||||
**orval 配置 (`orval.config.ts` 或 `vite.config.ts`):**
|
||||
```typescript
|
||||
export default {
|
||||
'api': {
|
||||
input: {
|
||||
target: './api-spec.yml',
|
||||
filters: {
|
||||
tags: ['default'], // 只生成指定标签的接口
|
||||
},
|
||||
},
|
||||
output: {
|
||||
mode: 'split', // 分离模式:每个接口一个文件
|
||||
target: './src/api/generated/client.ts',
|
||||
schemas: './src/api/generated/schemas',
|
||||
client: 'axios',
|
||||
mock: false,
|
||||
override: {
|
||||
fetch: {
|
||||
includeHttpRequestHeader: true,
|
||||
},
|
||||
useTypeOverInterfaces: true, // 优先使用 type
|
||||
useDate: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
};
|
||||
```
|
||||
|
||||
#### 使用规范
|
||||
|
||||
**1. 后端必须添加 @Schema 注解**
|
||||
```java
|
||||
@Operation(summary = "获取用户信息")
|
||||
@GetMapping("/{id}")
|
||||
public Result<UserInfoResponse> getUser(@PathVariable Long id) {
|
||||
return Result.success(userService.getUser(id));
|
||||
}
|
||||
```
|
||||
|
||||
**2. 前端必须使用生成的类型和客户端**
|
||||
```typescript
|
||||
// ✅ 正确:使用生成的类型和 API
|
||||
import { getUser } from '@/api/generated/client';
|
||||
import type { UserInfoResponse } from '@/api/generated/schemas';
|
||||
|
||||
const user: UserInfoResponse = await getUser(id);
|
||||
|
||||
// ❌ 错误:不要手写类型或手动调用 axios
|
||||
interface ManualUser { id: number; name: string; }
|
||||
const user = await axios.get(`/api/users/${id}`);
|
||||
```
|
||||
|
||||
**3. ESLint 约束规则**
|
||||
```typescript
|
||||
// .eslintrc.cjs 中添加
|
||||
rules: {
|
||||
// 禁止手动调用 axios,必须使用生成的 API 客户端
|
||||
'no-restricted-imports': [
|
||||
'error',
|
||||
{
|
||||
patterns: ['axios', '!@/api/generated/*'],
|
||||
},
|
||||
],
|
||||
// 强制使用生成的类型定义
|
||||
'@typescript-eslint/no-explicit-any': 'error',
|
||||
// 禁止使用 any 类型(特殊情况需 eslint-disable 注释)
|
||||
}
|
||||
```
|
||||
|
||||
**4. 运行时校验(可选)**
|
||||
使用 `zod` 或 `yup` 进行运行时数据校验:
|
||||
```typescript
|
||||
import { UserInfoSchema } from '@/api/generated/schemas';
|
||||
import { z } from 'zod';
|
||||
|
||||
// 运行时校验响应数据
|
||||
const parsedData = UserInfoSchema.parse(apiResponse);
|
||||
```
|
||||
|
||||
#### 开发命令
|
||||
|
||||
```bash
|
||||
cd reading-platform-frontend
|
||||
|
||||
# 从后端更新 API 规范并生成客户端
|
||||
npm run api:gen
|
||||
|
||||
# 或者完整流程(包含从后端导出 swagger)
|
||||
npm run api:update
|
||||
```
|
||||
|
||||
#### 代码审查要点
|
||||
|
||||
- [ ] 前端是否使用了 orval 生成的类型,而非手写 interface
|
||||
- [ ] 是否使用生成的 API 客户端,而非手动 axios 调用
|
||||
- [ ] TypeScript 编译是否通过(无类型错误)
|
||||
- [ ] 后端 Controller 是否正确添加 @Schema 注解
|
||||
- [ ] API 变更后是否重新运行了 `npm run api:gen`
|
||||
|
||||
#### 常见问题
|
||||
|
||||
**Q: 为什么要强制使用生成的类型?**
|
||||
A: 手写类型容易与后端实际返回不一致,导致运行时错误。生成类型确保前后端一致性。
|
||||
|
||||
**Q: 如何添加自定义逻辑?**
|
||||
A: 在生成的客户端外封装业务逻辑层,不要修改生成的文件。
|
||||
|
||||
**Q: API 变更后忘记更新怎么办?**
|
||||
A: CI/CD 中可添加类型检查步骤,类型不通过则构建失败。
|
||||
|
||||
## 开发命令
|
||||
|
||||
@ -141,4 +616,109 @@ npm run api:update
|
||||
| 家长 | parent1 | 123456 |
|
||||
|
||||
## API 文档
|
||||
- 访问地址:http://localhost:8080/doc.html(后端启动后)
|
||||
- 访问地址:http://localhost:8080/doc.html(后端启动后)
|
||||
|
||||
## 近期补充的接口和字段(2026-03-10)
|
||||
|
||||
### 实体类新增字段
|
||||
|
||||
**StudentRecord** - 学生评价记录
|
||||
- `focus` - 专注力评分 (1-5)
|
||||
- `participation` - 参与度评分 (1-5)
|
||||
- `interest` - 兴趣评分 (1-5)
|
||||
- `understanding` - 理解度评分 (1-5)
|
||||
|
||||
**LessonFeedback** - 课时反馈
|
||||
- `design_quality` - 设计质量评分 (1-5)
|
||||
- `participation` - 参与度评分 (1-5)
|
||||
- `goal_achievement` - 目标达成度评分 (1-5)
|
||||
- `step_feedbacks` - 环节反馈 JSON
|
||||
- `pros` - 优点
|
||||
- `suggestions` - 建议
|
||||
- `activities_done` - 完成的活动 JSON
|
||||
|
||||
**Lesson** - 课时
|
||||
- `actual_duration` - 实际时长(分钟)
|
||||
- `overall_rating` - 整体评分
|
||||
- `participation_rating` - 参与度评分
|
||||
- `completion_note` - 完成说明
|
||||
|
||||
**Student** - 学生
|
||||
- `class_id` - 班级 ID
|
||||
- `parent_name` - 家长姓名
|
||||
- `parent_phone` - 家长手机号
|
||||
- `reading_count` - 阅读次数
|
||||
- `lesson_count` - 课时数
|
||||
|
||||
**ClassTeacher** - 班级教师
|
||||
- `is_primary` - 是否主教
|
||||
- `sort_order` - 排序
|
||||
|
||||
**StudentClassHistory** - 学生班级历史
|
||||
- `reason` - 调班原因
|
||||
|
||||
### 新增 Service 方法
|
||||
|
||||
**ClassService**
|
||||
- `getClassList(Long tenantId)` - 获取班级列表(无分页)
|
||||
- `getClassStudents(Long classId, ...)` - 获取班级学生分页
|
||||
- `getClassTeachers(Long classId)` - 获取班级教师列表
|
||||
- `addClassTeacher(...)` - 添加班级教师
|
||||
- `updateClassTeacher(...)` - 更新班级教师角色
|
||||
- `removeClassTeacher(...)` - 移除班级教师
|
||||
|
||||
**LessonService**
|
||||
- `finishLesson(...)` - 结束课时
|
||||
- `saveStudentRecord(...)` - 保存学生评价记录
|
||||
- `getStudentRecords(Long lessonId)` - 获取课程所有学生记录
|
||||
- `batchSaveStudentRecords(...)` - 批量保存学生评价记录
|
||||
- `saveLessonFeedback(...)` - 提交课程反馈
|
||||
- `getLessonFeedback(Long lessonId)` - 获取课程反馈
|
||||
|
||||
**StudentService**
|
||||
- `transferStudent(...)` - 学生调班
|
||||
- `getStudentClassHistory(Long studentId)` - 获取学生调班历史
|
||||
|
||||
**TaskService**
|
||||
- `getTaskCompletion(Long taskId, Long studentId)` - 获取任务完成记录
|
||||
|
||||
### 新增 Controller 接口
|
||||
|
||||
**学校端 (/api/v1/school/*)**
|
||||
- `GET /classes/list` - 获取班级列表(无分页)
|
||||
- `GET /classes/{id}/students` - 获取班级学生分页
|
||||
- `GET /classes/{id}/teachers` - 获取班级教师列表
|
||||
- `POST /classes/{id}/teachers` - 添加班级教师
|
||||
- `PUT /classes/{id}/teachers/{teacherId}` - 更新班级教师角色
|
||||
- `DELETE /classes/{id}/teachers/{teacherId}` - 移除班级教师
|
||||
- `POST /students/{id}/transfer` - 学生调班
|
||||
- `GET /students/{id}/history` - 获取学生调班历史
|
||||
|
||||
**教师端 (/api/v1/teacher/*)**
|
||||
- `GET /courses/classes` - 获取教师的班级列表
|
||||
- `GET /courses/students` - 获取教师所有学生分页
|
||||
- `GET /courses/classes/{classId}/students` - 获取班级学生分页
|
||||
- `GET /courses/classes/{classId}/teachers` - 获取班级教师列表
|
||||
- `POST /lessons/{id}/finish` - 结束课时
|
||||
- `POST /lessons/{lessonId}/students/{studentId}/record` - 保存学生评价记录
|
||||
- `GET /lessons/{lessonId}/student-records` - 获取课程所有学生记录
|
||||
- `POST /lessons/{lessonId}/student-records/batch` - 批量保存学生评价记录
|
||||
- `POST /lessons/{lessonId}/feedback` - 提交课程反馈
|
||||
- `GET /lessons/{lessonId}/feedback` - 获取课程反馈
|
||||
- `GET /schedules/timetable` - 获取课表(按日期范围)
|
||||
- `GET /schedules/today` - 获取今日课表
|
||||
- `POST /schedules` - 创建课表计划
|
||||
- `PUT /schedules/{id}` - 更新课表计划
|
||||
- `DELETE /schedules/{id}` - 取消课表计划
|
||||
|
||||
**家长端 (/api/v1/parent/*)**
|
||||
- `GET /children` - 获取我的孩子(增强返回格式)
|
||||
- `GET /children/{id}` - 获取孩子详情(增强返回格式)
|
||||
- `GET /children/{childId}/lessons` - 获取孩子的课时记录
|
||||
- `GET /children/{childId}/tasks` - 获取孩子的任务(带完成状态)
|
||||
- `PUT /children/{childId}/tasks/{taskId}/feedback` - 提交任务家长反馈
|
||||
|
||||
### 数据库迁移
|
||||
|
||||
- 迁移脚本:``
|
||||
- 包含上述所有实体类新增字段的 ALTER TABLE 语句
|
||||
132
Service 重构总结.md
132
Service 重构总结.md
@ -1,132 +0,0 @@
|
||||
# Service 层重构总结
|
||||
|
||||
## 重构时间
|
||||
2026-03-10
|
||||
|
||||
## 重构目的
|
||||
将 Service 层从"直接 class 实现"重构为"interface + impl"模式,符合 Spring 最佳实践。
|
||||
|
||||
## 重构的 Service 列表
|
||||
|
||||
本次重构共完成了 14 个 Service 的 interface + impl 模式改造:
|
||||
|
||||
### 新增的 Interface 文件
|
||||
|
||||
| 序号 | 接口文件 | 实现类文件 |
|
||||
|------|----------|------------|
|
||||
| 1 | `AdminStatsService.java` | `AdminStatsServiceImpl.java` |
|
||||
| 2 | `CourseLessonService.java` | `CourseLessonServiceImpl.java` |
|
||||
| 3 | `CoursePackageService.java` | `CoursePackageServiceImpl.java` |
|
||||
| 4 | `ExportService.java` | `ExportServiceImpl.java` |
|
||||
| 5 | `FileUploadService.java` | `FileUploadServiceImpl.java` |
|
||||
| 6 | `OperationLogService.java` | `OperationLogServiceImpl.java` |
|
||||
| 7 | `ResourceService.java` | `ResourceServiceImpl.java` |
|
||||
| 8 | `SchoolCourseService.java` | `SchoolCourseServiceImpl.java` |
|
||||
| 9 | `SystemSettingService.java` | `SystemSettingServiceImpl.java` |
|
||||
| 10 | `TeacherDashboardService.java` | `TeacherDashboardServiceImpl.java` |
|
||||
| 11 | `ScheduleService.java` | `ScheduleServiceImpl.java` |
|
||||
| 12 | `ThemeService.java` | `ThemeServiceImpl.java` |
|
||||
| 13 | `TenantService.java` | `TenantServiceImpl.java` (已存在) |
|
||||
| 14 | `SchoolStatsService.java` | `SchoolStatsServiceImpl.java` |
|
||||
|
||||
### 已有的 Interface + Impl 模式 Service
|
||||
|
||||
以下 Service 在重构前已经是 interface + impl 模式:
|
||||
|
||||
1. `AuthService` → `AuthServiceImpl`
|
||||
2. `ClassService` → `ClassServiceImpl`
|
||||
3. `StudentService` → `StudentServiceImpl`
|
||||
4. `TaskService` → `TaskServiceImpl`
|
||||
5. `CourseService` → `CourseServiceImpl`
|
||||
6. `GrowthRecordService` → `GrowthRecordServiceImpl`
|
||||
7. `LessonService` → `LessonServiceImpl`
|
||||
8. `NotificationService` → `NotificationServiceImpl`
|
||||
9. `ParentService` → `ParentServiceImpl`
|
||||
10. `TeacherService` → `TeacherServiceImpl`
|
||||
11. `TokenService` → `TokenServiceImpl`
|
||||
|
||||
## 重构模式
|
||||
|
||||
所有 Service 遵循以下模式:
|
||||
|
||||
### Interface 定义
|
||||
```java
|
||||
package com.reading.platform.service;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 服务接口
|
||||
*/
|
||||
public interface XxxService {
|
||||
|
||||
/**
|
||||
* 方法描述
|
||||
*/
|
||||
List<Xxx> getXxxList(Long id);
|
||||
|
||||
/**
|
||||
* 方法描述
|
||||
*/
|
||||
Xxx createXxx(XxxCreateRequest request);
|
||||
}
|
||||
```
|
||||
|
||||
### Impl 实现类
|
||||
```java
|
||||
package com.reading.platform.service.impl;
|
||||
|
||||
import com.reading.platform.mapper.XxxMapper;
|
||||
import com.reading.platform.service.XxxService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* 服务实现类
|
||||
*/
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class XxxServiceImpl implements XxxService {
|
||||
|
||||
private final XxxMapper xxxMapper;
|
||||
|
||||
@Override
|
||||
public List<Xxx> getXxxList(Long id) {
|
||||
// 业务逻辑
|
||||
}
|
||||
|
||||
@Override
|
||||
public Xxx createXxx(XxxCreateRequest request) {
|
||||
// 业务逻辑
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 架构优势
|
||||
|
||||
1. **依赖倒置**:Controller 依赖接口而非具体实现
|
||||
2. **易于测试**:可以通过 Mock 接口进行测试
|
||||
3. **易于扩展**:可以轻松切换不同的实现
|
||||
4. **代码规范**:符合 Spring 官方推荐的最佳实践
|
||||
|
||||
## 编译验证
|
||||
|
||||
```bash
|
||||
cd reading-platform-java
|
||||
mvn clean compile -DskipTests
|
||||
```
|
||||
|
||||
编译结果:**BUILD SUCCESS**
|
||||
|
||||
## 文件统计
|
||||
|
||||
- 接口文件:25 个
|
||||
- 实现类文件:25 个
|
||||
- 总计:50 个 Service 相关文件
|
||||
|
||||
## 后续建议
|
||||
|
||||
1. 为新实现的接口添加单元测试
|
||||
2. 在 CI/CD 流程中确保编译使用 JDK 17
|
||||
3. 保持新增 Service 遵循 interface + impl 模式
|
||||
157
docs/后端接口补全总结.md
Normal file
157
docs/后端接口补全总结.md
Normal file
@ -0,0 +1,157 @@
|
||||
# 后端接口补全总结
|
||||
|
||||
本文档总结了为匹配前端 API 调用而补全的后端接口。
|
||||
|
||||
## 已完成的工作
|
||||
|
||||
### 1. 学校端 (`/api/v1/school/*`)
|
||||
|
||||
#### 班级管理 (`/classes`)
|
||||
- `GET /list` - 获取班级列表(无分页)
|
||||
- `GET /{id}/students` - 获取班级学生分页
|
||||
- `GET /{id}/teachers` - 获取班级教师列表
|
||||
- `POST /{id}/teachers` - 添加班级教师
|
||||
- `PUT /{id}/teachers/{teacherId}` - 更新班级教师角色
|
||||
- `DELETE /{id}/teachers/{teacherId}` - 移除班级教师
|
||||
|
||||
#### 学生管理 (`/students`)
|
||||
- `POST /{id}/transfer` - 学生调班
|
||||
- `GET /{id}/history` - 获取学生调班历史
|
||||
|
||||
### 2. 教师端 (`/api/v1/teacher/*`)
|
||||
|
||||
#### 课程管理 (`/courses`)
|
||||
- `GET /classes` - 获取教师的班级列表
|
||||
- `GET /students` - 获取教师所有学生分页
|
||||
- `GET /classes/{classId}/students` - 获取班级学生分页
|
||||
- `GET /classes/{classId}/teachers` - 获取班级教师列表
|
||||
|
||||
#### 课时管理 (`/lessons`)
|
||||
- `POST /{id}/finish` - 结束课时(包含实际时长、评分等)
|
||||
- `POST /{lessonId}/students/{studentId}/record` - 保存学生评价记录
|
||||
- `GET /{lessonId}/student-records` - 获取课程所有学生记录
|
||||
- `POST /{lessonId}/student-records/batch` - 批量保存学生评价记录
|
||||
- `POST /{lessonId}/feedback` - 提交课程反馈
|
||||
- `GET /{lessonId}/feedback` - 获取课程反馈
|
||||
|
||||
#### 课表管理 (`/schedules`)
|
||||
- `GET /timetable` - 获取课表(按日期范围)
|
||||
- `GET /today` - 获取今日课表
|
||||
- `POST /` - 创建课表计划
|
||||
- `PUT /{id}` - 更新课表计划
|
||||
- `DELETE /{id}` - 取消课表计划
|
||||
|
||||
### 3. 家长端 (`/api/v1/parent/*`)
|
||||
|
||||
#### 孩子信息 (`/children`)
|
||||
- `GET /` - 获取我的孩子(增强返回格式)
|
||||
- `GET /{id}` - 获取孩子详情(增强返回格式)
|
||||
- `GET /{childId}/lessons` - 获取孩子的课时记录
|
||||
- `GET /{childId}/tasks` - 获取孩子的任务(带完成状态)
|
||||
|
||||
#### 任务管理 (`/tasks`)
|
||||
- `PUT /{childId}/tasks/{taskId}/feedback` - 提交任务家长反馈
|
||||
|
||||
### 4. 管理员端 (`/api/v1/admin/*`)
|
||||
|
||||
管理员端接口大部分已存在,以下接口需要在未来补充:
|
||||
- `PUT /themes/reorder` - 主题重新排序
|
||||
- `PUT /packages/{packageId}/courses` - 设置套餐课程
|
||||
- `POST /packages/{packageId}/courses` - 添加课程到套餐
|
||||
- `DELETE /packages/{packageId}/courses/{courseId}` - 从套餐移除课程
|
||||
- `POST /packages/{id}/submit` - 提交审核
|
||||
- `POST /packages/{id}/review` - 审核套餐
|
||||
- `POST /packages/{id}/publish` - 发布套餐
|
||||
- `POST /packages/{id}/offline` - 下架套餐
|
||||
|
||||
## 实体类更新
|
||||
|
||||
### StudentRecord
|
||||
新增字段:
|
||||
- `focus` - 专注力评分 (1-5)
|
||||
- `participation` - 参与度评分 (1-5)
|
||||
- `interest` - 兴趣评分 (1-5)
|
||||
- `understanding` - 理解度评分 (1-5)
|
||||
|
||||
### LessonFeedback
|
||||
新增字段:
|
||||
- `designQuality` - 设计质量评分 (1-5)
|
||||
- `participation` - 参与度评分 (1-5)
|
||||
- `goalAchievement` - 目标达成度评分 (1-5)
|
||||
- `stepFeedbacks` - 环节反馈 JSON
|
||||
- `pros` - 优点
|
||||
- `suggestions` - 建议
|
||||
- `activitiesDone` - 完成的活动 JSON
|
||||
|
||||
## Service 方法更新
|
||||
|
||||
### ClassService
|
||||
- `getClassList(Long tenantId)` - 获取班级列表
|
||||
- `getClassStudents(Long classId, ...)` - 获取班级学生分页
|
||||
- `getClassTeachers(Long classId)` - 获取班级教师列表
|
||||
- `addClassTeacher(...)` - 添加班级教师
|
||||
- `updateClassTeacher(...)` - 更新班级教师角色
|
||||
- `removeClassTeacher(...)` - 移除班级教师
|
||||
|
||||
### LessonService
|
||||
- `finishLesson(...)` - 结束课时
|
||||
- `saveStudentRecord(...)` - 保存学生评价记录
|
||||
- `getStudentRecords(Long lessonId)` - 获取课程所有学生记录
|
||||
- `batchSaveStudentRecords(...)` - 批量保存学生评价记录
|
||||
- `saveLessonFeedback(...)` - 提交课程反馈
|
||||
- `getLessonFeedback(Long lessonId)` - 获取课程反馈
|
||||
|
||||
### StudentService
|
||||
- `transferStudent(...)` - 学生调班
|
||||
- `getStudentClassHistory(Long studentId)` - 获取学生调班历史
|
||||
|
||||
### TaskService
|
||||
- `getTaskCompletion(Long taskId, Long studentId)` - 获取任务完成记录
|
||||
|
||||
## 数据库迁移需求
|
||||
|
||||
需要创建数据库迁移脚本,添加以下字段:
|
||||
|
||||
```sql
|
||||
-- student_records 表新增字段
|
||||
ALTER TABLE student_records ADD COLUMN focus INT COMMENT '专注力评分 (1-5)';
|
||||
ALTER TABLE student_records ADD COLUMN participation INT COMMENT '参与度评分 (1-5)';
|
||||
ALTER TABLE student_records ADD COLUMN interest INT COMMENT '兴趣评分 (1-5)';
|
||||
ALTER TABLE student_records ADD COLUMN understanding INT COMMENT '理解度评分 (1-5)';
|
||||
|
||||
-- lesson_feedbacks 表新增字段
|
||||
ALTER TABLE lesson_feedbacks ADD COLUMN design_quality INT COMMENT '设计质量评分 (1-5)';
|
||||
ALTER TABLE lesson_feedbacks ADD COLUMN participation INT COMMENT '参与度评分 (1-5)';
|
||||
ALTER TABLE lesson_feedbacks ADD COLUMN goal_achievement INT COMMENT '目标达成度评分 (1-5)';
|
||||
ALTER TABLE lesson_feedbacks ADD COLUMN step_feedbacks TEXT COMMENT '环节反馈 JSON';
|
||||
ALTER TABLE lesson_feedbacks ADD COLUMN pros TEXT COMMENT '优点';
|
||||
ALTER TABLE lesson_feedbacks ADD COLUMN suggestions TEXT COMMENT '建议';
|
||||
ALTER TABLE lesson_feedbacks ADD COLUMN activities_done TEXT COMMENT '完成的活动 JSON';
|
||||
|
||||
-- student_class_history 表新增字段
|
||||
ALTER TABLE student_class_history ADD COLUMN reason VARCHAR(255) COMMENT '调班原因';
|
||||
```
|
||||
|
||||
## 待补充的接口
|
||||
|
||||
### 学校端
|
||||
- `GET /stats/teachers/active` - 获取活跃教师统计
|
||||
- `GET /stats/courses` - 获取课程使用统计
|
||||
- `GET /stats/activities` - 获取最近活动
|
||||
- `GET /stats/lesson-trend` - 课时趋势
|
||||
- `GET /stats/course-distribution` - 课程分布
|
||||
- `GET /reports/*` - 数据报告接口
|
||||
|
||||
### 教师端
|
||||
- `POST /tasks/{taskId}/remind` - 发送任务提醒
|
||||
- `GET /school-courses/*` - 校本课程相关接口
|
||||
|
||||
### 家长端
|
||||
- `GET /growth-records/student/{studentId}` - 获取孩子成长记录(已存在,路径不同)
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. 所有新增的数据库字段需要创建 Flyway 迁移脚本
|
||||
2. 部分接口的返回数据结构已调整以匹配前端需求
|
||||
3. 部分 Service 方法需要进一步测试验证
|
||||
4. 教师端的班级、学生过滤逻辑需要根据实际业务场景优化
|
||||
135
docs/表名统一修改说明.md
Normal file
135
docs/表名统一修改说明.md
Normal file
@ -0,0 +1,135 @@
|
||||
# 表名统一修改说明
|
||||
|
||||
## 修改时间
|
||||
2026-03-10
|
||||
|
||||
## 修改目的
|
||||
将数据库表名从复数形式改为单数形式,使其与 ORM 实体类名保持一致(除了下划线和驼峰的区别)。
|
||||
|
||||
## 修改内容
|
||||
|
||||
### 1. Flyway 迁移脚本
|
||||
创建了新的 Flyway 迁移脚本:
|
||||
- 文件:`reading-platform-java/src/main/resources/db/migration/V22__rename_tables_to_singular.sql`
|
||||
- 功能:将所有数据库表名从复数改为单数
|
||||
|
||||
### 2. 实体类 @TableName 注解更新
|
||||
更新了 36 个实体类的 `@TableName` 注解:
|
||||
|
||||
| 序号 | 原表名(复数) | 新表名(单数) | 实体类名 |
|
||||
|-----|---------------|---------------|---------|
|
||||
| 1 | `admin_users` | `admin_user` | `AdminUser` |
|
||||
| 2 | `tenants` | `tenant` | `Tenant` |
|
||||
| 3 | `teachers` | `teacher` | `Teacher` |
|
||||
| 4 | `students` | `student` | `Student` |
|
||||
| 5 | `parents` | `parent` | `Parent` |
|
||||
| 6 | `parent_students` | `parent_student` | `ParentStudent` |
|
||||
| 7 | `classes` | `clazz` | `Clazz` |
|
||||
| 8 | `class_teachers` | `class_teacher` | `ClassTeacher` |
|
||||
| 9 | `student_class_history` | `student_class_history` | `StudentClassHistory` (无需修改) |
|
||||
| 10 | `courses` | `course` | `Course` |
|
||||
| 11 | `course_versions` | `course_version` | `CourseVersion` |
|
||||
| 12 | `course_resources` | `course_resource` | `CourseResource` |
|
||||
| 13 | `course_scripts` | `course_script` | `CourseScript` |
|
||||
| 14 | `course_script_pages` | `course_script_page` | `CourseScriptPage` |
|
||||
| 15 | `course_activities` | `course_activity` | `CourseActivity` |
|
||||
| 16 | `course_packages` | `course_package` | `CoursePackage` |
|
||||
| 17 | `school_courses` | `school_course` | `SchoolCourse` |
|
||||
| 18 | `tenant_courses` | `tenant_course` | `TenantCourse` |
|
||||
| 19 | `lessons` | `lesson` | `Lesson` |
|
||||
| 20 | `lesson_feedbacks` | `lesson_feedback` | `LessonFeedback` |
|
||||
| 21 | `student_records` | `student_record` | `StudentRecord` |
|
||||
| 22 | `tasks` | `task` | `Task` |
|
||||
| 23 | `task_targets` | `task_target` | `TaskTarget` |
|
||||
| 24 | `task_completions` | `task_completion` | `TaskCompletion` |
|
||||
| 25 | `task_templates` | `task_template` | `TaskTemplate` |
|
||||
| 26 | `growth_records` | `growth_record` | `GrowthRecord` |
|
||||
| 27 | `resource_libraries` | `resource_library` | `ResourceLibrary` |
|
||||
| 28 | `resource_items` | `resource_item` | `ResourceItem` |
|
||||
| 29 | `schedule_plans` | `schedule_plan` | `SchedulePlan` |
|
||||
| 30 | `schedule_templates` | `schedule_template` | `ScheduleTemplate` |
|
||||
| 31 | `system_settings` | `system_setting` | `SystemSetting` |
|
||||
| 32 | `themes` | `theme` | `Theme` |
|
||||
| 33 | `tags` | `tag` | `Tag` |
|
||||
| 34 | `notifications` | `notification` | `Notification` |
|
||||
| 35 | `operation_logs` | `operation_log` | `OperationLog` |
|
||||
|
||||
### 3. Mapper 接口 SQL 更新
|
||||
更新了以下 Mapper 接口中的硬编码 SQL 表名:
|
||||
|
||||
| 文件 | 修改内容 |
|
||||
|-----|---------|
|
||||
| `ThemeMapper.java` | `DELETE FROM themes` → `DELETE FROM theme` |
|
||||
| `ParentMapper.java` | `DELETE FROM parents` → `DELETE FROM parent` |
|
||||
| `TenantMapper.java` | `DELETE FROM tenants` → `DELETE FROM tenant` (2 处) |
|
||||
| `TeacherMapper.java` | `DELETE FROM teachers` → `DELETE FROM teacher` |
|
||||
| `StudentMapper.java` | `DELETE FROM students` → `DELETE FROM student` |
|
||||
|
||||
## 部署步骤
|
||||
|
||||
### 步骤 1:备份数据库
|
||||
在执行迁移前,务必备份开发/生产数据库:
|
||||
```bash
|
||||
mysqldump -u root -p reading_platform > backup_$(date +%Y%m%d).sql
|
||||
```
|
||||
|
||||
### 步骤 2:执行 Flyway 迁移
|
||||
启动后端服务,Flyway 会自动执行 `V22__rename_tables_to_singular.sql` 迁移脚本。
|
||||
|
||||
或者手动执行:
|
||||
```bash
|
||||
mysql -u root -p reading_platform < reading-platform-java/src/main/resources/db/migration/V22__rename_tables_to_singular.sql
|
||||
```
|
||||
|
||||
### 步骤 3:验证迁移结果
|
||||
在 MySQL 中执行:
|
||||
```sql
|
||||
-- 查看所有表名
|
||||
SHOW TABLES;
|
||||
|
||||
-- 验证特定表是否存在
|
||||
SHOW TABLES LIKE 'student';
|
||||
SHOW TABLES LIKE 'student_record';
|
||||
SHOW TABLES LIKE 'lesson_feedback';
|
||||
```
|
||||
|
||||
### 步骤 4:测试功能
|
||||
启动后端服务后,测试以下功能:
|
||||
1. 用户管理(管理员、教师、学生、家长)
|
||||
2. 班级管理
|
||||
3. 课程管理
|
||||
4. 课时管理
|
||||
5. 任务管理
|
||||
6. 成长记录
|
||||
7. 资源管理
|
||||
8. 日程管理
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. **外键处理**:迁移脚本中先禁用外键检查(`SET FOREIGN_KEY_CHECKS = 0`),执行完后再启用
|
||||
2. **Flyway 历史**:确保 `flyway_schema_history` 表正确记录迁移历史
|
||||
3. **生产环境**:在生产环境执行前,务必在开发/测试环境充分测试
|
||||
4. **回滚方案**:如需回滚,可以准备反向迁移脚本(将单数表名改回复数)
|
||||
|
||||
## 相关文件清单
|
||||
|
||||
### 新增文件
|
||||
- `reading-platform-java/src/main/resources/db/migration/V22__rename_tables_to_singular.sql`
|
||||
|
||||
### 修改的文件
|
||||
- 所有 Entity 类(36 个文件)
|
||||
- 5 个 Mapper 接口
|
||||
|
||||
## 验证清单
|
||||
|
||||
- [x] 所有 Entity 类的 `@TableName` 注解已更新
|
||||
- [x] 所有 Mapper 接口的 SQL 已更新
|
||||
- [x] Controller 中无硬编码表名引用
|
||||
- [x] Service 中无硬编码表名引用
|
||||
- [x] Flyway 迁移脚本已创建
|
||||
|
||||
## 后续工作
|
||||
|
||||
1. 在开发环境执行迁移并验证
|
||||
2. 更新 API 文档中的表名引用(如有)
|
||||
3. 更新项目文档中的表名引用(如有)
|
||||
224
docs/限流功能使用说明.md
Normal file
224
docs/限流功能使用说明.md
Normal file
@ -0,0 +1,224 @@
|
||||
# 限流功能使用说明
|
||||
|
||||
## 功能概述
|
||||
|
||||
本项目已集成基于 Redis 滑动窗口算法的限流功能,支持两种使用方式:
|
||||
1. **配置化限流** - 在 `application.yml` 中配置规则,自动对所有接口生效
|
||||
2. **注解限流** - 在 Controller 方法上使用 `@RateLimit` 注解,针对特定接口限流
|
||||
|
||||
## 技术实现
|
||||
|
||||
### 核心组件
|
||||
|
||||
| 组件 | 说明 |
|
||||
|------|------|
|
||||
| `@RateLimit` | 限流注解,可自定义时间窗口、最大请求数 |
|
||||
| `RateLimitProperties` | 配置化限流的属性类 |
|
||||
| `RateLimiter` | Redis 限流工具类(滑动窗口算法) |
|
||||
| `RateLimitAspect` | 注解限流的 AOP 切面 |
|
||||
| `RateLimitInterceptor` | 配置化限流的拦截器 |
|
||||
| `ErrorCode.RATE_LIMIT_EXCEEDED` | 限流错误码(5001) |
|
||||
|
||||
### 限流优先级
|
||||
|
||||
**注解限流 > 配置化限流 > 默认限流**
|
||||
|
||||
## 使用方式
|
||||
|
||||
### 方式一:配置化限流(推荐作为基础防护)
|
||||
|
||||
在 `application.yml` 中配置:
|
||||
|
||||
```yaml
|
||||
rate-limit:
|
||||
enabled: true # 是否启用限流
|
||||
default-time-window: 60 # 默认时间窗口(秒)
|
||||
default-max-requests: 1000 # 默认时间窗口内最大请求数
|
||||
rules: # 限流规则列表
|
||||
# 登录接口限流 - 防止暴力破解
|
||||
- pattern: "/api/v1/auth/login"
|
||||
time-window: 60
|
||||
max-requests: 10
|
||||
# 验证码接口限流 - 防止刷验证码
|
||||
- pattern: "/api/v1/auth/captcha"
|
||||
time-window: 60
|
||||
max-requests: 5
|
||||
# 短信接口限流 - 防止短信轰炸
|
||||
- pattern: "/api/v1/sms/**"
|
||||
time-window: 60
|
||||
max-requests: 3
|
||||
# 文件上传接口限流
|
||||
- pattern: "/api/v1/**/upload/**"
|
||||
time-window: 60
|
||||
max-requests: 30
|
||||
exclude-patterns: # 排除限流的接口
|
||||
- "/doc.html"
|
||||
- "/swagger-resources/**"
|
||||
- "/v3/api-docs/**"
|
||||
- "/webjars/**"
|
||||
- "/uploads/**"
|
||||
```
|
||||
|
||||
### 方式二:注解限流(针对特殊接口)
|
||||
|
||||
在 Controller 方法上添加 `@RateLimit` 注解:
|
||||
|
||||
```java
|
||||
package com.reading.platform.controller.auth;
|
||||
|
||||
import com.reading.platform.common.annotation.RateLimit;
|
||||
import com.reading.platform.common.response.Result;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/api/v1/auth")
|
||||
public class AuthController {
|
||||
|
||||
/**
|
||||
* 登录接口 - 限流防止暴力破解
|
||||
* 60 秒内最多 10 次请求
|
||||
*/
|
||||
@PostMapping("/login")
|
||||
@RateLimit(time = 60, maxRequests = 10, message = "登录过于频繁,请稍后再试")
|
||||
public Result<LoginResponse> login(@RequestBody LoginRequest request) {
|
||||
// ... 登录逻辑
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送短信验证码 - 严格限流
|
||||
* 60 秒内最多 3 次请求
|
||||
*/
|
||||
@PostMapping("/captcha")
|
||||
@RateLimit(time = 60, maxRequests = 3, message = "操作过于频繁,请稍后再试")
|
||||
public Result<Void> sendCaptcha(@RequestParam String phone) {
|
||||
// ... 发送验证码逻辑
|
||||
}
|
||||
|
||||
/**
|
||||
* 自定义限流键前缀
|
||||
* 适用于需要按用户 ID 等特殊维度限流的场景
|
||||
*/
|
||||
@PostMapping("/special")
|
||||
@RateLimit(keyPrefix = "special_api:", time = 60, maxRequests = 5)
|
||||
public Result<Void> specialApi() {
|
||||
// ... 特殊接口逻辑
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 常见限流场景建议值
|
||||
|
||||
| 接口类型 | 时间窗口 | 最大请求数 | 说明 |
|
||||
|---------|---------|-----------|------|
|
||||
| 登录接口 | 60 秒 | 10 | 防止暴力破解 |
|
||||
| 验证码/短信 | 60 秒 | 3-5 | 防止短信轰炸 |
|
||||
| 文件上传 | 60 秒 | 30 | 防止资源滥用 |
|
||||
| 普通业务接口 | 60 秒 | 100-1000 | 根据业务调整 |
|
||||
| 导出接口 | 60 秒 | 5-10 | 防止服务器过载 |
|
||||
|
||||
## 限流响应
|
||||
|
||||
当请求被限流拦截时,返回:
|
||||
|
||||
**配置化限流响应:**
|
||||
```json
|
||||
{
|
||||
"code": 5001,
|
||||
"message": "请求过于频繁,请稍后再试",
|
||||
"data": null
|
||||
}
|
||||
```
|
||||
|
||||
HTTP 状态码:`429 Too Many Requests`
|
||||
|
||||
响应头:
|
||||
```
|
||||
X-RateLimit-Limit: 1
|
||||
X-RateLimit-Remaining: 0
|
||||
Retry-After: 60
|
||||
```
|
||||
|
||||
**注解限流响应:**
|
||||
```json
|
||||
{
|
||||
"code": 5001,
|
||||
"message": "登录过于频繁,请稍后再试",
|
||||
"data": null
|
||||
}
|
||||
```
|
||||
|
||||
## Redis 数据结构
|
||||
|
||||
限流使用 Redis 的 `Sorted Set`(有序集合)存储:
|
||||
|
||||
- **Key 格式**: `rate_limit:{key}`
|
||||
- **Member**: 时间戳(毫秒)
|
||||
- **Score**: 时间戳(毫秒)
|
||||
|
||||
示例:
|
||||
```
|
||||
rate_limit:192.168.1.1:/api/v1/auth/login
|
||||
|- 1710000000000
|
||||
|- 1710000001000
|
||||
|- 1710000002000
|
||||
```
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. **Redis 依赖**: 限流功能依赖 Redis,需确保 Redis 服务可用
|
||||
2. **异常情况放行**: 当 Redis 不可用时,系统会自动放行请求,避免影响正常业务
|
||||
3. **集群部署**: 滑动窗口算法天然支持分布式,无需额外配置
|
||||
4. **监控告警**: 建议添加限流触发的监控告警,及时发现异常流量
|
||||
|
||||
## 日志示例
|
||||
|
||||
```
|
||||
2024-03-10 22:00:00 WARN - 请求被限流拦截:URI=/api/v1/auth/login, 规则=/api/v1/auth/login, 最大请求数=10
|
||||
2024-03-10 22:00:01 DEBUG - 请求通过限流检查:URI=/api/v1/users, 规则=default
|
||||
```
|
||||
|
||||
## 测试方法
|
||||
|
||||
使用 `curl` 或 Postman 快速测试:
|
||||
|
||||
```bash
|
||||
# 循环发送 15 次登录请求(第 11 次开始应该被限流)
|
||||
for i in {1..15}; do
|
||||
echo "请求 $i:"
|
||||
curl -X POST http://localhost:8080/api/v1/auth/login \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"username":"test","password":"test"}' \
|
||||
-w "\nHTTP 状态码:%{http_code}\n\n"
|
||||
done
|
||||
```
|
||||
|
||||
## 配置说明
|
||||
|
||||
### RateLimit 注解参数
|
||||
|
||||
| 参数 | 类型 | 默认值 | 说明 |
|
||||
|------|------|--------|------|
|
||||
| `keyPrefix` | String | "" | 限流键前缀,默认使用 `IP:类名。方法名` |
|
||||
| `time` | long | 60 | 时间窗口大小 |
|
||||
| `timeUnit` | TimeUnit | SECONDS | 时间单位 |
|
||||
| `maxRequests` | long | 100 | 时间窗口内最大请求数 |
|
||||
| `message` | String | "请求过于频繁,请稍后再试" | 限流提示信息 |
|
||||
| `enabled` | boolean | true | 是否启用限流 |
|
||||
|
||||
### application.yml 配置参数
|
||||
|
||||
| 参数 | 类型 | 默认值 | 说明 |
|
||||
|------|------|--------|------|
|
||||
| `enabled` | boolean | true | 是否启用限流 |
|
||||
| `default-time-window` | long | 60 | 默认时间窗口(秒) |
|
||||
| `default-max-requests` | long | 1000 | 默认最大请求数 |
|
||||
| `rules` | List | [] | 限流规则列表 |
|
||||
| `exclude-patterns` | List | [] | 排除限流的接口路径 |
|
||||
|
||||
### RateLimitRule 配置参数
|
||||
|
||||
| 参数 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| `pattern` | String | 接口路径(支持 Ant 风格通配符) |
|
||||
| `time-window` | long | 时间窗口(秒) |
|
||||
| `max-requests` | long | 最大请求数 |
|
||||
File diff suppressed because it is too large
Load Diff
@ -163,6 +163,42 @@ export interface AdminSettings {
|
||||
notifyBeforeDays?: number;
|
||||
}
|
||||
|
||||
export interface AdminSettingsUpdateRequest {
|
||||
systemName?: string;
|
||||
systemDesc?: string;
|
||||
contactPhone?: string;
|
||||
contactEmail?: string;
|
||||
systemLogo?: string;
|
||||
passwordStrength?: string;
|
||||
maxLoginAttempts?: number;
|
||||
tokenExpire?: string;
|
||||
forceHttps?: boolean;
|
||||
emailEnabled?: boolean;
|
||||
smtpHost?: string;
|
||||
smtpPort?: number;
|
||||
smtpUser?: string;
|
||||
smtpPassword?: string;
|
||||
fromEmail?: string;
|
||||
smsEnabled?: boolean;
|
||||
storageType?: string;
|
||||
maxFileSize?: number;
|
||||
allowedTypes?: string;
|
||||
defaultTeacherQuota?: number;
|
||||
defaultStudentQuota?: number;
|
||||
enableAutoExpire?: boolean;
|
||||
notifyBeforeDays?: number;
|
||||
}
|
||||
|
||||
export interface TenantStatusUpdateRequest {
|
||||
status: string;
|
||||
}
|
||||
|
||||
export interface TenantQuotaUpdateRequest {
|
||||
packageType?: string;
|
||||
teacherQuota?: number;
|
||||
studentQuota?: number;
|
||||
}
|
||||
|
||||
// ==================== 租户管理 ====================
|
||||
|
||||
export const getTenants = (params: TenantQueryParams) =>
|
||||
@ -183,8 +219,8 @@ export const updateTenant = (id: number, data: UpdateTenantDto) =>
|
||||
export const updateTenantQuota = (id: number, data: UpdateTenantQuotaDto) =>
|
||||
http.put<Tenant>(`/admin/tenants/${id}/quota`, data);
|
||||
|
||||
export const updateTenantStatus = (id: number, status: string) =>
|
||||
http.put<{ id: number; name: string; status: string }>(`/admin/tenants/${id}/status`, { status });
|
||||
export const updateTenantStatus = (id: number, data: TenantStatusUpdateRequest) =>
|
||||
http.put<{ id: number; name: string; status: string }>(`/admin/tenants/${id}/status`, data);
|
||||
|
||||
export const resetTenantPassword = (id: number) =>
|
||||
http.post<{ tempPassword: string }>(`/admin/tenants/${id}/reset-password`);
|
||||
@ -211,5 +247,5 @@ export const getPopularCourses = (limit?: number) =>
|
||||
export const getAdminSettings = () =>
|
||||
http.get<AdminSettings>('/admin/settings');
|
||||
|
||||
export const updateAdminSettings = (data: Record<string, any>) =>
|
||||
export const updateAdminSettings = (data: AdminSettingsUpdateRequest) =>
|
||||
http.put<AdminSettings>('/admin/settings', data);
|
||||
|
||||
@ -16,10 +16,14 @@ import type {
|
||||
CourseLesson,
|
||||
CoursePackage,
|
||||
CourseUpdateRequest,
|
||||
CreateTaskFromTemplateRequest,
|
||||
DeleteFileParams,
|
||||
GetActiveTeachersParams,
|
||||
GetActiveTenantsParams,
|
||||
GetActivitiesParams,
|
||||
GetClassPageParams,
|
||||
GetCompletions1Params,
|
||||
GetCompletionsParams,
|
||||
GetCoursePage1Params,
|
||||
GetCoursePageParams,
|
||||
GetCourses1Params,
|
||||
@ -28,16 +32,21 @@ import type {
|
||||
GetGrowthRecordPageParams,
|
||||
GetGrowthRecordsByStudentParams,
|
||||
GetItemsParams,
|
||||
GetLessonTrendParams,
|
||||
GetLibrariesParams,
|
||||
GetLogs1Params,
|
||||
GetLogsParams,
|
||||
GetMonthlyStats1Params,
|
||||
GetMonthlyStatsParams,
|
||||
GetMyLessonsParams,
|
||||
GetMyNotifications1Params,
|
||||
GetMyNotifications2Params,
|
||||
GetMyNotificationsParams,
|
||||
GetPackages1Params,
|
||||
GetPackagesParams,
|
||||
GetParentPageParams,
|
||||
GetPopularCoursesParams,
|
||||
GetRecentActivitiesParams,
|
||||
GetRecentGrowthRecordsParams,
|
||||
GetReviewCoursePageParams,
|
||||
GetSchedulePlans1Params,
|
||||
@ -48,8 +57,11 @@ import type {
|
||||
GetTaskPageParams,
|
||||
GetTasksByStudentParams,
|
||||
GetTeacherPageParams,
|
||||
GetTemplates1Params,
|
||||
GetTemplatesParams,
|
||||
GetTenantPageParams,
|
||||
GetThemesParams,
|
||||
GetTimetableParams,
|
||||
GrowthRecordCreateRequest,
|
||||
GrowthRecordUpdateRequest,
|
||||
LessonCreateRequest,
|
||||
@ -74,6 +86,7 @@ import type {
|
||||
ResultListLesson,
|
||||
ResultListMapStringObject,
|
||||
ResultListResourceLibrary,
|
||||
ResultListSchedulePlan,
|
||||
ResultListStudent,
|
||||
ResultListTenantResponse,
|
||||
ResultListTheme,
|
||||
@ -96,6 +109,8 @@ import type {
|
||||
ResultPageResultSchoolCourse,
|
||||
ResultPageResultStudent,
|
||||
ResultPageResultTask,
|
||||
ResultPageResultTaskCompletion,
|
||||
ResultPageResultTaskTemplate,
|
||||
ResultPageResultTeacher,
|
||||
ResultPageResultTenant,
|
||||
ResultParent,
|
||||
@ -106,6 +121,8 @@ import type {
|
||||
ResultSchoolCourse,
|
||||
ResultStudent,
|
||||
ResultTask,
|
||||
ResultTaskCompletion,
|
||||
ResultTaskTemplate,
|
||||
ResultTeacher,
|
||||
ResultTenant,
|
||||
ResultTheme,
|
||||
@ -113,17 +130,23 @@ import type {
|
||||
ResultVoid,
|
||||
ReviewPackageBody,
|
||||
SchedulePlan,
|
||||
SchedulePlanCreateRequest,
|
||||
ScheduleTemplate,
|
||||
ScheduleTemplateApplyRequest,
|
||||
SchoolCourse,
|
||||
StudentCreateRequest,
|
||||
StudentUpdateRequest,
|
||||
TaskCreateRequest,
|
||||
TaskTemplateCreateRequest,
|
||||
TaskTemplateUpdateRequest,
|
||||
TaskUpdateRequest,
|
||||
TeacherCreateRequest,
|
||||
TeacherUpdateRequest,
|
||||
TenantCreateRequest,
|
||||
TenantUpdateRequest,
|
||||
Theme,
|
||||
UpdateCompletion1Params,
|
||||
UpdateCompletionParams,
|
||||
UpdateSettings1Body,
|
||||
UpdateSettingsBody,
|
||||
UpdateTenantQuotaBody,
|
||||
@ -134,7 +157,22 @@ import type {
|
||||
import { request } from '../request';
|
||||
export const getReadingPlatformAPI = () => {
|
||||
/**
|
||||
* @summary 根据ID获取任务
|
||||
* @summary 更新任务完成状态
|
||||
*/
|
||||
const updateCompletion = (
|
||||
taskId: number,
|
||||
studentId: number,
|
||||
params: UpdateCompletionParams,
|
||||
) => {
|
||||
return request<ResultTaskCompletion>(
|
||||
{url: `/api/v1/teacher/tasks/${taskId}/completions/${studentId}`, method: 'PUT',
|
||||
params
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @summary 根据 ID 获取任务
|
||||
*/
|
||||
const getTask = (
|
||||
id: number,
|
||||
@ -278,7 +316,22 @@ const deleteTeacher = (
|
||||
}
|
||||
|
||||
/**
|
||||
* @summary 根据ID获取任务
|
||||
* @summary 更新任务完成状态
|
||||
*/
|
||||
const updateCompletion1 = (
|
||||
taskId: number,
|
||||
studentId: number,
|
||||
params: UpdateCompletion1Params,
|
||||
) => {
|
||||
return request<ResultTaskCompletion>(
|
||||
{url: `/api/v1/school/tasks/${taskId}/completions/${studentId}`, method: 'PUT',
|
||||
params
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @summary 根据 ID 获取任务
|
||||
*/
|
||||
const getTask1 = (
|
||||
id: number,
|
||||
@ -316,6 +369,45 @@ const deleteTask1 = (
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @summary 根据 ID 获取任务模板
|
||||
*/
|
||||
const getTemplate1 = (
|
||||
id: number,
|
||||
) => {
|
||||
return request<ResultTaskTemplate>(
|
||||
{url: `/api/v1/school/tasks/task-templates/${id}`, method: 'GET'
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @summary 更新任务模板
|
||||
*/
|
||||
const updateTemplate = (
|
||||
id: number,
|
||||
taskTemplateUpdateRequest: TaskTemplateUpdateRequest,
|
||||
) => {
|
||||
return request<ResultTaskTemplate>(
|
||||
{url: `/api/v1/school/tasks/task-templates/${id}`, method: 'PUT',
|
||||
headers: {'Content-Type': 'application/json', },
|
||||
data: taskTemplateUpdateRequest
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @summary 删除任务模板
|
||||
*/
|
||||
const deleteTemplate = (
|
||||
id: number,
|
||||
) => {
|
||||
return request<ResultVoid>(
|
||||
{url: `/api/v1/school/tasks/task-templates/${id}`, method: 'DELETE'
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @summary 根据ID获取学生
|
||||
*/
|
||||
@ -421,7 +513,7 @@ const deleteCourse = (
|
||||
}
|
||||
|
||||
/**
|
||||
* @summary 根据ID获取课表计划
|
||||
* @summary 根据 ID 获取课表计划
|
||||
*/
|
||||
const getSchedulePlan1 = (
|
||||
id: number,
|
||||
@ -459,6 +551,45 @@ const deleteSchedulePlan = (
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @summary 根据 ID 获取课表模板
|
||||
*/
|
||||
const getScheduleTemplate = (
|
||||
id: number,
|
||||
) => {
|
||||
return request<ResultScheduleTemplate>(
|
||||
{url: `/api/v1/school/schedules/templates/${id}`, method: 'GET'
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @summary 更新课表模板
|
||||
*/
|
||||
const updateScheduleTemplate = (
|
||||
id: number,
|
||||
scheduleTemplate: ScheduleTemplate,
|
||||
) => {
|
||||
return request<ResultScheduleTemplate>(
|
||||
{url: `/api/v1/school/schedules/templates/${id}`, method: 'PUT',
|
||||
headers: {'Content-Type': 'application/json', },
|
||||
data: scheduleTemplate
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @summary 删除课表模板
|
||||
*/
|
||||
const deleteScheduleTemplate = (
|
||||
id: number,
|
||||
) => {
|
||||
return request<ResultVoid>(
|
||||
{url: `/api/v1/school/schedules/templates/${id}`, method: 'DELETE'
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @summary Get parent by ID
|
||||
*/
|
||||
@ -950,6 +1081,20 @@ const createTask = (
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @summary 从模板创建任务
|
||||
*/
|
||||
const createFromTemplate = (
|
||||
createTaskFromTemplateRequest: CreateTaskFromTemplateRequest,
|
||||
) => {
|
||||
return request<ResultTask>(
|
||||
{url: `/api/v1/teacher/tasks/from-template`, method: 'POST',
|
||||
headers: {'Content-Type': 'application/json', },
|
||||
data: createTaskFromTemplateRequest
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @summary 标记通知为已读
|
||||
*/
|
||||
@ -1132,6 +1277,47 @@ const createTask1 = (
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @summary 获取任务模板列表
|
||||
*/
|
||||
const getTemplates1 = (
|
||||
params?: GetTemplates1Params,
|
||||
) => {
|
||||
return request<ResultPageResultTaskTemplate>(
|
||||
{url: `/api/v1/school/tasks/task-templates`, method: 'GET',
|
||||
params
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @summary 创建任务模板
|
||||
*/
|
||||
const createTemplate = (
|
||||
taskTemplateCreateRequest: TaskTemplateCreateRequest,
|
||||
) => {
|
||||
return request<ResultTaskTemplate>(
|
||||
{url: `/api/v1/school/tasks/task-templates`, method: 'POST',
|
||||
headers: {'Content-Type': 'application/json', },
|
||||
data: taskTemplateCreateRequest
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @summary 从模板创建任务
|
||||
*/
|
||||
const createFromTemplate1 = (
|
||||
createTaskFromTemplateRequest: CreateTaskFromTemplateRequest,
|
||||
) => {
|
||||
return request<ResultTask>(
|
||||
{url: `/api/v1/school/tasks/from-template`, method: 'POST',
|
||||
headers: {'Content-Type': 'application/json', },
|
||||
data: createTaskFromTemplateRequest
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @summary 获取学生分页
|
||||
*/
|
||||
@ -1159,6 +1345,20 @@ const createStudent = (
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @summary 批量导入学生
|
||||
*/
|
||||
const importStudents = (
|
||||
studentCreateRequest: StudentCreateRequest[],
|
||||
) => {
|
||||
return request<ResultListStudent>(
|
||||
{url: `/api/v1/school/students/import`, method: 'POST',
|
||||
headers: {'Content-Type': 'application/json', },
|
||||
data: studentCreateRequest
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @summary 获取校本课程
|
||||
*/
|
||||
@ -1203,12 +1403,12 @@ const getSchedulePlans1 = (
|
||||
* @summary 创建课表计划
|
||||
*/
|
||||
const createSchedulePlan = (
|
||||
schedulePlan: SchedulePlan,
|
||||
schedulePlanCreateRequest: SchedulePlanCreateRequest,
|
||||
) => {
|
||||
return request<ResultSchedulePlan>(
|
||||
{url: `/api/v1/school/schedules`, method: 'POST',
|
||||
headers: {'Content-Type': 'application/json', },
|
||||
data: schedulePlan
|
||||
data: schedulePlanCreateRequest
|
||||
},
|
||||
);
|
||||
}
|
||||
@ -1240,6 +1440,35 @@ const createScheduleTemplate = (
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @summary 应用课表模板
|
||||
*/
|
||||
const applyScheduleTemplate = (
|
||||
id: number,
|
||||
scheduleTemplateApplyRequest: ScheduleTemplateApplyRequest,
|
||||
) => {
|
||||
return request<ResultListSchedulePlan>(
|
||||
{url: `/api/v1/school/schedules/templates/${id}/apply`, method: 'POST',
|
||||
headers: {'Content-Type': 'application/json', },
|
||||
data: scheduleTemplateApplyRequest
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @summary 批量创建排课
|
||||
*/
|
||||
const batchCreateSchedules = (
|
||||
schedulePlanCreateRequest: SchedulePlanCreateRequest[],
|
||||
) => {
|
||||
return request<ResultListSchedulePlan>(
|
||||
{url: `/api/v1/school/schedules/batch`, method: 'POST',
|
||||
headers: {'Content-Type': 'application/json', },
|
||||
data: schedulePlanCreateRequest
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @summary 获取家长分页
|
||||
*/
|
||||
@ -1309,6 +1538,30 @@ const resetPassword1 = (
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @summary 标记通知为已读
|
||||
*/
|
||||
const markAsRead1 = (
|
||||
id: number,
|
||||
) => {
|
||||
return request<ResultVoid>(
|
||||
{url: `/api/v1/school/notifications/${id}/read`, method: 'POST'
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @summary 标记所有通知为已读
|
||||
*/
|
||||
const markAllAsRead1 = (
|
||||
|
||||
) => {
|
||||
return request<ResultVoid>(
|
||||
{url: `/api/v1/school/notifications/read-all`, method: 'POST'
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @summary 获取成长档案分页
|
||||
*/
|
||||
@ -1410,7 +1663,7 @@ const completeTask = (
|
||||
/**
|
||||
* @summary 标记通知为已读
|
||||
*/
|
||||
const markAsRead1 = (
|
||||
const markAsRead2 = (
|
||||
id: number,
|
||||
) => {
|
||||
return request<ResultVoid>(
|
||||
@ -1422,7 +1675,7 @@ const markAsRead1 = (
|
||||
/**
|
||||
* @summary 标记所有通知为已读
|
||||
*/
|
||||
const markAllAsRead1 = (
|
||||
const markAllAsRead2 = (
|
||||
|
||||
) => {
|
||||
return request<ResultVoid>(
|
||||
@ -1862,6 +2115,106 @@ const createLesson1 = (
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @summary 获取任务完成情况分页
|
||||
*/
|
||||
const getCompletions = (
|
||||
id: number,
|
||||
params?: GetCompletionsParams,
|
||||
) => {
|
||||
return request<ResultPageResultTaskCompletion>(
|
||||
{url: `/api/v1/teacher/tasks/${id}/completions`, method: 'GET',
|
||||
params
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @summary 获取任务模板列表
|
||||
*/
|
||||
const getTemplates = (
|
||||
params?: GetTemplatesParams,
|
||||
) => {
|
||||
return request<ResultPageResultTaskTemplate>(
|
||||
{url: `/api/v1/teacher/tasks/task-templates`, method: 'GET',
|
||||
params
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @summary 根据 ID 获取任务模板
|
||||
*/
|
||||
const getTemplate = (
|
||||
id: number,
|
||||
) => {
|
||||
return request<ResultTaskTemplate>(
|
||||
{url: `/api/v1/teacher/tasks/task-templates/${id}`, method: 'GET'
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @summary 获取默认模板(按类型)
|
||||
*/
|
||||
const getDefaultTemplate = (
|
||||
taskType: string,
|
||||
) => {
|
||||
return request<ResultTaskTemplate>(
|
||||
{url: `/api/v1/teacher/tasks/task-templates/default/${taskType}`, method: 'GET'
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @summary 获取任务统计数据
|
||||
*/
|
||||
const getStats = (
|
||||
|
||||
) => {
|
||||
return request<ResultMapStringObject>(
|
||||
{url: `/api/v1/teacher/tasks/stats`, method: 'GET'
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @summary 获取月度统计趋势
|
||||
*/
|
||||
const getMonthlyStats = (
|
||||
params?: GetMonthlyStatsParams,
|
||||
) => {
|
||||
return request<ResultListMapStringObject>(
|
||||
{url: `/api/v1/teacher/tasks/stats/monthly`, method: 'GET',
|
||||
params
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @summary 按任务类型统计
|
||||
*/
|
||||
const getStatsByType = (
|
||||
|
||||
) => {
|
||||
return request<ResultMapStringObject>(
|
||||
{url: `/api/v1/teacher/tasks/stats/by-type`, method: 'GET'
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @summary 按班级统计
|
||||
*/
|
||||
const getStatsByClass = (
|
||||
|
||||
) => {
|
||||
return request<ResultListMapStringObject>(
|
||||
{url: `/api/v1/teacher/tasks/stats/by-class`, method: 'GET'
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @summary 获取校本课程
|
||||
*/
|
||||
@ -2059,10 +2412,97 @@ const getAllCourses = (
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @summary 获取任务完成情况分页
|
||||
*/
|
||||
const getCompletions1 = (
|
||||
id: number,
|
||||
params?: GetCompletions1Params,
|
||||
) => {
|
||||
return request<ResultPageResultTaskCompletion>(
|
||||
{url: `/api/v1/school/tasks/${id}/completions`, method: 'GET',
|
||||
params
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @summary 获取默认模板(按类型)
|
||||
*/
|
||||
const getDefaultTemplate1 = (
|
||||
taskType: string,
|
||||
) => {
|
||||
return request<ResultTaskTemplate>(
|
||||
{url: `/api/v1/school/tasks/task-templates/default/${taskType}`, method: 'GET'
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @summary 获取任务统计数据
|
||||
*/
|
||||
const getStats1 = (
|
||||
|
||||
) => {
|
||||
return request<ResultMapStringObject>(
|
||||
{url: `/api/v1/school/tasks/stats`, method: 'GET'
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @summary 获取月度统计趋势
|
||||
*/
|
||||
const getMonthlyStats1 = (
|
||||
params?: GetMonthlyStats1Params,
|
||||
) => {
|
||||
return request<ResultListMapStringObject>(
|
||||
{url: `/api/v1/school/tasks/stats/monthly`, method: 'GET',
|
||||
params
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @summary 按任务类型统计
|
||||
*/
|
||||
const getStatsByType1 = (
|
||||
|
||||
) => {
|
||||
return request<ResultMapStringObject>(
|
||||
{url: `/api/v1/school/tasks/stats/by-type`, method: 'GET'
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @summary 按班级统计
|
||||
*/
|
||||
const getStatsByClass1 = (
|
||||
|
||||
) => {
|
||||
return request<ResultListMapStringObject>(
|
||||
{url: `/api/v1/school/tasks/stats/by-class`, method: 'GET'
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @summary 获取导入模板
|
||||
*/
|
||||
const getImportTemplate = (
|
||||
|
||||
) => {
|
||||
return request<ResultMapStringObject>(
|
||||
{url: `/api/v1/school/students/import/template`, method: 'GET'
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @summary 获取学校统计数据
|
||||
*/
|
||||
const getStats = (
|
||||
const getStats2 = (
|
||||
|
||||
) => {
|
||||
return request<ResultMapStringObject>(
|
||||
@ -2071,6 +2511,82 @@ const getStats = (
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @summary 获取活跃教师统计
|
||||
*/
|
||||
const getActiveTeachers = (
|
||||
params?: GetActiveTeachersParams,
|
||||
) => {
|
||||
return request<ResultListMapStringObject>(
|
||||
{url: `/api/v1/school/stats/teachers`, method: 'GET',
|
||||
params
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @summary 获取课时趋势(最近 N 个月)
|
||||
*/
|
||||
const getLessonTrend = (
|
||||
params?: GetLessonTrendParams,
|
||||
) => {
|
||||
return request<ResultListMapStringObject>(
|
||||
{url: `/api/v1/school/stats/lesson-trend`, method: 'GET',
|
||||
params
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @summary 获取课程使用统计
|
||||
*/
|
||||
const getCourseUsageStats = (
|
||||
|
||||
) => {
|
||||
return request<ResultListMapStringObject>(
|
||||
{url: `/api/v1/school/stats/courses`, method: 'GET'
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @summary 获取课程分布统计(饼图数据)
|
||||
*/
|
||||
const getCourseDistribution = (
|
||||
|
||||
) => {
|
||||
return request<ResultListMapStringObject>(
|
||||
{url: `/api/v1/school/stats/course-distribution`, method: 'GET'
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @summary 获取最近活动记录
|
||||
*/
|
||||
const getRecentActivities = (
|
||||
params?: GetRecentActivitiesParams,
|
||||
) => {
|
||||
return request<ResultListMapStringObject>(
|
||||
{url: `/api/v1/school/stats/activities`, method: 'GET',
|
||||
params
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @summary 获取课表(按日期范围)
|
||||
*/
|
||||
const getTimetable = (
|
||||
params?: GetTimetableParams,
|
||||
) => {
|
||||
return request<ResultListMapStringObject>(
|
||||
{url: `/api/v1/school/schedules/timetable`, method: 'GET',
|
||||
params
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @summary 获取学校操作日志
|
||||
*/
|
||||
@ -2084,6 +2600,43 @@ const getLogs = (
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @summary 获取我的通知
|
||||
*/
|
||||
const getMyNotifications1 = (
|
||||
params?: GetMyNotifications1Params,
|
||||
) => {
|
||||
return request<ResultPageResultNotification>(
|
||||
{url: `/api/v1/school/notifications`, method: 'GET',
|
||||
params
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @summary 根据 ID 获取通知
|
||||
*/
|
||||
const getNotification1 = (
|
||||
id: number,
|
||||
) => {
|
||||
return request<ResultNotification>(
|
||||
{url: `/api/v1/school/notifications/${id}`, method: 'GET'
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @summary 获取未读通知数量
|
||||
*/
|
||||
const getUnreadCount1 = (
|
||||
|
||||
) => {
|
||||
return request<ResultLong>(
|
||||
{url: `/api/v1/school/notifications/unread-count`, method: 'GET'
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @summary 导出教师信息到Excel
|
||||
*/
|
||||
@ -2186,8 +2739,8 @@ const getTasksByStudent = (
|
||||
/**
|
||||
* @summary 获取我的通知
|
||||
*/
|
||||
const getMyNotifications1 = (
|
||||
params?: GetMyNotifications1Params,
|
||||
const getMyNotifications2 = (
|
||||
params?: GetMyNotifications2Params,
|
||||
) => {
|
||||
return request<ResultPageResultNotification>(
|
||||
{url: `/api/v1/parent/notifications`, method: 'GET',
|
||||
@ -2199,7 +2752,7 @@ const getMyNotifications1 = (
|
||||
/**
|
||||
* @summary 根据ID获取通知
|
||||
*/
|
||||
const getNotification1 = (
|
||||
const getNotification2 = (
|
||||
id: number,
|
||||
) => {
|
||||
return request<ResultNotification>(
|
||||
@ -2211,7 +2764,7 @@ const getNotification1 = (
|
||||
/**
|
||||
* @summary 获取未读通知数量
|
||||
*/
|
||||
const getUnreadCount1 = (
|
||||
const getUnreadCount2 = (
|
||||
|
||||
) => {
|
||||
return request<ResultLong>(
|
||||
@ -2299,7 +2852,7 @@ const getAllActiveTenants = (
|
||||
/**
|
||||
* @summary 获取整体统计数据
|
||||
*/
|
||||
const getStats1 = (
|
||||
const getStats3 = (
|
||||
|
||||
) => {
|
||||
return request<ResultMapStringObject>(
|
||||
@ -2386,13 +2939,27 @@ const getReviewCoursePage = (
|
||||
}
|
||||
|
||||
/**
|
||||
* @summary 删除课表模板
|
||||
* @summary 移除班级教师
|
||||
*/
|
||||
const deleteScheduleTemplate = (
|
||||
const removeTeacher = (
|
||||
id: number,
|
||||
teacherId: number,
|
||||
) => {
|
||||
return request<ResultVoid>(
|
||||
{url: `/api/v1/school/schedules/templates/${id}`, method: 'DELETE'
|
||||
{url: `/api/v1/school/classes/${id}/teachers/${teacherId}`, method: 'DELETE'
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @summary 移除班级学生
|
||||
*/
|
||||
const removeStudent = (
|
||||
id: number,
|
||||
studentId: number,
|
||||
) => {
|
||||
return request<ResultVoid>(
|
||||
{url: `/api/v1/school/classes/${id}/students/${studentId}`, method: 'DELETE'
|
||||
},
|
||||
);
|
||||
}
|
||||
@ -2410,7 +2977,8 @@ const deleteFile = (
|
||||
);
|
||||
}
|
||||
|
||||
return {getTask,updateTask,deleteTask,getLesson,updateLesson,getGrowthRecord,updateGrowthRecord,deleteGrowthRecord,getTeacher,updateTeacher,deleteTeacher,getTask1,updateTask1,deleteTask1,getStudent,updateStudent,deleteStudent,getSettings,updateSettings,getCourse2,updateCourse,deleteCourse,getSchedulePlan1,updateSchedulePlan,deleteSchedulePlan,getParent,updateParent,deleteParent,getGrowthRecord1,updateGrowthRecord1,deleteGrowthRecord1,getClass,updateClass,deleteClass,getGrowthRecord2,updateGrowthRecord2,deleteGrowthRecord2,getTheme,updateTheme,deleteTheme,getTenant,updateTenant,deleteTenant,updateTenantStatus,updateTenantQuota,getSettings1,updateSettings1,updateLibrary,deleteLibrary,updateItem,deleteItem,getPackage1,updatePackage,deletePackage,getCourse3,updateCourse1,deleteCourse1,getLesson2,updateLesson1,deleteLesson,getTaskPage,createTask,markAsRead,markAllAsRead,getMyLessons,createLesson,startLesson,completeLesson,cancelLesson,getGrowthRecordPage,createGrowthRecord,getTeacherPage,createTeacher,resetPassword,getTaskPage1,createTask1,getStudentPage,createStudent,getCourses1,createCourse,getSchedulePlans1,createSchedulePlan,getScheduleTemplates,createScheduleTemplate,getParentPage,createParent,bindStudent,unbindStudent,resetPassword1,getGrowthRecordPage1,createGrowthRecord1,getClassPage,createClass,assignTeachers,assignStudents,completeTask,markAsRead1,markAllAsRead1,createGrowthRecord2,uploadFile,logout,login,changePassword,getThemes,createTheme,getTenantPage,createTenant,resetTenantPassword,getLibraries,createLibrary,getItems,createItem,getPackages1,createPackage,submitPackage,reviewPackage,publishPackage,offlinePackage,getCoursePage1,createCourse1,withdrawCourse,unpublishCourse,submitCourse,republishCourse,rejectCourse,publishCourse,directPublishCourse,archiveCourse,approveCourse,getLessons1,createLesson1,getCourses,getCourse,getSchedulePlans,getSchedulePlan,getMyNotifications,getNotification,getUnreadCount,getTodayLessons,getDashboard,getWeeklyLessons,getTodayLessons1,getCoursePage,getCourse1,getLessons,getLesson1,getAllCourses,getStats,getLogs,exportTeachers,exportStudents,exportLessons,exportGrowthRecords,getPackages,getPackage,getTask2,getTasksByStudent,getMyNotifications1,getNotification1,getUnreadCount1,getGrowthRecordsByStudent,getRecentGrowthRecords,getMyChildren,getChild,getCurrentUser,getAllActiveTenants,getStats1,getTrendData,getActiveTenants,getPopularCourses,getActivities,getLogs1,getReviewCoursePage,deleteScheduleTemplate,deleteFile}};
|
||||
return {updateCompletion,getTask,updateTask,deleteTask,getLesson,updateLesson,getGrowthRecord,updateGrowthRecord,deleteGrowthRecord,getTeacher,updateTeacher,deleteTeacher,updateCompletion1,getTask1,updateTask1,deleteTask1,getTemplate1,updateTemplate,deleteTemplate,getStudent,updateStudent,deleteStudent,getSettings,updateSettings,getCourse2,updateCourse,deleteCourse,getSchedulePlan1,updateSchedulePlan,deleteSchedulePlan,getScheduleTemplate,updateScheduleTemplate,deleteScheduleTemplate,getParent,updateParent,deleteParent,getGrowthRecord1,updateGrowthRecord1,deleteGrowthRecord1,getClass,updateClass,deleteClass,getGrowthRecord2,updateGrowthRecord2,deleteGrowthRecord2,getTheme,updateTheme,deleteTheme,getTenant,updateTenant,deleteTenant,updateTenantStatus,updateTenantQuota,getSettings1,updateSettings1,updateLibrary,deleteLibrary,updateItem,deleteItem,getPackage1,updatePackage,deletePackage,getCourse3,updateCourse1,deleteCourse1,getLesson2,updateLesson1,deleteLesson,getTaskPage,createTask,createFromTemplate,markAsRead,markAllAsRead,getMyLessons,createLesson,startLesson,completeLesson,cancelLesson,getGrowthRecordPage,createGrowthRecord,getTeacherPage,createTeacher,resetPassword,getTaskPage1,createTask1,getTemplates1,createTemplate,createFromTemplate1,getStudentPage,createStudent,importStudents,getCourses1,createCourse,getSchedulePlans1,createSchedulePlan,getScheduleTemplates,createScheduleTemplate,applyScheduleTemplate,batchCreateSchedules,getParentPage,createParent,bindStudent,unbindStudent,resetPassword1,markAsRead1,markAllAsRead1,getGrowthRecordPage1,createGrowthRecord1,getClassPage,createClass,assignTeachers,assignStudents,completeTask,markAsRead2,markAllAsRead2,createGrowthRecord2,uploadFile,logout,login,changePassword,getThemes,createTheme,getTenantPage,createTenant,resetTenantPassword,getLibraries,createLibrary,getItems,createItem,getPackages1,createPackage,submitPackage,reviewPackage,publishPackage,offlinePackage,getCoursePage1,createCourse1,withdrawCourse,unpublishCourse,submitCourse,republishCourse,rejectCourse,publishCourse,directPublishCourse,archiveCourse,approveCourse,getLessons1,createLesson1,getCompletions,getTemplates,getTemplate,getDefaultTemplate,getStats,getMonthlyStats,getStatsByType,getStatsByClass,getCourses,getCourse,getSchedulePlans,getSchedulePlan,getMyNotifications,getNotification,getUnreadCount,getTodayLessons,getDashboard,getWeeklyLessons,getTodayLessons1,getCoursePage,getCourse1,getLessons,getLesson1,getAllCourses,getCompletions1,getDefaultTemplate1,getStats1,getMonthlyStats1,getStatsByType1,getStatsByClass1,getImportTemplate,getStats2,getActiveTeachers,getLessonTrend,getCourseUsageStats,getCourseDistribution,getRecentActivities,getTimetable,getLogs,getMyNotifications1,getNotification1,getUnreadCount1,exportTeachers,exportStudents,exportLessons,exportGrowthRecords,getPackages,getPackage,getTask2,getTasksByStudent,getMyNotifications2,getNotification2,getUnreadCount2,getGrowthRecordsByStudent,getRecentGrowthRecords,getMyChildren,getChild,getCurrentUser,getAllActiveTenants,getStats3,getTrendData,getActiveTenants,getPopularCourses,getActivities,getLogs1,getReviewCoursePage,removeTeacher,removeStudent,deleteFile}};
|
||||
export type UpdateCompletionResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['updateCompletion']>>>
|
||||
export type GetTaskResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getTask']>>>
|
||||
export type UpdateTaskResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['updateTask']>>>
|
||||
export type DeleteTaskResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['deleteTask']>>>
|
||||
@ -2422,9 +2990,13 @@ export type DeleteGrowthRecordResult = NonNullable<Awaited<ReturnType<ReturnType
|
||||
export type GetTeacherResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getTeacher']>>>
|
||||
export type UpdateTeacherResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['updateTeacher']>>>
|
||||
export type DeleteTeacherResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['deleteTeacher']>>>
|
||||
export type UpdateCompletion1Result = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['updateCompletion1']>>>
|
||||
export type GetTask1Result = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getTask1']>>>
|
||||
export type UpdateTask1Result = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['updateTask1']>>>
|
||||
export type DeleteTask1Result = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['deleteTask1']>>>
|
||||
export type GetTemplate1Result = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getTemplate1']>>>
|
||||
export type UpdateTemplateResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['updateTemplate']>>>
|
||||
export type DeleteTemplateResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['deleteTemplate']>>>
|
||||
export type GetStudentResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getStudent']>>>
|
||||
export type UpdateStudentResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['updateStudent']>>>
|
||||
export type DeleteStudentResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['deleteStudent']>>>
|
||||
@ -2436,6 +3008,9 @@ export type DeleteCourseResult = NonNullable<Awaited<ReturnType<ReturnType<typeo
|
||||
export type GetSchedulePlan1Result = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getSchedulePlan1']>>>
|
||||
export type UpdateSchedulePlanResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['updateSchedulePlan']>>>
|
||||
export type DeleteSchedulePlanResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['deleteSchedulePlan']>>>
|
||||
export type GetScheduleTemplateResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getScheduleTemplate']>>>
|
||||
export type UpdateScheduleTemplateResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['updateScheduleTemplate']>>>
|
||||
export type DeleteScheduleTemplateResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['deleteScheduleTemplate']>>>
|
||||
export type GetParentResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getParent']>>>
|
||||
export type UpdateParentResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['updateParent']>>>
|
||||
export type DeleteParentResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['deleteParent']>>>
|
||||
@ -2473,6 +3048,7 @@ export type UpdateLesson1Result = NonNullable<Awaited<ReturnType<ReturnType<type
|
||||
export type DeleteLessonResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['deleteLesson']>>>
|
||||
export type GetTaskPageResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getTaskPage']>>>
|
||||
export type CreateTaskResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['createTask']>>>
|
||||
export type CreateFromTemplateResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['createFromTemplate']>>>
|
||||
export type MarkAsReadResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['markAsRead']>>>
|
||||
export type MarkAllAsReadResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['markAllAsRead']>>>
|
||||
export type GetMyLessonsResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getMyLessons']>>>
|
||||
@ -2487,19 +3063,27 @@ export type CreateTeacherResult = NonNullable<Awaited<ReturnType<ReturnType<type
|
||||
export type ResetPasswordResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['resetPassword']>>>
|
||||
export type GetTaskPage1Result = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getTaskPage1']>>>
|
||||
export type CreateTask1Result = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['createTask1']>>>
|
||||
export type GetTemplates1Result = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getTemplates1']>>>
|
||||
export type CreateTemplateResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['createTemplate']>>>
|
||||
export type CreateFromTemplate1Result = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['createFromTemplate1']>>>
|
||||
export type GetStudentPageResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getStudentPage']>>>
|
||||
export type CreateStudentResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['createStudent']>>>
|
||||
export type ImportStudentsResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['importStudents']>>>
|
||||
export type GetCourses1Result = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getCourses1']>>>
|
||||
export type CreateCourseResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['createCourse']>>>
|
||||
export type GetSchedulePlans1Result = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getSchedulePlans1']>>>
|
||||
export type CreateSchedulePlanResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['createSchedulePlan']>>>
|
||||
export type GetScheduleTemplatesResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getScheduleTemplates']>>>
|
||||
export type CreateScheduleTemplateResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['createScheduleTemplate']>>>
|
||||
export type ApplyScheduleTemplateResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['applyScheduleTemplate']>>>
|
||||
export type BatchCreateSchedulesResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['batchCreateSchedules']>>>
|
||||
export type GetParentPageResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getParentPage']>>>
|
||||
export type CreateParentResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['createParent']>>>
|
||||
export type BindStudentResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['bindStudent']>>>
|
||||
export type UnbindStudentResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['unbindStudent']>>>
|
||||
export type ResetPassword1Result = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['resetPassword1']>>>
|
||||
export type MarkAsRead1Result = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['markAsRead1']>>>
|
||||
export type MarkAllAsRead1Result = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['markAllAsRead1']>>>
|
||||
export type GetGrowthRecordPage1Result = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getGrowthRecordPage1']>>>
|
||||
export type CreateGrowthRecord1Result = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['createGrowthRecord1']>>>
|
||||
export type GetClassPageResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getClassPage']>>>
|
||||
@ -2507,8 +3091,8 @@ export type CreateClassResult = NonNullable<Awaited<ReturnType<ReturnType<typeof
|
||||
export type AssignTeachersResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['assignTeachers']>>>
|
||||
export type AssignStudentsResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['assignStudents']>>>
|
||||
export type CompleteTaskResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['completeTask']>>>
|
||||
export type MarkAsRead1Result = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['markAsRead1']>>>
|
||||
export type MarkAllAsRead1Result = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['markAllAsRead1']>>>
|
||||
export type MarkAsRead2Result = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['markAsRead2']>>>
|
||||
export type MarkAllAsRead2Result = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['markAllAsRead2']>>>
|
||||
export type CreateGrowthRecord2Result = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['createGrowthRecord2']>>>
|
||||
export type UploadFileResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['uploadFile']>>>
|
||||
export type LogoutResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['logout']>>>
|
||||
@ -2542,6 +3126,14 @@ export type ArchiveCourseResult = NonNullable<Awaited<ReturnType<ReturnType<type
|
||||
export type ApproveCourseResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['approveCourse']>>>
|
||||
export type GetLessons1Result = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getLessons1']>>>
|
||||
export type CreateLesson1Result = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['createLesson1']>>>
|
||||
export type GetCompletionsResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getCompletions']>>>
|
||||
export type GetTemplatesResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getTemplates']>>>
|
||||
export type GetTemplateResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getTemplate']>>>
|
||||
export type GetDefaultTemplateResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getDefaultTemplate']>>>
|
||||
export type GetStatsResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getStats']>>>
|
||||
export type GetMonthlyStatsResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getMonthlyStats']>>>
|
||||
export type GetStatsByTypeResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getStatsByType']>>>
|
||||
export type GetStatsByClassResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getStatsByClass']>>>
|
||||
export type GetCoursesResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getCourses']>>>
|
||||
export type GetCourseResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getCourse']>>>
|
||||
export type GetSchedulePlansResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getSchedulePlans']>>>
|
||||
@ -2558,8 +3150,24 @@ export type GetCourse1Result = NonNullable<Awaited<ReturnType<ReturnType<typeof
|
||||
export type GetLessonsResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getLessons']>>>
|
||||
export type GetLesson1Result = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getLesson1']>>>
|
||||
export type GetAllCoursesResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getAllCourses']>>>
|
||||
export type GetStatsResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getStats']>>>
|
||||
export type GetCompletions1Result = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getCompletions1']>>>
|
||||
export type GetDefaultTemplate1Result = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getDefaultTemplate1']>>>
|
||||
export type GetStats1Result = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getStats1']>>>
|
||||
export type GetMonthlyStats1Result = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getMonthlyStats1']>>>
|
||||
export type GetStatsByType1Result = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getStatsByType1']>>>
|
||||
export type GetStatsByClass1Result = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getStatsByClass1']>>>
|
||||
export type GetImportTemplateResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getImportTemplate']>>>
|
||||
export type GetStats2Result = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getStats2']>>>
|
||||
export type GetActiveTeachersResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getActiveTeachers']>>>
|
||||
export type GetLessonTrendResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getLessonTrend']>>>
|
||||
export type GetCourseUsageStatsResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getCourseUsageStats']>>>
|
||||
export type GetCourseDistributionResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getCourseDistribution']>>>
|
||||
export type GetRecentActivitiesResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getRecentActivities']>>>
|
||||
export type GetTimetableResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getTimetable']>>>
|
||||
export type GetLogsResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getLogs']>>>
|
||||
export type GetMyNotifications1Result = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getMyNotifications1']>>>
|
||||
export type GetNotification1Result = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getNotification1']>>>
|
||||
export type GetUnreadCount1Result = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getUnreadCount1']>>>
|
||||
export type ExportTeachersResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['exportTeachers']>>>
|
||||
export type ExportStudentsResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['exportStudents']>>>
|
||||
export type ExportLessonsResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['exportLessons']>>>
|
||||
@ -2568,21 +3176,22 @@ export type GetPackagesResult = NonNullable<Awaited<ReturnType<ReturnType<typeof
|
||||
export type GetPackageResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getPackage']>>>
|
||||
export type GetTask2Result = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getTask2']>>>
|
||||
export type GetTasksByStudentResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getTasksByStudent']>>>
|
||||
export type GetMyNotifications1Result = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getMyNotifications1']>>>
|
||||
export type GetNotification1Result = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getNotification1']>>>
|
||||
export type GetUnreadCount1Result = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getUnreadCount1']>>>
|
||||
export type GetMyNotifications2Result = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getMyNotifications2']>>>
|
||||
export type GetNotification2Result = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getNotification2']>>>
|
||||
export type GetUnreadCount2Result = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getUnreadCount2']>>>
|
||||
export type GetGrowthRecordsByStudentResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getGrowthRecordsByStudent']>>>
|
||||
export type GetRecentGrowthRecordsResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getRecentGrowthRecords']>>>
|
||||
export type GetMyChildrenResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getMyChildren']>>>
|
||||
export type GetChildResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getChild']>>>
|
||||
export type GetCurrentUserResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getCurrentUser']>>>
|
||||
export type GetAllActiveTenantsResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getAllActiveTenants']>>>
|
||||
export type GetStats1Result = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getStats1']>>>
|
||||
export type GetStats3Result = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getStats3']>>>
|
||||
export type GetTrendDataResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getTrendData']>>>
|
||||
export type GetActiveTenantsResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getActiveTenants']>>>
|
||||
export type GetPopularCoursesResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getPopularCourses']>>>
|
||||
export type GetActivitiesResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getActivities']>>>
|
||||
export type GetLogs1Result = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getLogs1']>>>
|
||||
export type GetReviewCoursePageResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['getReviewCoursePage']>>>
|
||||
export type DeleteScheduleTemplateResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['deleteScheduleTemplate']>>>
|
||||
export type RemoveTeacherResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['removeTeacher']>>>
|
||||
export type RemoveStudentResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['removeStudent']>>>
|
||||
export type DeleteFileResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getReadingPlatformAPI>['deleteFile']>>>
|
||||
|
||||
@ -0,0 +1,19 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* 活跃教师统计响应
|
||||
*/
|
||||
export interface ActiveTeacherStatsResponse {
|
||||
/** 教师 ID */
|
||||
id?: string;
|
||||
/** 教师姓名 */
|
||||
name?: string;
|
||||
/** 课时数 */
|
||||
lessonCount?: number;
|
||||
}
|
||||
@ -0,0 +1,59 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* 管理员设置更新请求
|
||||
*/
|
||||
export interface AdminSettingsUpdateRequest {
|
||||
/** 系统名称 */
|
||||
systemName?: string;
|
||||
/** 系统描述 */
|
||||
systemDesc?: string;
|
||||
/** 联系电话 */
|
||||
contactPhone?: string;
|
||||
/** 联系邮箱 */
|
||||
contactEmail?: string;
|
||||
/** 系统 Logo */
|
||||
systemLogo?: string;
|
||||
/** 密码强度 */
|
||||
passwordStrength?: string;
|
||||
/** 最大登录尝试次数 */
|
||||
maxLoginAttempts?: number;
|
||||
/** Token 过期时间 */
|
||||
tokenExpire?: string;
|
||||
/** 强制 HTTPS */
|
||||
forceHttps?: boolean;
|
||||
/** 邮箱启用 */
|
||||
emailEnabled?: boolean;
|
||||
/** SMTP 主机 */
|
||||
smtpHost?: string;
|
||||
/** SMTP 端口 */
|
||||
smtpPort?: number;
|
||||
/** SMTP 用户 */
|
||||
smtpUser?: string;
|
||||
/** SMTP 密码 */
|
||||
smtpPassword?: string;
|
||||
/** 发件人邮箱 */
|
||||
fromEmail?: string;
|
||||
/** 短信启用 */
|
||||
smsEnabled?: boolean;
|
||||
/** 存储类型 */
|
||||
storageType?: string;
|
||||
/** 最大文件大小 */
|
||||
maxFileSize?: number;
|
||||
/** 允许的文件类型 */
|
||||
allowedTypes?: string;
|
||||
/** 默认教师配额 */
|
||||
defaultTeacherQuota?: number;
|
||||
/** 默认学生配额 */
|
||||
defaultStudentQuota?: number;
|
||||
/** 启用自动过期 */
|
||||
enableAutoExpire?: boolean;
|
||||
/** 提前通知天数 */
|
||||
notifyBeforeDays?: number;
|
||||
}
|
||||
@ -0,0 +1,29 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* 管理员统计数据响应
|
||||
*/
|
||||
export interface AdminStatsResponse {
|
||||
/** 租户总数 */
|
||||
tenantCount?: number;
|
||||
/** 活跃租户数 */
|
||||
activeTenantCount?: number;
|
||||
/** 教师总数 */
|
||||
teacherCount?: number;
|
||||
/** 学生总数 */
|
||||
studentCount?: number;
|
||||
/** 课程总数 */
|
||||
courseCount?: number;
|
||||
/** 已发布课程数 */
|
||||
publishedCourseCount?: number;
|
||||
/** 课时总数 */
|
||||
lessonCount?: number;
|
||||
/** 本月课时数 */
|
||||
monthlyLessons?: number;
|
||||
}
|
||||
@ -0,0 +1,18 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* 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 BatchSaveStudentRecordResponse {
|
||||
/** 保存数量 */
|
||||
count?: number;
|
||||
/** 学生记录列表 */
|
||||
records?: StudentRecordResponse[];
|
||||
}
|
||||
@ -0,0 +1,12 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { BatchStudentRecordRequestRecordsItem } from './batchStudentRecordRequestRecordsItem';
|
||||
|
||||
export interface BatchStudentRecordRequest {
|
||||
records?: BatchStudentRecordRequestRecordsItem[];
|
||||
}
|
||||
@ -0,0 +1,9 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
export type BatchStudentRecordRequestRecordsItem = {[key: string]: { [key: string]: unknown }};
|
||||
@ -0,0 +1,31 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { ChildStats } from './childStats';
|
||||
import type { ClassInfo } from './classInfo';
|
||||
|
||||
/**
|
||||
* 孩子详情响应
|
||||
*/
|
||||
export interface ChildDetailResponse {
|
||||
/** 孩子 ID */
|
||||
id?: string;
|
||||
/** 孩子姓名 */
|
||||
name?: string;
|
||||
/** 性别 */
|
||||
gender?: string;
|
||||
/** 出生日期 */
|
||||
birthDate?: string;
|
||||
/** 阅读次数 */
|
||||
readingCount?: number;
|
||||
/** 课时数 */
|
||||
lessonCount?: number;
|
||||
stats?: ChildStats;
|
||||
classInfo?: ClassInfo;
|
||||
/** 关系 */
|
||||
relationship?: string;
|
||||
}
|
||||
@ -0,0 +1,29 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { ClassInfo } from './classInfo';
|
||||
|
||||
/**
|
||||
* 孩子信息响应
|
||||
*/
|
||||
export interface ChildInfoResponse {
|
||||
/** 孩子 ID */
|
||||
id?: string;
|
||||
/** 孩子姓名 */
|
||||
name?: string;
|
||||
/** 性别 */
|
||||
gender?: string;
|
||||
/** 出生日期 */
|
||||
birthDate?: string;
|
||||
/** 阅读次数 */
|
||||
readingCount?: number;
|
||||
/** 课时数 */
|
||||
lessonCount?: number;
|
||||
classInfo?: ClassInfo;
|
||||
/** 关系 */
|
||||
relationship?: string;
|
||||
}
|
||||
@ -0,0 +1,19 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* 孩子统计信息
|
||||
*/
|
||||
export interface ChildStats {
|
||||
/** 课时记录数 */
|
||||
lessonRecords?: number;
|
||||
/** 成长记录数 */
|
||||
growthRecords?: number;
|
||||
/** 任务完成数 */
|
||||
taskCompletions?: number;
|
||||
}
|
||||
@ -0,0 +1,19 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* 班级信息
|
||||
*/
|
||||
export interface ClassInfo {
|
||||
/** 班级 ID */
|
||||
id?: string;
|
||||
/** 班级名称 */
|
||||
name?: string;
|
||||
/** 年级 */
|
||||
grade?: string;
|
||||
}
|
||||
@ -0,0 +1,27 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* 班级信息响应
|
||||
*/
|
||||
export interface ClassInfoResponse {
|
||||
/** 班级 ID */
|
||||
id?: string;
|
||||
/** 班级名称 */
|
||||
name?: string;
|
||||
/** 年级 */
|
||||
grade?: string;
|
||||
/** 学生数量 */
|
||||
studentCount?: number;
|
||||
/** 课时数量 */
|
||||
lessonCount?: number;
|
||||
/** 我的角色 */
|
||||
myRole?: string;
|
||||
/** 是否主教 */
|
||||
isPrimary?: boolean;
|
||||
}
|
||||
@ -0,0 +1,19 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* 班级简单信息
|
||||
*/
|
||||
export interface ClassSimpleInfo {
|
||||
/** 班级 ID */
|
||||
id?: string;
|
||||
/** 班级名称 */
|
||||
name?: string;
|
||||
/** 年级 */
|
||||
grade?: string;
|
||||
}
|
||||
@ -0,0 +1,30 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* 班级教师关联
|
||||
*/
|
||||
export interface ClassTeacher {
|
||||
/** ID */
|
||||
readonly id?: string;
|
||||
classId?: string;
|
||||
teacherId?: string;
|
||||
role?: string;
|
||||
isPrimary?: boolean;
|
||||
sortOrder?: number;
|
||||
/** 创建人用户名 */
|
||||
readonly createdBy?: string;
|
||||
/** 更新人用户名 */
|
||||
readonly updatedBy?: string;
|
||||
/** 创建时间 */
|
||||
readonly createdAt?: string;
|
||||
/** 更新时间 */
|
||||
readonly updatedAt?: string;
|
||||
/** 逻辑删除标志 */
|
||||
readonly deleted?: number;
|
||||
}
|
||||
@ -0,0 +1,13 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
export interface ClassTeacherRequest {
|
||||
teacherId?: string;
|
||||
role?: string;
|
||||
isPrimary?: boolean;
|
||||
}
|
||||
@ -0,0 +1,22 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { Lesson } from './lesson';
|
||||
|
||||
/**
|
||||
* 分页响应
|
||||
*/
|
||||
export interface CommonPageResponseLesson {
|
||||
/** 数据列表 */
|
||||
items?: Lesson[];
|
||||
/** 总数 */
|
||||
total?: number;
|
||||
/** 当前页码 */
|
||||
page?: number;
|
||||
/** 每页大小 */
|
||||
pageSize?: number;
|
||||
}
|
||||
@ -0,0 +1,22 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { TaskCompletionInfoResponse } from './taskCompletionInfoResponse';
|
||||
|
||||
/**
|
||||
* 分页响应
|
||||
*/
|
||||
export interface CommonPageResponseTaskCompletionInfoResponse {
|
||||
/** 数据列表 */
|
||||
items?: TaskCompletionInfoResponse[];
|
||||
/** 总数 */
|
||||
total?: number;
|
||||
/** 当前页码 */
|
||||
page?: number;
|
||||
/** 每页大小 */
|
||||
pageSize?: number;
|
||||
}
|
||||
@ -0,0 +1,17 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* 课程分布响应
|
||||
*/
|
||||
export interface CourseDistributionResponse {
|
||||
/** 课程名称 */
|
||||
name?: string;
|
||||
/** 课时数量 */
|
||||
value?: number;
|
||||
}
|
||||
@ -0,0 +1,25 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* 热门课程统计响应
|
||||
*/
|
||||
export interface CourseStatsResponse {
|
||||
/** 课程 ID */
|
||||
id?: string;
|
||||
/** 课程名称 */
|
||||
name?: string;
|
||||
/** 分类 */
|
||||
category?: string;
|
||||
/** 状态 */
|
||||
status?: string;
|
||||
/** 使用次数 */
|
||||
usageCount?: number;
|
||||
/** 教师数 */
|
||||
teacherCount?: number;
|
||||
}
|
||||
@ -0,0 +1,19 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* 课程使用统计响应
|
||||
*/
|
||||
export interface CourseUsageStatsResponse {
|
||||
/** 课程 ID */
|
||||
courseId?: string;
|
||||
/** 课程名称 */
|
||||
courseName?: string;
|
||||
/** 使用次数 */
|
||||
usageCount?: number;
|
||||
}
|
||||
@ -0,0 +1,23 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* 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;
|
||||
/** 目标 ID 列表(班级 ID 或学生 ID) */
|
||||
targetIds: number[];
|
||||
/** 目标类型:CLASS-班级,STUDENT-学生 */
|
||||
targetType?: string;
|
||||
/** 任务开始日期 */
|
||||
startDate?: string;
|
||||
/** 任务截止日期 */
|
||||
endDate?: string;
|
||||
}
|
||||
@ -0,0 +1,19 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* 文件上传响应
|
||||
*/
|
||||
export interface FileUploadResponse {
|
||||
/** 文件 URL */
|
||||
fileUrl?: string;
|
||||
/** 文件名称 */
|
||||
fileName?: string;
|
||||
/** 文件大小 */
|
||||
fileSize?: number;
|
||||
}
|
||||
@ -0,0 +1,11 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
export type GetActiveTeachersParams = {
|
||||
limit?: number;
|
||||
};
|
||||
@ -0,0 +1,12 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
export type GetChildLessonsParams = {
|
||||
page?: number;
|
||||
pageSize?: number;
|
||||
};
|
||||
@ -0,0 +1,13 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
export type GetChildTasksParams = {
|
||||
page?: number;
|
||||
pageSize?: number;
|
||||
status?: string;
|
||||
};
|
||||
@ -0,0 +1,13 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
export type GetClassStudents1Params = {
|
||||
page?: number;
|
||||
pageSize?: number;
|
||||
keyword?: string;
|
||||
};
|
||||
@ -0,0 +1,13 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
export type GetClassStudentsParams = {
|
||||
page?: number;
|
||||
pageSize?: number;
|
||||
keyword?: string;
|
||||
};
|
||||
@ -0,0 +1,13 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
export type GetCompletions1Params = {
|
||||
page?: number;
|
||||
pageSize?: number;
|
||||
status?: string;
|
||||
};
|
||||
@ -0,0 +1,13 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
export type GetCompletionsParams = {
|
||||
page?: number;
|
||||
pageSize?: number;
|
||||
status?: string;
|
||||
};
|
||||
@ -0,0 +1,11 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
export type GetLessonTrendParams = {
|
||||
months?: number;
|
||||
};
|
||||
@ -0,0 +1,11 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
export type GetMonthlyStats1Params = {
|
||||
months?: number;
|
||||
};
|
||||
@ -0,0 +1,11 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
export type GetMonthlyStatsParams = {
|
||||
months?: number;
|
||||
};
|
||||
@ -0,0 +1,13 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
export type GetMyNotifications2Params = {
|
||||
page?: number;
|
||||
pageSize?: number;
|
||||
isRead?: number;
|
||||
};
|
||||
@ -0,0 +1,11 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
export type GetRecentActivitiesParams = {
|
||||
limit?: number;
|
||||
};
|
||||
@ -10,4 +10,6 @@ export type GetSchedulePlans1Params = {
|
||||
pageNum?: number;
|
||||
pageSize?: number;
|
||||
classId?: number;
|
||||
startDate?: string;
|
||||
endDate?: string;
|
||||
};
|
||||
|
||||
@ -0,0 +1,13 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
export type GetTeacherStudentsParams = {
|
||||
page?: number;
|
||||
pageSize?: number;
|
||||
keyword?: string;
|
||||
};
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
export type GetTemplates1Params = {
|
||||
page?: number;
|
||||
pageSize?: number;
|
||||
keyword?: string;
|
||||
type?: string;
|
||||
};
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
export type GetTemplatesParams = {
|
||||
page?: number;
|
||||
pageSize?: number;
|
||||
keyword?: string;
|
||||
type?: string;
|
||||
};
|
||||
@ -0,0 +1,13 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
export type GetTimetable1Params = {
|
||||
startDate?: string;
|
||||
endDate?: string;
|
||||
classId?: string;
|
||||
};
|
||||
@ -0,0 +1,13 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
export type GetTimetableParams = {
|
||||
startDate?: string;
|
||||
endDate?: string;
|
||||
classId?: number;
|
||||
};
|
||||
@ -0,0 +1,17 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* 导入模板响应
|
||||
*/
|
||||
export interface ImportTemplateResponse {
|
||||
/** 表头 */
|
||||
headers?: string[];
|
||||
/** 示例数据 */
|
||||
example?: string[];
|
||||
}
|
||||
@ -6,22 +6,50 @@
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
export * from './activeTeacherStatsResponse';
|
||||
export * from './adminSettingsUpdateRequest';
|
||||
export * from './adminStatsResponse';
|
||||
export * from './approveCourseParams';
|
||||
export * from './batchSaveStudentRecordResponse';
|
||||
export * from './batchStudentRecordRequest';
|
||||
export * from './batchStudentRecordRequestRecordsItem';
|
||||
export * from './bindStudentParams';
|
||||
export * from './changePasswordParams';
|
||||
export * from './childDetailResponse';
|
||||
export * from './childInfoResponse';
|
||||
export * from './childStats';
|
||||
export * from './classCreateRequest';
|
||||
export * from './classInfo';
|
||||
export * from './classInfoResponse';
|
||||
export * from './classSimpleInfo';
|
||||
export * from './classTeacher';
|
||||
export * from './classTeacherRequest';
|
||||
export * from './classUpdateRequest';
|
||||
export * from './clazz';
|
||||
export * from './commonPageResponseLesson';
|
||||
export * from './commonPageResponseTaskCompletionInfoResponse';
|
||||
export * from './completeTaskParams';
|
||||
export * from './course';
|
||||
export * from './courseCreateRequest';
|
||||
export * from './courseDistributionResponse';
|
||||
export * from './courseLesson';
|
||||
export * from './coursePackage';
|
||||
export * from './courseStatsResponse';
|
||||
export * from './courseUpdateRequest';
|
||||
export * from './courseUsageStatsResponse';
|
||||
export * from './createTaskFromTemplateRequest';
|
||||
export * from './deleteFileParams';
|
||||
export * from './fileUploadResponse';
|
||||
export * from './getActiveTeachersParams';
|
||||
export * from './getActiveTenantsParams';
|
||||
export * from './getActivitiesParams';
|
||||
export * from './getChildLessonsParams';
|
||||
export * from './getChildTasksParams';
|
||||
export * from './getClassPageParams';
|
||||
export * from './getClassStudents1Params';
|
||||
export * from './getClassStudentsParams';
|
||||
export * from './getCompletions1Params';
|
||||
export * from './getCompletionsParams';
|
||||
export * from './getCoursePage1Params';
|
||||
export * from './getCoursePageParams';
|
||||
export * from './getCourses1Params';
|
||||
@ -30,16 +58,21 @@ export * from './getGrowthRecordPage1Params';
|
||||
export * from './getGrowthRecordPageParams';
|
||||
export * from './getGrowthRecordsByStudentParams';
|
||||
export * from './getItemsParams';
|
||||
export * from './getLessonTrendParams';
|
||||
export * from './getLibrariesParams';
|
||||
export * from './getLogs1Params';
|
||||
export * from './getLogsParams';
|
||||
export * from './getMonthlyStats1Params';
|
||||
export * from './getMonthlyStatsParams';
|
||||
export * from './getMyLessonsParams';
|
||||
export * from './getMyNotifications1Params';
|
||||
export * from './getMyNotifications2Params';
|
||||
export * from './getMyNotificationsParams';
|
||||
export * from './getPackages1Params';
|
||||
export * from './getPackagesParams';
|
||||
export * from './getParentPageParams';
|
||||
export * from './getPopularCoursesParams';
|
||||
export * from './getRecentActivitiesParams';
|
||||
export * from './getRecentGrowthRecordsParams';
|
||||
export * from './getReviewCoursePageParams';
|
||||
export * from './getSchedulePlans1Params';
|
||||
@ -50,17 +83,33 @@ export * from './getTaskPage1Params';
|
||||
export * from './getTaskPageParams';
|
||||
export * from './getTasksByStudentParams';
|
||||
export * from './getTeacherPageParams';
|
||||
export * from './getTeacherStudentsParams';
|
||||
export * from './getTemplates1Params';
|
||||
export * from './getTemplatesParams';
|
||||
export * from './getTenantPageParams';
|
||||
export * from './getThemesParams';
|
||||
export * from './getTimetable1Params';
|
||||
export * from './getTimetableParams';
|
||||
export * from './growthRecord';
|
||||
export * from './growthRecordCreateRequest';
|
||||
export * from './growthRecordUpdateRequest';
|
||||
export * from './importTemplateResponse';
|
||||
export * from './lesson';
|
||||
export * from './lessonActivityResponse';
|
||||
export * from './lessonCreateRequest';
|
||||
export * from './lessonFeedback';
|
||||
export * from './lessonFeedbackRequest';
|
||||
export * from './lessonFeedbackRequestActivitiesDone';
|
||||
export * from './lessonFeedbackRequestStepFeedbacks';
|
||||
export * from './lessonFinishRequest';
|
||||
export * from './lessonSimpleInfo';
|
||||
export * from './lessonSimpleResponse';
|
||||
export * from './lessonUpdateRequest';
|
||||
export * from './localTime';
|
||||
export * from './loginRequest';
|
||||
export * from './loginResponse';
|
||||
export * from './messageResponse';
|
||||
export * from './monthlyTaskStatsResponse';
|
||||
export * from './notification';
|
||||
export * from './operationLog';
|
||||
export * from './pageResultClazz';
|
||||
@ -76,39 +125,75 @@ export * from './pageResultSchedulePlan';
|
||||
export * from './pageResultScheduleTemplate';
|
||||
export * from './pageResultSchoolCourse';
|
||||
export * from './pageResultStudent';
|
||||
export * from './pageResultStudentInfoResponse';
|
||||
export * from './pageResultTask';
|
||||
export * from './pageResultTaskCompletion';
|
||||
export * from './pageResultTaskTemplate';
|
||||
export * from './pageResultTeacher';
|
||||
export * from './pageResultTenant';
|
||||
export * from './parent';
|
||||
export * from './parentCreateRequest';
|
||||
export * from './parentUpdateRequest';
|
||||
export * from './recentActivityResponse';
|
||||
export * from './rejectCourseParams';
|
||||
export * from './resetPassword1Params';
|
||||
export * from './resetPasswordParams';
|
||||
export * from './resetPasswordResponse';
|
||||
export * from './resourceItem';
|
||||
export * from './resourceLibrary';
|
||||
export * from './resultAdminStatsResponse';
|
||||
export * from './resultBatchSaveStudentRecordResponse';
|
||||
export * from './resultChildDetailResponse';
|
||||
export * from './resultClassTeacher';
|
||||
export * from './resultClazz';
|
||||
export * from './resultCommonPageResponseLesson';
|
||||
export * from './resultCommonPageResponseTaskCompletionInfoResponse';
|
||||
export * from './resultCourse';
|
||||
export * from './resultCourseLesson';
|
||||
export * from './resultCoursePackage';
|
||||
export * from './resultFileUploadResponse';
|
||||
export * from './resultGrowthRecord';
|
||||
export * from './resultImportTemplateResponse';
|
||||
export * from './resultLesson';
|
||||
export * from './resultLessonFeedback';
|
||||
export * from './resultListActiveTeacherStatsResponse';
|
||||
export * from './resultListChildInfoResponse';
|
||||
export * from './resultListClassInfoResponse';
|
||||
export * from './resultListClassTeacher';
|
||||
export * from './resultListClazz';
|
||||
export * from './resultListCourse';
|
||||
export * from './resultListCourseDistributionResponse';
|
||||
export * from './resultListCourseLesson';
|
||||
export * from './resultListCourseStatsResponse';
|
||||
export * from './resultListCourseUsageStatsResponse';
|
||||
export * from './resultListGrowthRecord';
|
||||
export * from './resultListLesson';
|
||||
export * from './resultListLessonActivityResponse';
|
||||
export * from './resultListLessonSimpleResponse';
|
||||
export * from './resultListMapStringObject';
|
||||
export * from './resultListMapStringObjectDataItem';
|
||||
export * from './resultListMonthlyTaskStatsResponse';
|
||||
export * from './resultListRecentActivityResponse';
|
||||
export * from './resultListResourceLibrary';
|
||||
export * from './resultListSchedulePlan';
|
||||
export * from './resultListSchedulePlanResponse';
|
||||
export * from './resultListStudent';
|
||||
export * from './resultListStudentTransferHistoryResponse';
|
||||
export * from './resultListTaskStatsByClassResponse';
|
||||
export * from './resultListTaskStatsByTypeResponse';
|
||||
export * from './resultListTeacherInfoResponse';
|
||||
export * from './resultListTenantResponse';
|
||||
export * from './resultListTenantStatsResponse';
|
||||
export * from './resultListTheme';
|
||||
export * from './resultListTrendDataPointResponse';
|
||||
export * from './resultListTrendDataResponse';
|
||||
export * from './resultLoginResponse';
|
||||
export * from './resultLong';
|
||||
export * from './resultMapStringObject';
|
||||
export * from './resultMapStringObjectData';
|
||||
export * from './resultMapStringString';
|
||||
export * from './resultMapStringStringData';
|
||||
export * from './resultMessageResponse';
|
||||
export * from './resultNotification';
|
||||
export * from './resultPageResultClazz';
|
||||
export * from './resultPageResultCourse';
|
||||
@ -123,41 +208,90 @@ export * from './resultPageResultSchedulePlan';
|
||||
export * from './resultPageResultScheduleTemplate';
|
||||
export * from './resultPageResultSchoolCourse';
|
||||
export * from './resultPageResultStudent';
|
||||
export * from './resultPageResultStudentInfoResponse';
|
||||
export * from './resultPageResultTask';
|
||||
export * from './resultPageResultTaskCompletion';
|
||||
export * from './resultPageResultTaskTemplate';
|
||||
export * from './resultPageResultTeacher';
|
||||
export * from './resultPageResultTenant';
|
||||
export * from './resultParent';
|
||||
export * from './resultResetPasswordResponse';
|
||||
export * from './resultResourceItem';
|
||||
export * from './resultResourceLibrary';
|
||||
export * from './resultSchedulePlan';
|
||||
export * from './resultScheduleTemplate';
|
||||
export * from './resultSchoolCourse';
|
||||
export * from './resultStatsResponse';
|
||||
export * from './resultStudent';
|
||||
export * from './resultStudentRecord';
|
||||
export * from './resultStudentRecordListResponse';
|
||||
export * from './resultSystemSettingsResponse';
|
||||
export * from './resultTask';
|
||||
export * from './resultTaskCompletion';
|
||||
export * from './resultTaskFeedbackResponse';
|
||||
export * from './resultTaskStatsResponse';
|
||||
export * from './resultTaskTemplate';
|
||||
export * from './resultTeacher';
|
||||
export * from './resultTeacherDashboardResponse';
|
||||
export * from './resultTenant';
|
||||
export * from './resultTenantStatusUpdateResponse';
|
||||
export * from './resultTheme';
|
||||
export * from './resultUserInfoResponse';
|
||||
export * from './resultVoid';
|
||||
export * from './resultVoidData';
|
||||
export * from './reviewPackageBody';
|
||||
export * from './schedulePlan';
|
||||
export * from './schedulePlanCreateRequest';
|
||||
export * from './schedulePlanResponse';
|
||||
export * from './schedulePlanUpdateRequest';
|
||||
export * from './scheduleTemplate';
|
||||
export * from './scheduleTemplateApplyRequest';
|
||||
export * from './schoolCourse';
|
||||
export * from './schoolSettingsUpdateRequest';
|
||||
export * from './statsResponse';
|
||||
export * from './student';
|
||||
export * from './studentCreateRequest';
|
||||
export * from './studentInfoResponse';
|
||||
export * from './studentRecord';
|
||||
export * from './studentRecordListResponse';
|
||||
export * from './studentRecordRequest';
|
||||
export * from './studentRecordResponse';
|
||||
export * from './studentTransferHistoryResponse';
|
||||
export * from './studentUpdateRequest';
|
||||
export * from './systemSettingsResponse';
|
||||
export * from './task';
|
||||
export * from './taskCompletion';
|
||||
export * from './taskCompletionInfoResponse';
|
||||
export * from './taskCreateRequest';
|
||||
export * from './taskFeedbackResponse';
|
||||
export * from './taskFeedbackUpdateRequest';
|
||||
export * from './taskSimpleInfo';
|
||||
export * from './taskStatsByClassResponse';
|
||||
export * from './taskStatsByTypeResponse';
|
||||
export * from './taskStatsResponse';
|
||||
export * from './taskTemplate';
|
||||
export * from './taskTemplateCreateRequest';
|
||||
export * from './taskTemplateUpdateRequest';
|
||||
export * from './taskUpdateRequest';
|
||||
export * from './teacher';
|
||||
export * from './teacherCreateRequest';
|
||||
export * from './teacherDashboardResponse';
|
||||
export * from './teacherInfoResponse';
|
||||
export * from './teacherUpdateRequest';
|
||||
export * from './tenant';
|
||||
export * from './tenantCreateRequest';
|
||||
export * from './tenantQuotaUpdateRequest';
|
||||
export * from './tenantResponse';
|
||||
export * from './tenantStatsResponse';
|
||||
export * from './tenantStatusUpdateRequest';
|
||||
export * from './tenantStatusUpdateResponse';
|
||||
export * from './tenantUpdateRequest';
|
||||
export * from './theme';
|
||||
export * from './transferStudentRequest';
|
||||
export * from './trendDataPointResponse';
|
||||
export * from './trendDataResponse';
|
||||
export * from './updateCompletion1Params';
|
||||
export * from './updateCompletionParams';
|
||||
export * from './updateSettings1Body';
|
||||
export * from './updateSettingsBody';
|
||||
export * from './updateTenantQuotaBody';
|
||||
|
||||
@ -0,0 +1,21 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* 课时活动响应
|
||||
*/
|
||||
export interface LessonActivityResponse {
|
||||
/** 课时 ID */
|
||||
id?: string;
|
||||
/** 课时标题 */
|
||||
title?: string;
|
||||
/** 课时日期 */
|
||||
lessonDate?: string;
|
||||
/** 课时状态 */
|
||||
status?: string;
|
||||
}
|
||||
@ -0,0 +1,55 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* 课时反馈
|
||||
*/
|
||||
export interface LessonFeedback {
|
||||
/** ID */
|
||||
readonly id?: string;
|
||||
/** 课时 ID */
|
||||
lessonId?: string;
|
||||
/** 教师 ID */
|
||||
teacherId?: string;
|
||||
/**
|
||||
* 设计质量评分 (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;
|
||||
/** 完成的活动 JSON */
|
||||
activitiesDone?: string;
|
||||
/** 创建人用户名 */
|
||||
readonly createdBy?: string;
|
||||
/** 创建时间 */
|
||||
readonly createdAt?: string;
|
||||
/** 更新时间 */
|
||||
readonly updatedAt?: string;
|
||||
/** 更新人用户名 */
|
||||
readonly updatedBy?: string;
|
||||
/** 是否删除 */
|
||||
readonly deleted?: number;
|
||||
}
|
||||
@ -0,0 +1,19 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { LessonFeedbackRequestStepFeedbacks } from './lessonFeedbackRequestStepFeedbacks';
|
||||
import type { LessonFeedbackRequestActivitiesDone } from './lessonFeedbackRequestActivitiesDone';
|
||||
|
||||
export interface LessonFeedbackRequest {
|
||||
designQuality?: number;
|
||||
participation?: number;
|
||||
goalAchievement?: number;
|
||||
stepFeedbacks?: LessonFeedbackRequestStepFeedbacks;
|
||||
pros?: string;
|
||||
suggestions?: string;
|
||||
activitiesDone?: LessonFeedbackRequestActivitiesDone;
|
||||
}
|
||||
@ -0,0 +1,9 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
export type LessonFeedbackRequestActivitiesDone = { [key: string]: unknown };
|
||||
@ -0,0 +1,9 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
export type LessonFeedbackRequestStepFeedbacks = { [key: string]: unknown };
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
export interface LessonFinishRequest {
|
||||
actualDuration?: number;
|
||||
overallRating?: string;
|
||||
participationRating?: string;
|
||||
completionNote?: string;
|
||||
}
|
||||
@ -0,0 +1,19 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* 课程简单信息
|
||||
*/
|
||||
export interface LessonSimpleInfo {
|
||||
/** 课程 ID */
|
||||
id?: string;
|
||||
/** 课程状态 */
|
||||
status?: string;
|
||||
/** 班级名称 */
|
||||
className?: string;
|
||||
}
|
||||
@ -0,0 +1,25 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* 课时简单信息响应
|
||||
*/
|
||||
export interface LessonSimpleResponse {
|
||||
/** 课时 ID */
|
||||
id?: string;
|
||||
/** 课时标题 */
|
||||
title?: string;
|
||||
/** 开始时间 */
|
||||
startTime?: string;
|
||||
/** 结束时间 */
|
||||
endTime?: string;
|
||||
/** 地点 */
|
||||
location?: string;
|
||||
/** 课时状态 */
|
||||
status?: string;
|
||||
}
|
||||
@ -0,0 +1,15 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* 简单消息响应
|
||||
*/
|
||||
export interface MessageResponse {
|
||||
/** 消息内容 */
|
||||
message?: string;
|
||||
}
|
||||
@ -0,0 +1,21 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* 月度任务统计响应
|
||||
*/
|
||||
export interface MonthlyTaskStatsResponse {
|
||||
/** 月份 */
|
||||
month?: string;
|
||||
/** 任务数 */
|
||||
tasks?: number;
|
||||
/** 完成次数 */
|
||||
completions?: number;
|
||||
/** 已完成数量 */
|
||||
completed?: number;
|
||||
}
|
||||
@ -0,0 +1,16 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { StudentInfoResponse } from './studentInfoResponse';
|
||||
|
||||
export interface PageResultStudentInfoResponse {
|
||||
total?: number;
|
||||
pageSize?: number;
|
||||
items?: StudentInfoResponse[];
|
||||
page?: number;
|
||||
totalPages?: number;
|
||||
}
|
||||
@ -0,0 +1,16 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { TaskCompletion } from './taskCompletion';
|
||||
|
||||
export interface PageResultTaskCompletion {
|
||||
total?: number;
|
||||
pageSize?: number;
|
||||
items?: TaskCompletion[];
|
||||
page?: number;
|
||||
totalPages?: number;
|
||||
}
|
||||
@ -0,0 +1,16 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { TaskTemplate } from './taskTemplate';
|
||||
|
||||
export interface PageResultTaskTemplate {
|
||||
total?: number;
|
||||
pageSize?: number;
|
||||
items?: TaskTemplate[];
|
||||
page?: number;
|
||||
totalPages?: number;
|
||||
}
|
||||
@ -0,0 +1,21 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* 近期活动响应
|
||||
*/
|
||||
export interface RecentActivityResponse {
|
||||
/** 活动 ID */
|
||||
id?: string;
|
||||
/** 活动类型/课时状态 */
|
||||
type?: string;
|
||||
/** 活动标题 */
|
||||
title?: string;
|
||||
/** 活动时间 */
|
||||
time?: string;
|
||||
}
|
||||
@ -0,0 +1,17 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* 重置密码响应
|
||||
*/
|
||||
export interface ResetPasswordResponse {
|
||||
/** 临时密码 */
|
||||
tempPassword?: string;
|
||||
/** 提示信息 */
|
||||
message?: string;
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { AdminStatsResponse } from './adminStatsResponse';
|
||||
|
||||
export interface ResultAdminStatsResponse {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: AdminStatsResponse;
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { BatchSaveStudentRecordResponse } from './batchSaveStudentRecordResponse';
|
||||
|
||||
export interface ResultBatchSaveStudentRecordResponse {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: BatchSaveStudentRecordResponse;
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { ChildDetailResponse } from './childDetailResponse';
|
||||
|
||||
export interface ResultChildDetailResponse {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: ChildDetailResponse;
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { ClassTeacher } from './classTeacher';
|
||||
|
||||
export interface ResultClassTeacher {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: ClassTeacher;
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { CommonPageResponseLesson } from './commonPageResponseLesson';
|
||||
|
||||
export interface ResultCommonPageResponseLesson {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: CommonPageResponseLesson;
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { CommonPageResponseTaskCompletionInfoResponse } from './commonPageResponseTaskCompletionInfoResponse';
|
||||
|
||||
export interface ResultCommonPageResponseTaskCompletionInfoResponse {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: CommonPageResponseTaskCompletionInfoResponse;
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { FileUploadResponse } from './fileUploadResponse';
|
||||
|
||||
export interface ResultFileUploadResponse {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: FileUploadResponse;
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { ImportTemplateResponse } from './importTemplateResponse';
|
||||
|
||||
export interface ResultImportTemplateResponse {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: ImportTemplateResponse;
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* 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;
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { ActiveTeacherStatsResponse } from './activeTeacherStatsResponse';
|
||||
|
||||
export interface ResultListActiveTeacherStatsResponse {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: ActiveTeacherStatsResponse[];
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { ChildInfoResponse } from './childInfoResponse';
|
||||
|
||||
export interface ResultListChildInfoResponse {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: ChildInfoResponse[];
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { ClassInfoResponse } from './classInfoResponse';
|
||||
|
||||
export interface ResultListClassInfoResponse {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: ClassInfoResponse[];
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { ClassTeacher } from './classTeacher';
|
||||
|
||||
export interface ResultListClassTeacher {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: ClassTeacher[];
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { Clazz } from './clazz';
|
||||
|
||||
export interface ResultListClazz {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: Clazz[];
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { CourseDistributionResponse } from './courseDistributionResponse';
|
||||
|
||||
export interface ResultListCourseDistributionResponse {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: CourseDistributionResponse[];
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { CourseStatsResponse } from './courseStatsResponse';
|
||||
|
||||
export interface ResultListCourseStatsResponse {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: CourseStatsResponse[];
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { CourseUsageStatsResponse } from './courseUsageStatsResponse';
|
||||
|
||||
export interface ResultListCourseUsageStatsResponse {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: CourseUsageStatsResponse[];
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { LessonActivityResponse } from './lessonActivityResponse';
|
||||
|
||||
export interface ResultListLessonActivityResponse {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: LessonActivityResponse[];
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { LessonSimpleResponse } from './lessonSimpleResponse';
|
||||
|
||||
export interface ResultListLessonSimpleResponse {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: LessonSimpleResponse[];
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { MonthlyTaskStatsResponse } from './monthlyTaskStatsResponse';
|
||||
|
||||
export interface ResultListMonthlyTaskStatsResponse {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: MonthlyTaskStatsResponse[];
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { RecentActivityResponse } from './recentActivityResponse';
|
||||
|
||||
export interface ResultListRecentActivityResponse {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: RecentActivityResponse[];
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { SchedulePlan } from './schedulePlan';
|
||||
|
||||
export interface ResultListSchedulePlan {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: SchedulePlan[];
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* 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[];
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { StudentTransferHistoryResponse } from './studentTransferHistoryResponse';
|
||||
|
||||
export interface ResultListStudentTransferHistoryResponse {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: StudentTransferHistoryResponse[];
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { TaskStatsByClassResponse } from './taskStatsByClassResponse';
|
||||
|
||||
export interface ResultListTaskStatsByClassResponse {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: TaskStatsByClassResponse[];
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { TaskStatsByTypeResponse } from './taskStatsByTypeResponse';
|
||||
|
||||
export interface ResultListTaskStatsByTypeResponse {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: TaskStatsByTypeResponse[];
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { TeacherInfoResponse } from './teacherInfoResponse';
|
||||
|
||||
export interface ResultListTeacherInfoResponse {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: TeacherInfoResponse[];
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { TenantStatsResponse } from './tenantStatsResponse';
|
||||
|
||||
export interface ResultListTenantStatsResponse {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: TenantStatsResponse[];
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { TrendDataPointResponse } from './trendDataPointResponse';
|
||||
|
||||
export interface ResultListTrendDataPointResponse {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: TrendDataPointResponse[];
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { TrendDataResponse } from './trendDataResponse';
|
||||
|
||||
export interface ResultListTrendDataResponse {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: TrendDataResponse[];
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { MessageResponse } from './messageResponse';
|
||||
|
||||
export interface ResultMessageResponse {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: MessageResponse;
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { PageResultStudentInfoResponse } from './pageResultStudentInfoResponse';
|
||||
|
||||
export interface ResultPageResultStudentInfoResponse {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: PageResultStudentInfoResponse;
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { PageResultTaskCompletion } from './pageResultTaskCompletion';
|
||||
|
||||
export interface ResultPageResultTaskCompletion {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: PageResultTaskCompletion;
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { PageResultTaskTemplate } from './pageResultTaskTemplate';
|
||||
|
||||
export interface ResultPageResultTaskTemplate {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: PageResultTaskTemplate;
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { ResetPasswordResponse } from './resetPasswordResponse';
|
||||
|
||||
export interface ResultResetPasswordResponse {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: ResetPasswordResponse;
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user