ZhangXianQiang
2024-06-19 da2f959b7f5e0ec28dc29b638dffad8eae305152
src/views/exam/index.vue
@@ -50,7 +50,7 @@
          <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">
@@ -78,11 +78,11 @@
    </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">
@@ -97,7 +97,7 @@
</template>
<script setup>
import { ref } 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';
@@ -112,13 +112,12 @@
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);
@@ -145,17 +144,17 @@
  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 {
@@ -163,7 +162,7 @@
        currentIndex.value = 0;
      }
    }
    findQuestion(currentType.value, currentIndex.value);
    // findQuestion(currentType.value, currentIndex.value);
  }
};
@@ -186,6 +185,18 @@
  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>