99 lines
2.3 KiB
TypeScript
99 lines
2.3 KiB
TypeScript
// hooks/useCourse.ts
|
|
/**
|
|
* 课程相关的可复用逻辑
|
|
*/
|
|
import { ref } from 'vue'
|
|
import { courseApi } from '@/api/modules/course'
|
|
import type { ICourseDetail, ICatalogue, IChapter, IVipInfo } from '@/types/course'
|
|
|
|
export function useCourse() {
|
|
const loading = ref(false)
|
|
const courseDetail = ref<ICourseDetail | null>(null)
|
|
const catalogueList = ref<ICatalogue[]>([])
|
|
const chapterList = ref<IChapter[]>([])
|
|
const userVip = ref<IVipInfo | null>(null)
|
|
|
|
/**
|
|
* 获取课程详情
|
|
*/
|
|
const fetchCourseDetail = async (courseId: number) => {
|
|
try {
|
|
loading.value = true
|
|
const res = await courseApi.getCourseDetail(courseId)
|
|
if (res.code === 0 && res.data) {
|
|
courseDetail.value = res.data.course
|
|
catalogueList.value = res.data.catalogues || []
|
|
return res.data
|
|
}
|
|
} catch (error) {
|
|
console.error('获取课程详情失败:', error)
|
|
throw error
|
|
} finally {
|
|
loading.value = false
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 获取章节列表
|
|
*/
|
|
const fetchChapterList = async (catalogueId: number) => {
|
|
try {
|
|
const res = await courseApi.getCatalogueChapterList(catalogueId)
|
|
if (res.code === 0) {
|
|
chapterList.value = res.chapterList || []
|
|
return res.chapterList
|
|
}
|
|
} catch (error) {
|
|
console.error('获取章节列表失败:', error)
|
|
chapterList.value = []
|
|
throw error
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 检查VIP状态
|
|
*/
|
|
const checkVipStatus = async (courseId: number) => {
|
|
try {
|
|
const res = await courseApi.checkCourseVip(courseId)
|
|
if (res.code === 0) {
|
|
userVip.value = res.userVip || null
|
|
return res.userVip
|
|
}
|
|
} catch (error) {
|
|
console.error('检查VIP状态失败:', error)
|
|
userVip.value = null
|
|
throw error
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 领取免费课程
|
|
*/
|
|
const getFreeCourse = async (catalogueId: number) => {
|
|
try {
|
|
const res = await courseApi.startStudyForMF(catalogueId)
|
|
if (res.code === 0) {
|
|
uni.showToast({ title: '领取成功', icon: 'success' })
|
|
return true
|
|
}
|
|
return false
|
|
} catch (error) {
|
|
console.error('领取免费课程失败:', error)
|
|
throw error
|
|
}
|
|
}
|
|
|
|
return {
|
|
loading,
|
|
courseDetail,
|
|
catalogueList,
|
|
chapterList,
|
|
userVip,
|
|
fetchCourseDetail,
|
|
fetchChapterList,
|
|
checkVipStatus,
|
|
getFreeCourse
|
|
}
|
|
}
|