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

245 lines
5.6 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. 考试识别逻辑
```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. 完成完整的考试流程
考试功能已完全集成到课程学习流程中!🚀