| | |
| | | <div class="answer-wrapper answer-right grow shadow-xl p-4"> |
| | | <div class="wrapper h-full flex flex-col"> |
| | | <div class="title-wrapper w-full flex mb-5"> |
| | | <div class="title text-xl font-semibold ">单选题 (3分)</div> |
| | | <div class="title text-xl font-semibold ">{{ examType[currentType] }} ({{ examStore.getActiveQuestion.score}}分)</div> |
| | | </div> |
| | | |
| | | <div class="main-wrapper w-full grow relative my-5"> |
| | |
| | | </div> |
| | | |
| | | |
| | | <!-- 提示弹窗 --> |
| | | <!-- 退出考试提示弹窗 --> |
| | | <el-dialog v-model="dialogVisible" title="注意" width="500"> |
| | | <div class="dialog-container"> |
| | | <p>请确认是否退出当前考试</p> |
| | | <p>当前考试试卷会自动提交,后续无法继续作答</p> |
| | | <p>当前考试试卷会自动提交,后续将无法继续作答</p> |
| | | </div> |
| | | <template #footer> |
| | | <div class="dialog-footer"> |
| | |
| | | </template> |
| | | |
| | | <script setup> |
| | | import { ref, toRefs } from 'vue'; |
| | | import { ref, watchEffect } from 'vue'; |
| | | import { storeToRefs } from 'pinia'; |
| | | import { Close } from '@element-plus/icons-vue'; |
| | | import AnswerTag from './components/answer-tag/index.vue'; |
| | |
| | | import AnswerMultiple from './components/answer-main/answer-multiple/index.vue'; |
| | | import AnswerTime from './components/answer-time/index.vue'; |
| | | import { useExamStore } from '@/store/index.js'; |
| | | import { useRouter } from 'vue-router'; |
| | | |
| | | const router = useRouter(); |
| | | |
| | | const examStore = useExamStore(); |
| | | const { currentType, currentIndex, activeQuestion, examDetail } = storeToRefs(examStore); |
| | | const { currentType, currentIndex, examDetail, examType } = storeToRefs(examStore); |
| | | |
| | | const typeComponent = { |
| | | 1: AnswerSingle, |
| | | 2: AnswerMultiple, |
| | | }; |
| | | examStore.setActiveQuestion(examDetail.value[0].questionList[0]); |
| | | |
| | | const dialogVisible = ref(false); |
| | | |
| | |
| | | if (typeQuestion) { |
| | | if (currentIndex.value >= typeQuestion.questionList.length) { |
| | | tempIndex++; |
| | | if(examDetail.value[tempIndex]) { |
| | | if (examDetail.value[tempIndex]) { |
| | | currentType.value = examDetail.value[tempIndex].questionType; |
| | | currentIndex.value = 0; |
| | | } else { |
| | | currentType.value = typeQuestion.questionType; |
| | | currentIndex.value = typeQuestion.questionList.length - 1; |
| | | } |
| | | |
| | | |
| | | } else if (currentIndex.value < 0) { |
| | | tempIndex--; |
| | | if(examDetail.value[tempIndex]) { |
| | | if (examDetail.value[tempIndex]) { |
| | | currentType.value = examDetail.value[tempIndex].questionType; |
| | | currentIndex.value = examDetail.value[tempIndex].questionList.length - 1; |
| | | } else { |
| | |
| | | currentIndex.value = 0; |
| | | } |
| | | } |
| | | findQuestion(currentType.value, currentIndex.value); |
| | | // findQuestion(currentType.value, currentIndex.value); |
| | | } |
| | | |
| | | }; |
| | |
| | | |
| | | const confirmCancel = () => { |
| | | dialogVisible.value = false; |
| | | router.back(); |
| | | }; |
| | | |
| | | watchEffect(() => { |
| | | let progress = 0; |
| | | examDetail.value.forEach(item => { |
| | | item.questionList.forEach(question => { |
| | | if (question.correct) { |
| | | progress += 1; |
| | | } |
| | | }); |
| | | }); |
| | | examStore.setProgress(progress); |
| | | }); |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |