使用vue+element ui完成的考试测试功能Demo
由于原始代码较为复杂且不包含具体的业务逻辑,我们可以提供一个简化版的Vue组件,使用Element UI来实现考试界面的基本布局和样式。
<template>
<div class="exam-container">
<el-row :gutter="20">
<el-col :span="16">
<!-- 显示试题内容 -->
<el-card class="question-card">
<div slot="header">
<span>{{ currentQuestionIndex + 1 }}. {{ currentQuestion.title }}</span>
</div>
<div v-html="currentQuestion.content"></div>
</el-card>
</el-col>
<el-col :span="8">
<!-- 显示考试时间和控制按钮 -->
<el-card class="timer-card">
<div slot="header">
<span>考试控制</span>
</div>
<div>
<p>剩余时间:{{ timeRemaining }}</p>
<el-button type="primary" @click="submitExam">提交考试</el-button>
</div>
</el-card>
</el-col>
</el-row>
</div>
</template>
<script>
export default {
name: 'ExamDemo',
data() {
return {
// 假定的考试题目
questions: [
{ id: 1, title: '问题1', content: '<p>问题1的内容</p>' },
// ...更多问题
],
currentQuestionIndex: 0,
timer: null, // 计时器
totalTime: 300, // 假定考试总时间为300秒
};
},
computed: {
currentQuestion() {
return this.questions[this.currentQuestionIndex];
},
timeRemaining() {
// 计算剩余时间
return this.formatTime(this.totalTime - this.elapsedTime);
},
elapsedTime() {
// 已过时间
return Math.floor(Date.now() / 1000);
}
},
methods: {
formatTime(seconds) {
// 格式化时间
const m = Math.floor(seconds / 60);
const s = seconds % 60;
return `${m.toString().padStart(2, '0')}:${s.toString().padStart(2, '0')}`;
},
submitExam() {
// 提交考试逻辑
console.log('提交考试...');
// 清除计时器
clearInterval(this.timer);
},
startTimer() {
// 开始计时
this.timer = setInterval(() => {
if (this.totalTime - this.elapsedTime <= 0) {
// 时间到,提交考试
this.submitExam();
}
}, 1000);
}
},
created() {
// 组件创建时开始计时
this.startTimer();
},
destroyed() {
// 清除计时器
if (this.timer) {
clearInterval(this.timer);
}
}
};
</script>
<style scoped>
.exam-container {
padding: 20px;
}
.question-card, .timer-card {
margin-bottom: 20px;
}
</style>
这个简化版的Vue组件使用了Element UI的<el-row>
和<el-col>
组件来进行布局,并使用了<el-card>
组件来显示试题和控制信息。计时器逻辑被抽象为\`sta
评论已关闭