revert 解决冲突
This commit is contained in:
2025-11-27 15:38:24 +08:00
parent 3da220526b
commit 64abd3d4ab
28 changed files with 1059 additions and 705 deletions

View File

@@ -164,19 +164,23 @@ onLoad((options: any) => {
* 加载章节详情
*/
const loadChapterDetail = async () => {
const res = await courseApi.getChapterDetail(chapterId.value)
if (res.code === 0 && res.data) {
chapterDetail.value = res.data.detail
videoList.value = res.data.videos || []
try {
const res = await courseApi.getChapterDetail(chapterId.value)
if (res.code === 0 && res.data) {
chapterDetail.value = res.data.detail
videoList.value = res.data.videos || []
// 如果有历史播放记录,定位到对应视频
if (res.data.current) {
const index = videoList.value.findIndex(v => v.id === res.data.current)
if (index !== -1) {
currentVideoIndex.value = index
activeVideoIndex.value = index
// 如果有历史播放记录,定位到对应视频
if (res.data.current) {
const index = videoList.value.findIndex(v => v.id === res.data.current)
if (index !== -1) {
currentVideoIndex.value = index
activeVideoIndex.value = index
}
}
}
} catch (error) {
console.error('加载章节详情失败:', error)
}
}

View File

@@ -259,47 +259,60 @@ onLoad(async (options: any) => {
* 加载页面数据
*/
const loadPageData = async () => {
// 获取课程详情
const res = await courseApi.getCourseDetail(courseId.value)
if (res.code === 0 && res.data) {
courseDetail.value = res.data.course
catalogueList.value = res.data.catalogues || []
relatedBooks.value = res.data.shopProductList || []
try {
uni.showLoading({ title: '加载中...' })
// 计算学习进度
if (catalogueList.value.length > 0) {
const totalProgress = catalogueList.value.reduce((sum, cat) => sum + cat.completion, 0)
learningProgress.value = Number((totalProgress / catalogueList.value.length).toFixed(2))
// 获取课程详情
const res = await courseApi.getCourseDetail(courseId.value)
if (res.code === 0 && res.data) {
courseDetail.value = res.data.course
catalogueList.value = res.data.catalogues || []
relatedBooks.value = res.data.shopProductList || []
// 计算学习进度
if (catalogueList.value.length > 0) {
const totalProgress = catalogueList.value.reduce((sum, cat) => sum + cat.completion, 0)
learningProgress.value = Number((totalProgress / catalogueList.value.length).toFixed(2))
}
// 默认选择第一个目录
if (catalogueList.value.length > 0) {
await switchCatalogue(0)
}
}
// 默认选择第一个目录
if (catalogueList.value.length > 0) {
await switchCatalogue(0)
}
// 检查VIP权益
await checkVipStatus()
// 加载评论
await loadComments()
} catch (error) {
console.error('加载页面数据失败:', error)
} finally {
uni.hideLoading()
}
// 检查VIP权益
await checkVipStatus()
// 加载评论
await loadComments()
}
/**
* 检查VIP状态
*/
const checkVipStatus = async () => {
const res = await courseApi.checkCourseVip(courseId.value)
if (res.code === 0) {
userVip.value = res.userVip || null
// 如果不是VIP获取需要的VIP类型
if (!userVip.value) {
const moduleRes = await courseApi.getCourseVipModule(courseId.value)
if (moduleRes.code === 0) {
vipModuleList.value = moduleRes.list || []
try {
const res = await courseApi.checkCourseVip(courseId.value)
if (res.code === 0) {
userVip.value = res.userVip || null
// 如果不是VIP获取需要的VIP类型
if (!userVip.value) {
const moduleRes = await courseApi.getCourseVipModule(courseId.value)
if (moduleRes.code === 0) {
vipModuleList.value = moduleRes.list || []
}
}
}
} catch (error) {
console.error('检查VIP状态失败:', error)
}
}
@@ -311,17 +324,21 @@ const switchCatalogue = async (index: number) => {
const catalogue = catalogueList.value[index]
// 获取章节列表
const res = await courseApi.getCatalogueChapterList(catalogue.id)
if (res.code === 0) {
chapterList.value = res.chapterList || []
}
// 检查是否支持复读
if (catalogue.isBuy === 0 && !userVip.value) {
const renewRes = await courseApi.checkRenewPayment(catalogue.id)
showRenewBtn.value = renewRes.canRelearn || false
} else {
showRenewBtn.value = false
try {
const res = await courseApi.getCatalogueChapterList(catalogue.id)
if (res.code === 0) {
chapterList.value = res.chapterList || []
}
// 检查是否支持复读
if (catalogue.isBuy === 0 && !userVip.value) {
const renewRes = await courseApi.checkRenewPayment(catalogue.id)
showRenewBtn.value = renewRes.canRelearn || false
} else {
showRenewBtn.value = false
}
} catch (error) {
console.error('切换目录失败:', error)
}
}
@@ -349,12 +366,18 @@ const handleChapterClick = (chapter: IChapter) => {
const handleGetFreeCourse = async () => {
if (!currentCatalogue.value) return
uni.showLoading({ title: '领取中...' })
const res = await courseApi.startStudyForMF(currentCatalogue.value.id)
if (res.code === 0) {
uni.showToast({ title: '领取成功', icon: 'success' })
// 刷新页面数据
await loadPageData()
try {
uni.showLoading({ title: '领取中...' })
const res = await courseApi.startStudyForMF(currentCatalogue.value.id)
if (res.code === 0) {
uni.showToast({ title: '领取成功', icon: 'success' })
// 刷新页面数据
await loadPageData()
}
} catch (error) {
console.error('领取免费课程失败:', error)
} finally {
uni.hideLoading()
}
}
@@ -364,13 +387,17 @@ const handleGetFreeCourse = async () => {
const handlePurchase = async () => {
if (!currentCatalogue.value) return
isFudu.value = false
const res = await courseApi.getProductListForCourse(currentCatalogue.value.id)
if (res.code === 0 && res.productList.length > 0) {
goodsList.value = res.productList
showGoodsSelector.value = true
} else {
uni.showToast({ title: '此课程暂无购买方式', icon: 'none' })
try {
isFudu.value = false
const res = await courseApi.getProductListForCourse(currentCatalogue.value.id)
if (res.code === 0 && res.productList.length > 0) {
goodsList.value = res.productList
showGoodsSelector.value = true
} else {
uni.showToast({ title: '此课程暂无购买方式', icon: 'none' })
}
} catch (error) {
console.error('获取商品列表失败:', error)
}
}
@@ -380,14 +407,18 @@ const handlePurchase = async () => {
const handleRenew = async () => {
if (!currentCatalogue.value) return
isFudu.value = true
fuduCatalogueId.value = currentCatalogue.value.id
const res = await courseApi.getRenewProductList(currentCatalogue.value.id)
if (res.code === 0 && res.productList.length > 0) {
goodsList.value = res.productList
showGoodsSelector.value = true
} else {
uni.showToast({ title: '暂无复读方案', icon: 'none' })
try {
isFudu.value = true
fuduCatalogueId.value = currentCatalogue.value.id
const res = await courseApi.getRenewProductList(currentCatalogue.value.id)
if (res.code === 0 && res.productList.length > 0) {
goodsList.value = res.productList
showGoodsSelector.value = true
} else {
uni.showToast({ title: '暂无复读方案', icon: 'none' })
}
} catch (error) {
console.error('获取复读商品列表失败:', error)
}
}

View File

@@ -257,25 +257,29 @@ const handleFirstLevelClick = (item: string) => {
* 获取课程分类数据
*/
const getMedicalTags = async () => {
const res = await courseSubjectClassificationApi.getCourseMedicalTree()
if (res && res.code === 0) {
if (res.labels && res.labels.length > 0) {
curseTagList.value = res.labels
// 根据 currentIndex 设置初始选中的分类
if (res.labels[currentIndex.value]) {
const selectedTag = res.labels[currentIndex.value]
if (selectedTag.isLast === 0) {
// 非终极分类,显示子分类
if (selectedTag.children && selectedTag.children.length > 0) {
sbuMedicalTagsList.value = selectedTag.children
} else {
sbuMedicalTagsList.value = []
try {
const res = await courseSubjectClassificationApi.getCourseMedicalTree()
if (res && res.code === 0) {
if (res.labels && res.labels.length > 0) {
curseTagList.value = res.labels
// 根据 currentIndex 设置初始选中的分类
if (res.labels[currentIndex.value]) {
const selectedTag = res.labels[currentIndex.value]
if (selectedTag.isLast === 0) {
// 非终极分类,显示子分类
if (selectedTag.children && selectedTag.children.length > 0) {
sbuMedicalTagsList.value = selectedTag.children
} else {
sbuMedicalTagsList.value = []
}
}
}
} else {
curseTagList.value = []
}
} else {
curseTagList.value = []
}
} catch (error) {
console.error('获取医学课程分类失败:', error)
}
}
/**
@@ -305,9 +309,13 @@ const curseClick = (item: IMedicalTag, index: number) => {
*/
const soulCateList = ref<IMedicalTag[]>([])
const getSoulCateList = async () => {
const res = await courseSubjectClassificationApi.getCourseSoulTree()
if (res.labels&&res.labels.length>0) {
soulCateList.value = res.labels;
try {
const res = await courseSubjectClassificationApi.getCourseSoulTree()
if (res.labels&&res.labels.length>0) {
soulCateList.value = res.labels;
}
} catch (error) {
console.error('获取心理学课程分类失败:', error)
}
}
@@ -317,9 +325,13 @@ const getSoulCateList = async () => {
*/
const sociologyCateList = ref<IMedicalTag[]>([])
const getSociologyCateList = async () => {
const res = await courseSubjectClassificationApi.getCourseSociologyTree()
if (res.labels&&res.labels.length>0) {
sociologyCateList.value = res.labels;
try {
const res = await courseSubjectClassificationApi.getCourseSociologyTree()
if (res.labels&&res.labels.length>0) {
sociologyCateList.value = res.labels;
}
} catch (error) {
console.error('获取国学课程分类失败:', error)
}
}
@@ -357,13 +369,17 @@ const learnList = ref<ICourse[]>([]) // 观看记录列表
* 获取观看记录
*/
const getLearnCourse = async () => {
const res = await courseApi.getUserLateCourseList()
if (res && res.code === 0) {
if (res.page && res.page.length > 0) {
learnList.value = res.page
} else {
learnList.value = []
try {
const res = await courseApi.getUserLateCourseList()
if (res && res.code === 0) {
if (res.page && res.page.length > 0) {
learnList.value = res.page
} else {
learnList.value = []
}
}
} catch (error) {
console.error('获取观看记录失败:', error)
}
}
@@ -373,13 +389,17 @@ const newsList = ref<INews[]>([]) // 新闻列表
* 获取新闻列表
*/
const getNewsList = async () => {
const res = await commonApi.getMessageList(0, 1, 0)
if (res && res.code === 0) {
if (res.messages && res.messages.length > 0) {
newsList.value = res.messages
} else {
newsList.value = []
try {
const res = await commonApi.getMessageList(0, 1, 0)
if (res && res.code === 0) {
if (res.messages && res.messages.length > 0) {
newsList.value = res.messages
} else {
newsList.value = []
}
}
} catch (error) {
console.error('获取新闻列表失败:', error)
}
}
/**
@@ -403,17 +423,21 @@ const tryListenList = ref<ICourse[]>([]) // 试听课程列表
* 获取试听课程列表
*/
const getTryListenList = async () => {
const res = await courseApi.getMarketCourseList({
page: 1,
limit: 6,
id: 1
})
if (res && res.code === 0) {
if (res.courseList && res.courseList.records && res.courseList.records.length > 0) {
tryListenList.value = res.courseList.records
} else {
tryListenList.value = []
try {
const res = await courseApi.getMarketCourseList({
page: 1,
limit: 6,
id: 1
})
if (res && res.code === 0) {
if (res.courseList && res.courseList.records && res.courseList.records.length > 0) {
tryListenList.value = res.courseList.records
} else {
tryListenList.value = []
}
}
} catch (error) {
console.error('获取试听课程失败:', error)
}
}

View File

@@ -52,26 +52,30 @@ const subCategoryList = ref<ICategory[]>([]) // 子级分类列表
* 获取分类下的子级分类
*/
const getSubCategoryList = async () => {
let res: any = null
switch (subject.value) {
case '医学':
res = await courseSubjectClassificationApi.getCourseMedicalChildLabels(categoryId.value)
break
case '心理学':
res = await courseSubjectClassificationApi.getCourseSoulChildLabels(categoryId.value)
break
}
if (res && res.code === 0) {
if (res.labels && res.labels.length > 0) {
subCategoryList.value = res.labels
// 默认选中第一个tab
tab_category_id.value = res.labels[0].id
radio_category_id.value = res.labels[0].children[0] && res.labels[0].children[0].id || 0
} else {
subCategoryList.value = []
tab_category_id.value = 0
radio_category_id.value = 0
try {
let res: any = null
switch (subject.value) {
case '医学':
res = await courseSubjectClassificationApi.getCourseMedicalChildLabels(categoryId.value)
break
case '心理学':
res = await courseSubjectClassificationApi.getCourseSoulChildLabels(categoryId.value)
break
}
if (res && res.code === 0) {
if (res.labels && res.labels.length > 0) {
subCategoryList.value = res.labels
// 默认选中第一个tab
tab_category_id.value = res.labels[0].id
radio_category_id.value = res.labels[0].children[0] && res.labels[0].children[0].id || 0
} else {
subCategoryList.value = []
tab_category_id.value = 0
radio_category_id.value = 0
}
}
} catch (error) {
console.error('获取分类下的子级分类失败:', error)
}
}