hookehuyr

feat(课程详情页): 添加课程大纲展开/收起功能

为了优化用户体验,当课程大纲条目超过4条时,默认显示前4条,并提供展开/收起按钮,点击按钮可查看全部或收起部分条目
......@@ -78,10 +78,15 @@
<div v-if="activeTab === '课程大纲'">
<div class="space-y-4">
<div v-for="(item, index) in course?.schedule" :key="index" class="border-l-2 border-green-500 pl-3">
<div v-for="(item, index) in displayedSchedule" :key="index" class="border-l-2 border-green-500 pl-3">
<h4 class="font-medium text-gray-800">{{ item.title }}</h4>
<p class="text-sm text-gray-600 mt-1">{{ item.duration }}分钟 · {{ item.schedule_time || '空数据' }}个小节</p>
</div>
<div v-if="course?.schedule?.length > 4" class="flex justify-center mt-4">
<button @click="toggleSchedule" class="p-2 rounded-full hover:bg-green-50 text-green-600 hover:text-green-700 transition-all duration-300">
<van-icon :name="isScheduleExpanded ? 'arrow-down' : 'arrow-up'" class="text-xl transform transition-transform duration-300" />
</button>
</div>
</div>
</div>
......@@ -399,6 +404,22 @@ onMounted(async () => {
}
}
})
const isScheduleExpanded = ref(false)
// 计算显示的课程大纲列表
const displayedSchedule = computed(() => {
if (!course.value?.schedule) return []
return isScheduleExpanded.value || course.value.schedule.length <= 4
? course.value.schedule
: course.value.schedule.slice(0, 4)
})
// 切换课程大纲展开/收起状态
const toggleSchedule = () => {
isScheduleExpanded.value = !isScheduleExpanded.value
}
</script>
<style scoped>
......