Files
taimed-international-app/api/modules/course.ts

250 lines
5.8 KiB
TypeScript

// api/modules/course.ts
import { createRequestClient } from '../request'
import { SERVICE_MAP } from '../config'
import type { IApiResponse } from '../types'
import type {
ICourseMedicalTreeResponse,
IUserLateCourseListResponse,
IMarketCourseListResponse,
ICourseDetailResponse,
IChapterListResponse,
IChapterDetailResponse,
IProductListResponse,
IVipInfo
} from '@/types/course'
import type { ISearchRequest, ISearchResponse } from '@/types/search'
import type { ICommentListResponse, IAddCommentResponse, IComment } from '@/types/comment'
const client = createRequestClient({ baseURL: SERVICE_MAP.MAIN })
/**
* 课程相关API
*/
export const courseApi = {
/**
* 获取课程分类树
* @returns 分类数据
*/
getCourseMedicalTree() {
return client.request<ICourseMedicalTreeResponse>({
url: 'medical/home/getCourseMedicalTree',
method: 'POST',
data: {}
})
},
/**
* 获取用户最近观看课程列表
* @returns 观看记录列表
*/
getUserLateCourseList() {
return client.request<IUserLateCourseListResponse>({
url: 'medical/home/getUserLateCourseList',
method: 'POST',
data: {}
})
},
/**
* 获取市场课程列表(试听课程)
* @param id 市场ID
* @param limit 每页数量
* @param page 页码
* @returns 课程列表
*/
getMarketCourseList(data: {
id: number,
page: number,
limit: number
}) {
return client.request<IMarketCourseListResponse>({
url: 'medical/home/getMarketCourseList',
method: 'POST',
data
})
},
/**
* 搜索课程和商品
* @param data 搜索参数 { keyWord, appName }
* @returns 搜索结果
*/
searchData(data: ISearchRequest) {
return client.request<ISearchResponse>({
url: 'bookAbroad/home/searchCourse',
method: 'POST',
data
})
},
/**
* 获取课程详情
* @param id 课程ID
*/
getCourseDetail(id: number) {
return client.request<ICourseDetailResponse>({
url: 'sociology/course/getCourseDetail',
method: 'POST',
data: { id }
})
},
/**
* 获取目录章节列表
* @param id 目录ID
*/
getCatalogueChapterList(id: number) {
return client.request<IChapterListResponse>({
url: 'sociology/course/getCourseCatalogueChapterList',
method: 'POST',
data: { id }
})
},
/**
* 获取章节详情
* @param id 章节ID
*/
getChapterDetail(id: number) {
return client.request<IChapterDetailResponse>({
url: 'sociology/course/getCourseCatalogueChapterDetail',
method: 'POST',
data: { id, load: false }
})
},
/**
* 开始学习免费课程
* @param catalogueId 目录ID
*/
startStudyForMF(catalogueId: number) {
return client.request<IApiResponse>({
url: 'sociology/course/startStudyForMF',
method: 'POST',
data: { catalogueId }
})
},
/**
* 获取课程商品列表
* @param id 目录ID
*/
getProductListForCourse(id: number) {
return client.request<IProductListResponse>({
url: 'sociology/product/getProductListForCourse',
method: 'POST',
data: { id }
})
},
/**
* 检查目录是否支持复读
* @param courseCatalogueId 目录ID
*/
checkRenewPayment(courseCatalogueId: number) {
return client.request<IApiResponse<{ canRelearn: boolean }>>({
url: 'common/courseRelearn/courseCatalogueCanRelearn',
method: 'POST',
data: { courseCatalogueId }
})
},
/**
* 获取复读商品列表
* @param catalogueId 目录ID
*/
getRenewProductList(catalogueId: number) {
return client.request<IProductListResponse>({
url: 'common/courseRelearn/relearnShopProductList',
method: 'POST',
data: { catalogueId }
})
},
/**
* 获取课程留言列表
* @param courseId 课程ID
* @param page 页码
* @param limit 每页数量
* @param userId 用户ID
*/
getCourseComments(courseId: number, page: number, limit: number, userId: number) {
return client.request<ICommentListResponse>({
url: 'common/courseGuestbook/getCourseGuestbookList',
method: 'POST',
data: { courseId, page, limit, userId, chapterId: '' }
})
},
/**
* 添加课程留言
* @param data 留言数据
*/
addCourseComment(data: {
type: number
courseId: number
chapterId: string
pid: number
userId: number
forUserId: number
content: string
images: string
}) {
return client.request<IAddCommentResponse>({
url: 'common/courseGuestbook/addCourseGuestbook',
method: 'POST',
data
})
},
/**
* 点赞留言
* @param userId 用户ID
* @param guestbookId 留言ID
*/
likeComment(userId: number, guestbookId: number) {
return client.request<IApiResponse>({
url: 'common/courseGuestbook/addCourseGuestbookSupport',
method: 'POST',
data: { userId, guestbookId }
})
},
/**
* 取消点赞
* @param userId 用户ID
* @param guestbookId 留言ID
*/
unlikeComment(userId: number, guestbookId: number) {
return client.request<IApiResponse>({
url: 'common/courseGuestbook/cancelCourseGuestbookSupport',
method: 'POST',
data: { userId, guestbookId }
})
},
/**
* 检查用户VIP权益
* @param courseId 课程ID
*/
checkCourseVip(courseId: number) {
return client.request<IApiResponse<{ userVip: IVipInfo | null }>>({
url: 'common/userVip/ownCourseCatalogueByVip',
method: 'POST',
data: { courseId }
})
},
/**
* 获取课程需要的VIP类型
* @param courseId 课程ID
*/
getCourseVipModule(courseId: number) {
return client.request<IApiResponse<{ list: string[] }>>({
url: 'common/userVip/getCourseVipModule',
method: 'POST',
data: { courseId }
})
}
}