From c6f680f1c6ef9fa990c654633767b5b3ad4b0aff Mon Sep 17 00:00:00 2001 From: ZhangXianQiang <1135831638@qq.com> Date: 星期四, 13 六月 2024 14:58:27 +0800 Subject: [PATCH] fix(考试):修改答题卡选择问题 --- src/views/exam/index.vue | 108 +++++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 98 insertions(+), 10 deletions(-) diff --git a/src/views/exam/index.vue b/src/views/exam/index.vue index aaf82e4..65c156c 100644 --- a/src/views/exam/index.vue +++ b/src/views/exam/index.vue @@ -7,9 +7,17 @@ <div class="title-container text-3xl font-semibold text-white mr-8"> 娴嬭瘯娴嬭瘯娴嬭瘯 </div> - <AnswerTime></AnswerTime> + <div class="return-container grow flex justify-end"> + <el-button type="danger" size="large" circle @click="closeClick"> + <template #icon> + <el-icon :size="20"> + <Close /> + </el-icon> + </template> + </el-button> + </div> </div> <div class="exam-main grow flex justify-between"> @@ -48,7 +56,7 @@ <div class="main-wrapper w-full grow relative my-5"> <div class="main-content absolute top-0 bottom-0 w-full"> <Transition appear name="fade-transform" mode="out-in"> - <component :is="typeComponent[currentType]" :key="questionIndex"></component> + <component :is="typeComponent[currentType]" :key="currentIndex"></component> </Transition> </div> </div> @@ -68,33 +76,112 @@ </div> </div> </div> + + + <!-- 鎻愮ず寮圭獥 --> + <el-dialog v-model="dialogVisible" title="娉ㄦ剰" width="500"> + <div class="dialog-container"> + <p>璇风‘璁ゆ槸鍚﹂��鍑哄綋鍓嶈�冭瘯</p> + <p>褰撳墠鑰冭瘯璇曞嵎浼氳嚜鍔ㄦ彁浜�,鍚庣画鏃犳硶缁х画浣滅瓟</p> + </div> + <template #footer> + <div class="dialog-footer"> + <el-button @click="dialogVisible = false">鍙栨秷</el-button> + <el-button type="primary" @click="confirmCancel"> + 纭畾 + </el-button> + </div> + </template> + </el-dialog> </div> </template> <script setup> -import {ref} from 'vue'; +import { ref, toRefs } from 'vue'; +import { storeToRefs } from 'pinia'; +import { Close } from '@element-plus/icons-vue'; import AnswerTag from './components/answer-tag/index.vue'; import AnswerProgress from './components/answer-progress/index.vue'; import AnswerSheet from './components/answer-sheet/index.vue'; import AnswerSingle from './components/answer-main/answer-single/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'; + +const examStore = useExamStore(); +const { currentType, currentIndex, activeQuestion, examDetail } = storeToRefs(examStore); const typeComponent = { 1: AnswerSingle, 2: AnswerMultiple, -} +}; +examStore.setActiveQuestion(examDetail.value[0].questionList[0]); -const currentType = ref(1); -const questionIndex = ref(0); +const dialogVisible = ref(false); const prevQuestion = () => { - questionIndex.value--; -} + currentIndex.value--; + checkList(); +}; const nextQuestion = () => { - questionIndex.value++; -} + currentIndex.value++; + checkList(); +}; + +const checkList = () => { + let tempIndex = 0; + const typeQuestion = examDetail.value.find((typeItem, index) => { + if (typeItem.questionType === currentType.value) { + tempIndex = index; + return typeItem; + } else { + return false; + } + }); + if (typeQuestion) { + if (currentIndex.value >= typeQuestion.questionList.length) { + 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]) { + currentType.value = examDetail.value[tempIndex].questionType; + currentIndex.value = examDetail.value[tempIndex].questionList.length - 1; + } else { + currentType.value = typeQuestion.questionType; + currentIndex.value = 0; + } + } + findQuestion(currentType.value, currentIndex.value); + } + +}; + +const findQuestion = (type, index) => { + const typeQuestion = examDetail.value.find(typeItem => typeItem.questionType === type); + if (typeQuestion) { + const question = typeQuestion.questionList[index]; + if (question) { + examStore.setActiveQuestion(question); + } + } +}; + +const closeClick = () => { + dialogVisible.value = true; +}; + +const confirmCancel = () => { + dialogVisible.value = false; +}; </script> <style lang="scss" scoped> @@ -142,6 +229,7 @@ width: 160px; height: 40px; } + .tool-button { margin: 0 20px; } -- Gitblit v1.8.0