精品课

This commit is contained in:
haomingming
2025-08-25 14:17:06 +08:00
parent 979c332454
commit 0de0b6732b
22 changed files with 3392 additions and 716 deletions
+75 -41
View File
@@ -6,7 +6,7 @@
<view class="nav-left" @click="goBack">
<uni-icons type="left" size="24" color="#333"></uni-icons>
</view>
<view class="nav-title">课程详情02</view>
<view class="nav-title">{{ courseDetail.title || '肝硬化与重症肝病' }}</view>
<view class="nav-right" @click="goShare">
<uni-icons type="redo" size="24" color="#333"></uni-icons>
</view>
@@ -106,7 +106,7 @@
<!-- 课程目录内容 -->
<view class="course-catalog" v-if="activeTab === 'catalog'">
<!-- 课程概览 -->
<view class="catalog-overview">
<!-- <view class="catalog-overview">
<view class="overview-item">
<text class="overview-label">总课时</text>
<text class="overview-value">{{ courseDetail.video_num || 0 }}节课</text>
@@ -119,7 +119,7 @@
<text class="overview-label">学习进度</text>
<text class="overview-value">{{ courseDetail.study_status || 0 }}%</text>
</view>
</view>
</view> -->
<!-- 课程章节列表 -->
<view class="chapter-list">
@@ -130,14 +130,14 @@
<uni-icons :type="chapter.expanded ? 'down' : 'right'" size="16" color="#666"></uni-icons>
<text class="chapter-name">{{ chapter.title }}</text>
</view>
<view class="chapter-meta">
<!-- <view class="chapter-meta">
<text class="lesson-count">{{ chapter.lessons.length }}节课</text>
<text class="duration">{{ chapter.duration }}</text>
</view>
</view> -->
</view>
<view class="chapter-status">
<!-- <view class="chapter-status">
<text class="status-text" :class="chapter.status">{{ chapter.statusText }}</text>
</view>
</view> -->
</view>
<!-- 课时列表 -->
@@ -150,7 +150,7 @@
</view>
<view class="lesson-meta">
<text class="lesson-duration">{{ lesson.duration }}</text>
<text class="lesson-teacher">{{ lesson.teacher }}</text>
<!-- <text class="lesson-teacher">{{ lesson.teacher }}</text> -->
</view>
</view>
<view class="lesson-status">
@@ -168,7 +168,9 @@
<text class="review-title">课程评价</text>
<view class="review-actions-header">
<text class="review-count">共{{ reviewTotal || courseDetail.comment_num || 0 }}条评价</text>
<button class="write-review-btn" @click="goToReview" v-if="courseDetail.is_buy === 1">写评价</button>
<button class="write-review-btn" @click="goToReview" v-if="courseDetail.is_buy === 1">
{{ courseDetail.is_commented === 1 ? '追加评论' : '写评价' }}
</button>
</view>
</view>
@@ -254,7 +256,15 @@
<uni-icons type="chat" size="80" color="#E0E0E0"></uni-icons>
</view>
<text class="empty-text">暂无评价</text>
<text class="empty-desc">成为第一个评价的人吧</text>
<text class="empty-desc" v-if="courseDetail.is_buy === 1 && courseDetail.is_commented === 1">
您已经评价过此课程,可以追加评论
</text>
<text class="empty-desc" v-else-if="courseDetail.is_buy === 1">
成为第一个评价的人吧
</text>
<text class="empty-desc" v-else>
购买课程后即可评价
</text>
</view>
<!-- 加载中状态 -->
@@ -268,15 +278,17 @@
</view>
<!-- 底部购买栏 -->
<view class="bottom-bar">
<view class="bottom-bar" v-if="courseDetail.is_buy === 0">
<view class="price-section">
<text class="price">¥{{ currentPriceYuan.toFixed(2) }}</text>
<text class="price" >¥{{ currentPriceYuan.toFixed(2) }}</text>
</view>
<view class="buy-section">
<button class="buy-btn" @click="goBuy" v-if="courseDetail.is_buy === 0">{{ courseDetail.is_buy === 0 ? '立即购买' : '已购买' }}</button>
<button class="buy-btn" @click="goStudy" v-else style="background-color: #4CAF50;">开始学习</button>
<button class="buy-btn" @click="goBuy" >立即购买</button>
</view>
</view>
<view class="bottom-bar" v-else>
<button class="buy-btn" @click="goStudy" style=" width: 100%;background-color: #4CAF50;color: #fff;">开始学习</button>
</view>
</view>
</template>
@@ -569,48 +581,70 @@ const submitReply = (reviewId) => {
return
}
// 找到对应的评价
const review = reviewList.value.find(item => item.id === reviewId)
if (review) {
// 添加新回复
const newReply = {
id: Date.now(),
userName: '我',
avatar: '/static/icon_home_my_patient.png',
time: new Date().toLocaleDateString(),
content: replyText.value.trim(),
isAuthor: false
}
if (!review.replies) {
review.replies = []
}
review.replies.push(newReply)
// 重置状态
activeReplyId.value = null
replyText.value = ''
uni.showToast({
title: '回复成功',
icon: 'success'
course_api.addExcellencourseComment({
excellentcourse_id: courseId.value,
comment: replyText.value.trim(),
p_id: reviewId,
star:0,
type:0
}).then(res => {
console.log('评价提交结果:', res)
if(res.code == 200){
uni.hideLoading()
// 添加新回复
const newReply = {
id: Date.now(),
userName: '我',
avatar: '/static/icon_home_my_patient.png',
time: new Date().toLocaleDateString(),
content: replyText.value.trim(),
isAuthor: false
}
if (!review.replies) {
review.replies = []
}
review.replies.push(newReply)
// 重置状态
activeReplyId.value = null
replyText.value = ''
uni.showToast({
title: '回复成功',
icon: 'success'
})
}
})
}
}
const goToReview = () => {
uni.navigateTo({
url: '/pages_course/course_review/course_review'
url: '/pages_course/course_review/course_review?id=' + courseId.value + '&is_commented=' + courseDetail.value.is_commented
})
}
const getCourseDetail = () => {
course_api.excellencourseDetail(courseId.value).then(res => {
course_api.excellencourseDetail(courseId.value).then(res => {
console.log('课程详情数据:', res)
if(res.code == 200){
const data = res.data
courseDetail.value = data
// 调试 is_commented 字段
console.log('is_commented 字段值:', data.is_commented)
console.log('is_buy 字段值:', data.is_buy)
// 更新页面数据
updatePageData(data)
// 优惠价格与倒计时
@@ -694,8 +728,8 @@ const updatePageData = (data) => {
title: lesson.title,
duration: lesson.time || '未知时长',
teacher: teacherName,
status: (data.is_buy === 1 || data.type === 0) ? 'unlocked' : 'locked',
statusText: (data.is_buy === 1 || data.type === 0) ? (data.type === 0 ? '试播' : '已解锁') : '未解锁',
status: (data.is_buy === 1 || lesson.type === 0) ? 'unlocked' : 'locked',
statusText: (data.is_buy === 1 || lesson.type === 0) ? (lesson.type === 0 ? '试播' : '已解锁') : '未解锁',
vid: lesson.vid,
type: lesson.type
}
@@ -1570,7 +1604,7 @@ onUnmounted(() => {
border-top: 1rpx solid #e5e5e5;
display: flex;
align-items: center;
padding: 0 24rpx;
padding: 0 24rpx 20rpx 24rpx;
z-index: 999;
.price-section {