7.7 KiB
7.7 KiB
已报名状态课程详情页面创建说明
🎯 创建目标
基于未报名状态下的页面样式和布局,重新创建一个已报名成功状态下的课程详情页面,该页面具有:
- 相同的样式和布局结构
- 右侧课程章节显示为彩色且可点击
- 点击视频按钮可以正常播放
- 完整的学习功能和进度跟踪
📋 新页面特性
1. 页面结构
CourseDetailEnrolled.vue
├── 面包屑导航
├── 视频播放器区域(可播放视频)
├── 课程信息区域
│ ├── 课程标题和元信息
│ ├── 课程描述
│ ├── 讲师信息
│ └── 课程标签页(介绍/评论)
└── 右侧边栏
├── 学习进度显示
├── 课程章节列表(彩色可点击)
└── 推荐课程
2. 核心功能差异
未报名状态页面:
- 课程章节:灰色不可点击
- 视频区域:显示报名提示
- 操作按钮:立即报名
已报名状态页面:
- 课程章节:彩色可点击
- 视频区域:可播放视频
- 学习进度:显示学习进度条
- 操作功能:完整的学习功能
3. 视频播放功能
<div class="video-container">
<video
v-if="currentVideoUrl"
:src="currentVideoUrl"
controls
class="video-element"
@loadstart="handleVideoLoadStart"
@canplay="handleVideoCanPlay"
@error="handleVideoError">
您的浏览器不支持视频播放
</video>
<div v-else class="video-placeholder">
<div class="placeholder-content">
<div class="play-icon">...</div>
<p>请选择要播放的视频课程</p>
</div>
</div>
</div>
4. 学习进度跟踪
<div class="progress-section">
<div class="progress-header">
<h3>学习进度</h3>
<span class="progress-text">{{ completedLessons }}/{{ totalSections }}</span>
</div>
<div class="progress-bar">
<div class="progress-fill" :style="{ width: progress + '%' }"></div>
</div>
<p class="progress-desc">已完成 {{ progress }}%</p>
</div>
🎨 样式特点
1. 彩色课程章节
/* 课程类型徽章彩色样式 */
.badge-video {
background: #e6f7ff;
color: #1890ff;
border: 1px solid #91d5ff;
}
.badge-resource {
background: #f6ffed;
color: #52c41a;
border: 1px solid #b7eb8f;
}
.badge-homework {
background: #fff2e6;
color: #fa8c16;
border: 1px solid #ffd591;
}
.badge-exam {
background: #fff1f0;
color: #f5222d;
border: 1px solid #ffa39e;
}
2. 可点击交互
.lesson-content {
cursor: pointer;
transition: all 0.3s;
}
.lesson-content:hover {
background: #f8f9fa;
}
.lesson-content:hover .lesson-title {
color: #1890ff;
}
/* 操作按钮彩色样式 */
.video-btn { color: #1890ff; }
.download-btn { color: #52c41a; }
.edit-btn { color: #fa8c16; }
.exam-btn { color: #f5222d; }
3. 学习进度样式
.progress-bar {
width: 100%;
height: 8px;
background: #f0f0f0;
border-radius: 4px;
overflow: hidden;
}
.progress-fill {
height: 100%;
background: linear-gradient(90deg, #1890ff, #52c41a);
border-radius: 4px;
transition: width 0.3s ease;
}
🔧 功能实现
1. 视频播放处理
// 处理视频播放 - 已报名状态,可以正常播放
const handleVideoPlay = (section: CourseSection) => {
console.log('播放视频:', section.name, section.outline)
currentVideoUrl.value = section.outline || ''
currentSection.value = section
// 标记为已完成
if (!section.completed) {
section.completed = true
// 重新计算进度
const completed = courseSections.value.filter(s => s.completed).length
completedLessons.value = completed
progress.value = Math.round((completed / courseSections.value.length) * 100)
}
}
2. 学习进度计算
// 计算学习进度
const loadMockData = () => {
const mockSections = generateMockSections()
courseSections.value = mockSections
groupedSections.value = groupSectionsByChapter(mockSections)
// 计算学习进度
const completed = mockSections.filter(section => section.completed).length
completedLessons.value = completed
totalSections.value = mockSections.length
progress.value = Math.round((completed / mockSections.length) * 100)
}
3. 章节点击处理
// 处理章节点击 - 已报名状态,可以正常点击
const handleSectionClick = (section: CourseSection) => {
console.log('点击课程章节:', section.name)
currentSection.value = section
// 根据类型执行不同操作
if (isVideoLesson(section)) {
handleVideoPlay(section)
} else if (isResourceLesson(section)) {
handleDownload(section)
} else if (isHomeworkLesson(section)) {
handleHomework(section)
} else if (isExamLesson(section)) {
handleExam(section)
}
}
🚀 路由配置
1. 新增路由
// router/index.ts
{
path: '/course/:id/enrolled',
name: 'CourseDetailEnrolled',
component: CourseDetailEnrolled,
meta: {
title: '课程详情 - 已报名'
}
}
2. 跳转逻辑
// 原CourseDetail页面报名成功后跳转
setTimeout(() => {
enrollSuccessVisible.value = false
// 跳转到已报名状态页面
router.push(`/course/${courseId.value}/enrolled`)
}, 2000)
📱 用户体验流程
完整的学习体验
- 未报名状态:
/course/1
- 灰色不可点击章节 - 点击报名:显示报名确认弹窗
- 报名成功:显示成功提示"正在跳转到已报名状态页面..."
- 自动跳转:跳转到
/course/1/enrolled
- 已报名状态:彩色可点击章节,可播放视频
- 学习功能:
- 点击视频章节 → 播放视频
- 点击资料章节 → 下载资源
- 点击作业章节 → 打开作业
- 点击考试章节 → 开始考试
- 自动更新学习进度
视觉对比
未报名页面 (/course/1
):
课程章节 ⋮ 正序
─────────────────────────────────
第一章 课前准备 (灰色)
├── 📹 开课彩蛋 (灰色不可点击)
├── 📹 课程定位 (灰色不可点击)
└── ...
[立即报名] 按钮
已报名页面 (/course/1/enrolled
):
学习进度: 3/24 (12%)
▓▓░░░░░░░░░░░░░░░░░░ 12%
课程章节 ⋮ 正序
─────────────────────────────────
第一章 课前准备 (正常色)
├── 📹 开课彩蛋 (蓝色可点击) ✓
├── 📹 课程定位 (蓝色可点击) ✓
├── 📹 学习建议 (蓝色可点击) ✓
└── 📄 准备PPT (绿色可点击)
第二章 程序设计基础知识
├── 📹 程序设计入门 (蓝色可点击) ✓
├── 📄 操作PPT (绿色可点击)
└── ...
✅ 功能特点
已报名状态页面优势
- 完整学习体验:视频播放、资源下载、作业考试
- 进度跟踪:实时显示学习进度和完成状态
- 彩色交互:直观的颜色区分不同类型内容
- 响应式设计:适配不同屏幕尺寸
- 状态持久化:学习进度和完成状态保存
与未报名页面的区别
- 视觉效果:彩色 vs 灰色
- 交互能力:可点击 vs 不可点击
- 功能完整性:完整学习功能 vs 仅预览
- 进度跟踪:有进度显示 vs 无进度显示
现在您有了两个独立的页面:
/course/:id
- 未报名状态(灰色不可点击)/course/:id/enrolled
- 已报名状态(彩色可点击)
用户报名成功后会自动跳转到已报名状态页面,体验完整的学习功能!🎉