92 lines
2.0 KiB
TypeScript
92 lines
2.0 KiB
TypeScript
import { http } from './index';
|
|
|
|
// ============= 类型定义 =============
|
|
|
|
/** 套餐信息 */
|
|
export interface CourseCollection {
|
|
id: number;
|
|
name: string;
|
|
description?: string;
|
|
packageCount: number;
|
|
gradeLevels?: string[];
|
|
status: string;
|
|
startDate?: string;
|
|
endDate?: string;
|
|
}
|
|
|
|
/** 课程包中的课程项(用于提取课程配置) */
|
|
export interface CoursePackageCourseItem {
|
|
id?: number;
|
|
name?: string;
|
|
lessonType?: string;
|
|
}
|
|
|
|
/** 课程包信息 */
|
|
export interface CoursePackage {
|
|
id: number;
|
|
name: string;
|
|
description?: string;
|
|
coverImagePath?: string;
|
|
pictureBookName?: string;
|
|
gradeTags: string[];
|
|
domainTags?: string[]; // 不再展示,由课程配置替代
|
|
courses?: CoursePackageCourseItem[]; // 用于课程配置展示
|
|
themeId?: number;
|
|
themeName?: string;
|
|
durationMinutes?: number;
|
|
usageCount?: number;
|
|
avgRating?: number;
|
|
sortOrder?: number;
|
|
}
|
|
|
|
/** 筛选元数据 - 年级选项 */
|
|
export interface GradeOption {
|
|
label: string;
|
|
count: number;
|
|
}
|
|
|
|
/** 筛选元数据 - 课程配置选项 */
|
|
export interface LessonTypeOption {
|
|
lessonType: string;
|
|
name: string;
|
|
count: number;
|
|
}
|
|
|
|
/** 筛选元数据响应 */
|
|
export interface FilterMetaResponse {
|
|
grades: GradeOption[];
|
|
lessonTypes: LessonTypeOption[];
|
|
}
|
|
|
|
// ============= API 接口 =============
|
|
|
|
/**
|
|
* 获取租户的课程套餐列表
|
|
*/
|
|
export function getCollections(): Promise<CourseCollection[]> {
|
|
return http.get<CourseCollection[]>('/v1/school/packages');
|
|
}
|
|
|
|
/**
|
|
* 获取套餐下的课程包列表(支持筛选)
|
|
*/
|
|
export function getPackages(
|
|
collectionId: number,
|
|
params?: {
|
|
grade?: string;
|
|
lessonType?: string;
|
|
keyword?: string;
|
|
}
|
|
): Promise<CoursePackage[]> {
|
|
return http.get<CoursePackage[]>(`/v1/school/packages/${collectionId}/packages`, {
|
|
params,
|
|
});
|
|
}
|
|
|
|
/**
|
|
* 获取套餐的筛选元数据
|
|
*/
|
|
export function getFilterMeta(collectionId: number): Promise<FilterMetaResponse> {
|
|
return http.get<FilterMetaResponse>(`/v1/school/packages/${collectionId}/filter-meta`);
|
|
}
|