kindergarten_java/reading-platform-frontend/src/api/course.ts

230 lines
5.8 KiB
TypeScript
Raw Normal View History

import { getReadingPlatformAPI } from './generated';
// 创建 API 实例
const api = getReadingPlatformAPI();
// ============= 类型定义(保持向后兼容) =============
export interface CourseQueryParams {
pageNum?: number;
pageSize?: number;
grade?: string;
status?: string;
keyword?: string;
}
export interface Course {
id: number;
name: string;
description?: string;
pictureBookName?: string;
grades: string[];
status: string;
version: string;
usageCount: number;
teacherCount: number;
avgRating: number;
createdAt: Date;
2026-02-28 16:41:39 +08:00
updatedAt: Date;
submittedAt?: Date;
reviewedAt?: Date;
reviewComment?: string;
2026-02-28 16:41:39 +08:00
// 新增字段
themeId?: number;
theme?: { id: number; name: string };
coreContent?: string;
coverImagePath?: string;
domainTags?: string[];
gradeTags?: string[];
duration?: number;
// 课程介绍字段
introSummary?: string;
introHighlights?: string;
introGoals?: string;
introSchedule?: string;
introKeyPoints?: string;
introMethods?: string;
introEvaluation?: string;
introNotes?: string;
// 排课计划参考
scheduleRefData?: string;
// 环创建设
environmentConstruction?: string;
// 关联课程
courseLessons?: CourseLesson[];
}
export interface CourseLesson {
id: number;
courseId: number;
lessonType: string;
name: string;
description?: string;
duration: number;
videoPath?: string;
videoName?: string;
pptPath?: string;
pptName?: string;
pdfPath?: string;
pdfName?: string;
objectives?: string;
preparation?: string;
extension?: string;
reflection?: string;
assessmentData?: string;
useTemplate: boolean;
sortOrder: number;
steps?: LessonStep[];
}
export interface LessonStep {
id: number;
lessonId: number;
name: string;
content?: string;
duration: number;
objective?: string;
resourceIds?: string;
sortOrder: number;
}
export interface ValidationResult {
valid: boolean;
errors: ValidationError[];
warnings: ValidationWarning[];
}
export interface ValidationError {
field: string;
message: string;
code: string;
}
export interface ValidationWarning {
field: string;
message: string;
code: string;
}
// ============= API 函数(使用生成的客户端) =============
// 转换查询参数类型
const toFindAllParams = (params: CourseQueryParams): any => ({
pageNum: params.pageNum ?? 1, // 默认值为 1
pageSize: params.pageSize ?? 10, // 默认值为 10
keyword: params.keyword,
category: params.grade, // grade 映射到 category
});
// 获取课程包列表
export function getCourses(params: CourseQueryParams): Promise<{
items: Course[];
total: number;
page: number;
pageSize: number;
}> {
return api.getCoursePage1(toFindAllParams(params)) as any;
}
// 获取审核列表 (使用相同的列表接口,前端过滤状态)
export function getReviewList(params: CourseQueryParams): Promise<{
items: Course[];
total: number;
page: number;
pageSize: number;
}> {
// 注意:后端可能没有单独的审核列表接口,这里返回所有数据让前端过滤
return api.getCoursePage1(toFindAllParams(params)) as any;
}
// 获取课程包详情
export function getCourse(id: number): Promise<any> {
return api.getCourse1(id) as any;
}
// 创建课程包
export function createCourse(data: any): Promise<any> {
return api.createCourse(data) as any;
}
// 更新课程包
export function updateCourse(id: number, data: any): Promise<any> {
return api.updateCourse(id, data) as any;
}
// 删除课程包
export function deleteCourse(id: number): Promise<any> {
return api.deleteCourse(id) as any;
}
// 验证课程完整性 (暂时返回 true后端可能没有此接口)
export function validateCourse(id: number): Promise<ValidationResult> {
return Promise.resolve({ valid: true, errors: [], warnings: [] });
}
// 提交审核
export function submitCourse(id: number, copyrightConfirmed?: boolean): Promise<any> {
return api.submit(id) as any;
}
// 撤销审核 (暂时使用更新接口,需要确认后端是否有此功能)
export function withdrawCourse(id: number): Promise<any> {
return api.updateCourse(id, { status: 'DRAFT' }) as any;
}
// 审核通过
export function approveCourse(id: number, data: { checklist?: any; comment?: string }): Promise<any> {
return api.publishCourse(id) as any;
}
// 审核驳回
export function rejectCourse(id: number, data: { checklist?: any; comment: string }): Promise<any> {
return api.review(id, data) as any;
}
// 直接发布(超级管理员)
export function directPublishCourse(id: number, skipValidation?: boolean): Promise<any> {
return api.publishCourse(id) as any;
}
// 发布课程包
export function publishCourse(id: number): Promise<any> {
return api.publishCourse(id) as any;
}
// 下架课程包
export function unpublishCourse(id: number): Promise<any> {
return api.archiveCourse(id) as any;
}
// 重新发布 (使用发布接口)
export function republishCourse(id: number): Promise<any> {
return api.publishCourse(id) as any;
}
// 获取课程包统计数据 (暂时返回空对象)
export function getCourseStats(id: number): Promise<any> {
return Promise.resolve({});
}
// 获取版本历史 (暂时返回空数组)
export function getCourseVersions(id: number): Promise<any[]> {
return Promise.resolve([]);
}
// ============= 常量 =============
// 课程状态映射
export const COURSE_STATUS_MAP: Record<string, { label: string; color: string }> = {
DRAFT: { label: '草稿', color: 'default' },
PENDING: { label: '审核中', color: 'processing' },
REJECTED: { label: '已驳回', color: 'error' },
PUBLISHED: { label: '已发布', color: 'success' },
ARCHIVED: { label: '已下架', color: 'warning' },
};
// 获取状态显示信息
export function getCourseStatusInfo(status: string) {
return COURSE_STATUS_MAP[status] || { label: status, color: 'default' };
}