OL-LearnPlatform/EXAM_INTEGRATION.md

245 lines
5.6 KiB
Markdown
Raw Normal View History

2025-08-04 02:13:12 +08:00
# 课程章节考试功能集成说明
## 🎯 功能目标
实现点击课程详情页面右侧课程章节中的考试部分,能够跳转到之前创建的考试页面功能。
## 📋 实现内容
### 1. 考试识别逻辑
```javascript
// 判断是否为考试课程
const isExamLesson = (section: CourseSection) => {
return section.name.includes('考试') || section.name.includes('测试')
}
```
### 2. 考试处理函数
#### 未报名状态页面 (CourseDetail.vue)
```javascript
const handleExam = (section: CourseSection) => {
console.log('开始考试:', section)
// 跳转到考前须知页面
router.push({
name: 'ExamNotice',
params: {
courseId: courseId.value,
sectionId: section.id
},
query: {
courseName: course.value?.title || '课程名称',
examName: section.name
}
})
}
```
#### 已报名状态页面 (CourseDetailEnrolled.vue)
```javascript
// 处理考试
const handleExam = (section: CourseSection) => {
console.log('开始考试:', section.name)
// 跳转到考前须知页面
router.push({
name: 'ExamNotice',
params: {
courseId: courseId.value.toString(),
sectionId: section.id.toString()
},
query: {
courseName: course.value?.title || '课程名称',
examName: section.name
}
})
}
```
### 3. 路由配置
```typescript
// router/index.ts 中已存在的路由
{
path: '/course/:courseId/exam/:sectionId/notice',
name: 'ExamNotice',
component: ExamNotice,
meta: {
title: '考前须知'
}
},
{
path: '/course/:courseId/exam/:sectionId',
name: 'Exam',
component: Exam,
meta: {
title: '在线考试'
}
}
```
## 🎨 用户界面
### 1. 考试章节显示
```html
<!-- 考试图标 - 可点击 -->
<button v-else-if="isExamLesson(section)"
class="lesson-action-btn exam-btn"
@click.stop="handleExam(section)">
<svg width="12" height="12" viewBox="0 0 16 16">
<rect x="2" y="2" width="12" height="12" rx="2" stroke="currentColor" stroke-width="1.5" fill="none"/>
<path d="M6 6h4M6 8h4M6 10h2" stroke="currentColor" stroke-width="1.5"/>
</svg>
</button>
```
### 2. 考试徽章样式
```css
.badge-exam {
background: #fff1f0;
color: #f5222d;
border: 1px solid #ffa39e;
}
.exam-btn {
color: #f5222d;
}
```
## 🚀 完整流程
### 1. 用户操作流程
```
1. 用户访问课程详情页面
2. 查看右侧课程章节列表
3. 找到考试类型的章节(红色徽章标识)
4. 点击考试章节或考试图标
5. 跳转到考前须知页面
6. 阅读考试说明
7. 点击"开始考试"按钮
8. 进入正式考试页面
```
### 2. 页面跳转路径
```
课程详情页面
/course/1 或 /course/1/enrolled
↓ 点击考试章节
考前须知页面
/course/1/exam/15/notice
↓ 点击开始考试
正式考试页面
/course/1/exam/15
```
### 3. 参数传递
```javascript
// 传递的参数
{
params: {
courseId: '1', // 课程ID
sectionId: '15' // 章节ID考试ID
},
query: {
courseName: '课程标题', // 课程名称
examName: '期末考试' // 考试名称
}
}
```
## 📱 模拟数据
### 考试章节示例
```javascript
// 模拟数据中的考试章节
{
id: 15,
lessonId: courseId.value,
name: '期末考试', // 包含"考试"关键词,会被识别为考试类型
outline: '',
parentId: 0,
sort: 15,
level: 1,
revision: 1,
createdAt: Date.now(),
updatedAt: Date.now(),
deletedAt: null,
completed: false,
duration: undefined
}
```
### 考试类型识别
- **名称包含"考试"**:期末考试、中期考试、单元考试
- **名称包含"测试"**:能力测试、知识测试、技能测试
## 🎯 视觉效果
### 1. 未报名状态
```
第三章 实战项目
├── 📹 项目一:计算器开发 (灰色不可点击)
├── 📄 项目源码下载 (灰色不可点击)
├── 📝 作业:完成个人项目 (灰色不可点击)
└── 🎯 期末考试 (灰色不可点击)
```
### 2. 已报名状态
```
第三章 实战项目
├── 📹 项目一:计算器开发 (蓝色可点击)
├── 📄 项目源码下载 (绿色可点击)
├── 📝 作业:完成个人项目 (橙色可点击)
└── 🎯 期末考试 (红色可点击) ← 点击跳转到考试
```
## 🔧 技术实现
### 1. 考试识别
- 通过章节名称关键词识别
- 自动应用红色徽章样式
- 显示考试图标
### 2. 路由跳转
- 使用 `router.push()` 进行页面跳转
- 传递课程ID和章节ID作为路由参数
- 传递课程名称和考试名称作为查询参数
### 3. 状态管理
- 未报名用户点击考试:显示报名提示
- 已报名用户点击考试:直接跳转到考前须知
## ✅ 测试验证
### 1. 功能测试
1. **访问已报名状态页面**`/course/1/enrolled`
2. **找到考试章节**:第三章中的"期末考试"
3. **验证样式**:红色徽章,考试图标
4. **点击测试**:点击考试章节或图标
5. **验证跳转**:应该跳转到 `/course/1/exam/15/notice`
6. **参数验证**:检查页面是否正确显示课程名称和考试名称
### 2. 路径验证
- ✅ 课程详情页面 → 考前须知页面
- ✅ 考前须知页面 → 正式考试页面
- ✅ 参数正确传递
- ✅ 页面正常显示
## 🎉 集成完成
现在用户可以:
1. 在课程章节中看到考试内容(红色徽章标识)
2. 点击考试章节跳转到考前须知页面
3. 在考前须知页面了解考试规则
4. 点击开始考试进入正式考试界面
5. 完成完整的考试流程
考试功能已完全集成到课程学习流程中!🚀