5.6 KiB
5.6 KiB
课程章节考试功能集成说明
🎯 功能目标
实现点击课程详情页面右侧课程章节中的考试部分,能够跳转到之前创建的考试页面功能。
📋 实现内容
1. 考试识别逻辑
// 判断是否为考试课程
const isExamLesson = (section: CourseSection) => {
return section.name.includes('考试') || section.name.includes('测试')
}
2. 考试处理函数
未报名状态页面 (CourseDetail.vue)
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)
// 处理考试
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. 路由配置
// 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. 考试章节显示
<!-- 考试图标 - 可点击 -->
<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. 考试徽章样式
.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. 参数传递
// 传递的参数
{
params: {
courseId: '1', // 课程ID
sectionId: '15' // 章节ID(考试ID)
},
query: {
courseName: '课程标题', // 课程名称
examName: '期末考试' // 考试名称
}
}
📱 模拟数据
考试章节示例
// 模拟数据中的考试章节
{
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. 功能测试
- 访问已报名状态页面:
/course/1/enrolled
- 找到考试章节:第三章中的"期末考试"
- 验证样式:红色徽章,考试图标
- 点击测试:点击考试章节或图标
- 验证跳转:应该跳转到
/course/1/exam/15/notice
- 参数验证:检查页面是否正确显示课程名称和考试名称
2. 路径验证
- ✅ 课程详情页面 → 考前须知页面
- ✅ 考前须知页面 → 正式考试页面
- ✅ 参数正确传递
- ✅ 页面正常显示
🎉 集成完成
现在用户可以:
- 在课程章节中看到考试内容(红色徽章标识)
- 点击考试章节跳转到考前须知页面
- 在考前须知页面了解考试规则
- 点击开始考试进入正式考试界面
- 完成完整的考试流程
考试功能已完全集成到课程学习流程中!🚀