OL-LearnPlatform/ENROLLED_PAGE_CREATION.md
2025-08-04 02:13:12 +08:00

298 lines
7.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 已报名状态课程详情页面创建说明
## 🎯 创建目标
基于未报名状态下的页面样式和布局,重新创建一个已报名成功状态下的课程详情页面,该页面具有:
1. 相同的样式和布局结构
2. 右侧课程章节显示为彩色且可点击
3. 点击视频按钮可以正常播放
4. 完整的学习功能和进度跟踪
## 📋 新页面特性
### 1. 页面结构
```
CourseDetailEnrolled.vue
├── 面包屑导航
├── 视频播放器区域(可播放视频)
├── 课程信息区域
│ ├── 课程标题和元信息
│ ├── 课程描述
│ ├── 讲师信息
│ └── 课程标签页(介绍/评论)
└── 右侧边栏
├── 学习进度显示
├── 课程章节列表(彩色可点击)
└── 推荐课程
```
### 2. 核心功能差异
**未报名状态页面**
- 课程章节:灰色不可点击
- 视频区域:显示报名提示
- 操作按钮:立即报名
**已报名状态页面**
- 课程章节:彩色可点击
- 视频区域:可播放视频
- 学习进度:显示学习进度条
- 操作功能:完整的学习功能
### 3. 视频播放功能
```html
<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. 学习进度跟踪
```html
<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. 彩色课程章节
```css
/* 课程类型徽章彩色样式 */
.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. 可点击交互
```css
.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. 学习进度样式
```css
.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. 视频播放处理
```javascript
// 处理视频播放 - 已报名状态,可以正常播放
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. 学习进度计算
```javascript
// 计算学习进度
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. 章节点击处理
```javascript
// 处理章节点击 - 已报名状态,可以正常点击
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. 新增路由
```typescript
// router/index.ts
{
path: '/course/:id/enrolled',
name: 'CourseDetailEnrolled',
component: CourseDetailEnrolled,
meta: {
title: '课程详情 - 已报名'
}
}
```
### 2. 跳转逻辑
```javascript
// 原CourseDetail页面报名成功后跳转
setTimeout(() => {
enrollSuccessVisible.value = false
// 跳转到已报名状态页面
router.push(`/course/${courseId.value}/enrolled`)
}, 2000)
```
## 📱 用户体验流程
### 完整的学习体验
1. **未报名状态**`/course/1` - 灰色不可点击章节
2. **点击报名**:显示报名确认弹窗
3. **报名成功**:显示成功提示"正在跳转到已报名状态页面..."
4. **自动跳转**:跳转到 `/course/1/enrolled`
5. **已报名状态**:彩色可点击章节,可播放视频
6. **学习功能**
- 点击视频章节 → 播放视频
- 点击资料章节 → 下载资源
- 点击作业章节 → 打开作业
- 点击考试章节 → 开始考试
- 自动更新学习进度
### 视觉对比
**未报名页面** (`/course/1`)
```
课程章节 ⋮ 正序
─────────────────────────────────
第一章 课前准备 (灰色)
├── 📹 开课彩蛋 (灰色不可点击)
├── 📹 课程定位 (灰色不可点击)
└── ...
[立即报名] 按钮
```
**已报名页面** (`/course/1/enrolled`)
```
学习进度: 3/24 (12%)
▓▓░░░░░░░░░░░░░░░░░░ 12%
课程章节 ⋮ 正序
─────────────────────────────────
第一章 课前准备 (正常色)
├── 📹 开课彩蛋 (蓝色可点击) ✓
├── 📹 课程定位 (蓝色可点击) ✓
├── 📹 学习建议 (蓝色可点击) ✓
└── 📄 准备PPT (绿色可点击)
第二章 程序设计基础知识
├── 📹 程序设计入门 (蓝色可点击) ✓
├── 📄 操作PPT (绿色可点击)
└── ...
```
## ✅ 功能特点
### 已报名状态页面优势
1. **完整学习体验**:视频播放、资源下载、作业考试
2. **进度跟踪**:实时显示学习进度和完成状态
3. **彩色交互**:直观的颜色区分不同类型内容
4. **响应式设计**:适配不同屏幕尺寸
5. **状态持久化**:学习进度和完成状态保存
### 与未报名页面的区别
- **视觉效果**:彩色 vs 灰色
- **交互能力**:可点击 vs 不可点击
- **功能完整性**:完整学习功能 vs 仅预览
- **进度跟踪**:有进度显示 vs 无进度显示
现在您有了两个独立的页面:
- `/course/:id` - 未报名状态(灰色不可点击)
- `/course/:id/enrolled` - 已报名状态(彩色可点击)
用户报名成功后会自动跳转到已报名状态页面,体验完整的学习功能!🎉