Browse Source

新增真实模拟考试在接口出问题下的提示

zhangyujun 2 năm trước cách đây
mục cha
commit
39aa7eb7e8

+ 1 - 1
src/api/types/selectTestQuestionInfo.d.ts

@@ -3,7 +3,7 @@ declare namespace selectTestQuestionInfo {
         total:number,
         msg:string,
         code:number,
-        rows:[row]
+        rows:row[]
     }
     interface row {
         userAnswerLetter?:string,

+ 166 - 0
src/components/mask/interfaceErrMask.vue

@@ -0,0 +1,166 @@
+<template>
+  <div class="mask">
+    <div>
+      <div class="dialog">
+        <div class="title">
+          <span>系统提示</span>
+        </div>
+        <div class="mid">
+          <div class="mid-line1">亲爱的考生:</div>
+
+          <div class="mid-line2">服务器发生错误,无法正常使用该服务</div>
+          <div class="mid-line2">请联系客服进行处理</div>
+        </div>
+        <div class="bottom">
+          <button
+            @click="
+              () => {
+                router.push({
+                  name: 'examBegin',
+                  query: {
+                    ...router.currentRoute.value.query,
+                  },
+                });
+              }
+            "
+          >
+            返回上一页
+          </button>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import { defineProps, reactive, toRefs, ref } from 'vue';
+import router from '@/router/';
+import Phone from '@/utils/phone';
+
+export default {
+  setup(props, { emit }) {
+    const state = reactive({
+      count: 0,
+    });
+    const phone = new Phone();
+    const backView = phone.backView.bind(phone);
+
+    const sendPaper = () => {
+      emit('confirm');
+    };
+    const cancelSubmit = () => {
+      emit('cancel');
+    };
+
+    return {
+      ...toRefs(state),
+      props,
+      sendPaper,
+      cancelSubmit,
+      router,
+      backView,
+    };
+  },
+  beforeUnmount() {
+    window.clearInterval(this.timer);
+  },
+  computed: {
+    score() {
+      console.log(router.currentRoute.value.query);
+      if (router.currentRoute.value.query.subject == '4') {
+        return this.correctScore * 2;
+      }
+      return this.correctScore;
+    },
+  },
+  props: {
+    correctScore: {
+      type: Number,
+      required: true,
+      default: 0,
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+button {
+  border-radius: 0;
+  border: none;
+}
+.mask {
+  position: fixed;
+  top: 0;
+  width: 100vw;
+  height: 100vh;
+  background-color: rgb(0, 0, 0, 0.65);
+  z-index: 10;
+  display: flex;
+  align-content: center;
+  align-items: center;
+  justify-content: center;
+  .dialog {
+    width: 400px;
+    height: 205px;
+    background: #fff;
+    .title {
+      width: 100%;
+      line-height: 40px;
+      height: 40px;
+      background: #306ace;
+      color: #fff;
+      font-size: 12px;
+    }
+    .mid {
+      width: 100%;
+      background: #fff;
+      height: 100px;
+      padding-left: 10px;
+      padding-right: 10px;
+      font-size: 14px;
+      .mid-line1 {
+        line-height: 25px;
+        height: 25px;
+        text-align: left;
+      }
+      .mid-line2 {
+        text-align: left;
+        line-height: 30px;
+      }
+      .mid-line3 {
+        text-align: left;
+        line-height: 30px;
+      }
+      .mid-line4 {
+        text-align: left;
+        line-height: 30px;
+      }
+    }
+    .bottom {
+      background: #306ace;
+      width: 100%;
+      height: 70px;
+      display: flex;
+      justify-content: center;
+      flex-wrap: wrap;
+      align-items: flex-start;
+      align-content: flex-start;
+
+      button:nth-child(1) {
+        height: 30px;
+        margin-top: 10px;
+      }
+      .bottom-line {
+        width: 100%;
+        text-align: center;
+        color: #fff;
+        font-size: 12px;
+        margin-top: 5px;
+      }
+      button:nth-child(2) {
+        height: 30px;
+      }
+    }
+  }
+}
+</style>

+ 8 - 0
src/hooks/examTest.ts

@@ -6,6 +6,7 @@ import store from "@/store/"
 
 export function useExamTest() {
     let letter = ["A", "B", "C", "D", "E", "F"]
+    let interfaceErrVisible = ref(false)
     let correctAnswerVisible = ref(false)
     let list = ref<selectTestQuestionInfo.row[]>([
         {
@@ -645,10 +646,17 @@ export function useExamTest() {
                 item.answerArr = item.answer.split('-');
                 item.questionType < 3 ? item.userAnswer = '' : item.userAnswer = [];
             });
+            if(!res.data.rows|| res.data.rows.length===0){
+                interfaceErrVisible.value = true
+                return
+            }
             list.value = res.data.rows;
+        }).catch(err=>{
+            interfaceErrVisible.value = true
         });
     }
     return {
+        interfaceErrVisible,
         submitScore,
         changeListIndex,
         selectExamAnswer,

+ 6 - 0
src/views/exam/test.vue

@@ -1,5 +1,7 @@
 <template>
   <div class="center">
+    <interfaceErrMask v-if="interfaceErrVisible">
+    </interfaceErrMask>
     <beforeSubmitMask
       :show="beforeSubmitVisible"
       @cancel="
@@ -229,6 +231,7 @@ import dayjs from 'dayjs';
 import beforeSubmitMask from '@/components/mask/beforeSubmitMask.vue';
 import submitMask from '@/components/mask/submitMask.vue';
 import correctAnswerMask from '@/components/mask/correctAnswerMask.vue';
+import interfaceErrMask from '@/components/mask/interfaceErrMask.vue'
 // import Api from '@/api/api';
 import { countdownTime, countdown, countdownTimer } from '@/hooks/countdown';
 import { useStore } from 'vuex';
@@ -268,6 +271,7 @@ export default defineComponent({
       wrongQuestion,
       wrongQuestionIndex,
       correctAnswerVisible,
+      interfaceErrVisible
     } = useExamTest();
     //设置开始时间
     store.commit('SET_BEGINTIME', {
@@ -784,12 +788,14 @@ export default defineComponent({
       wrongQuestion,
       wrongQuestionIndex,
       correctAnswerVisible,
+      interfaceErrVisible
     };
   },
   components: {
     beforeSubmitMask,
     submitMask,
     correctAnswerMask,
+    interfaceErrMask
   },
 });
 </script>

+ 1 - 1
src/views/pdf/preview.vue

@@ -112,7 +112,7 @@ export default defineComponent({
         for (let index = 1; index <= pdfDoc.numPages; index++) {
           that.showPdfs(pdfDoc, index);
         }
-        Toast.clear()
+        Toast.clear();
       });
     },
     showPdfs(pdfDoc: PDFDocumentProxy, pageNum: number) {