ソースを参照

错题回顾页面添加3

JXDS18FUJT 1 年間 前
コミット
e0ff94a553

+ 38 - 11
src/hooks/exam/driverExam.ts

@@ -532,15 +532,11 @@ export const useDriverExam = (requestFn: Promise<openApi.selectFreeQuestionInfoR
     optsArr: ["√", "×"],
   }])
   const listIndex = ref(0)
-  const listPageNum = computed(() => {
-    return listIndex.value + 1
-  })
+  const listPageNum = ref('1')
+
+
   const countDown = ref('00:45:00')
-  const setPageNumToListIndex = (page: string | number) => {
-    page = Number(page)
-    listIndex.value = page - 1
 
-  }
   const playIssueAudio = () => {
     audio.stopAudio()
     audio.playAudio(list.value[listIndex.value].issuemp3)
@@ -562,6 +558,23 @@ export const useDriverExam = (requestFn: Promise<openApi.selectFreeQuestionInfoR
     }
     return name;
   };
+  const setPageToListIndex = (page: number | string) => {
+    if (list.value.length < Number(page)) {
+      message.error({
+        content: '超过最大值'
+      })
+      return
+    }
+    else if (Number(page) < 1) {
+      message.error({
+        content: '低于最小值'
+      })
+    }
+    else {
+      listIndex.value = Number(page) - 1
+
+    }
+  }
   const nextProblem = () => {
     console.log("nextProblem");
     if (listIndex.value < list.value.length - 1) {
@@ -574,6 +587,7 @@ export const useDriverExam = (requestFn: Promise<openApi.selectFreeQuestionInfoR
       listIndex.value = listIndex.value - 1;
     }
   };
+  //设置用户的答案
   const setUserAnswer = (answer: string) => {
     if (list.value[listIndex.value].questionType == 3) {
       let userAnswer = list.value[listIndex.value].userAnswer as string[];
@@ -587,7 +601,7 @@ export const useDriverExam = (requestFn: Promise<openApi.selectFreeQuestionInfoR
       list.value[listIndex.value].userAnswer = answer;
     }
   };
-  //用于直接出结果
+  //设置用户的答案并且判断对错
   const setUserAnswerAndRes = (answer: string | string[]) => {
     if (list.value[listIndex.value].questionType == 3 && Array.isArray(answer)) {
       list.value[listIndex.value].userAnswer = answer;
@@ -652,6 +666,18 @@ export const useDriverExam = (requestFn: Promise<openApi.selectFreeQuestionInfoR
 
 
   };
+  const cancelUserAnswer = (answer: string)=>{
+    if(list.value[listIndex.value].questionType==3){
+     let userAnswer =  list.value[listIndex.value].userAnswer as string[]
+     //深拷贝
+     userAnswer = Object.assign([],list.value[listIndex.value].userAnswer)
+     userAnswer = userAnswer.filter(item=>{
+      return item!==answer
+     })
+     list.value[listIndex.value].userAnswer = userAnswer
+    }
+
+  }
   const switchIndexByJudge = (index: number) => {
     let name = "";
     switch (index) {
@@ -713,7 +739,7 @@ export const useDriverExam = (requestFn: Promise<openApi.selectFreeQuestionInfoR
     setUserAnswerAndRes(list.value[listIndex.value].userAnswer)
     let score = 0
     const wrongTempList: openApi.selectFreeQuestionInfoRes["rows"] = [] //临时错题
-    const wrongList: openApi.selectFreeQuestionInfoRes["rows"]= [] //永久错题
+    const wrongList: openApi.selectFreeQuestionInfoRes["rows"] = [] //永久错题
     const wrongListRes: string[] = []
     list.value.forEach((item, index) => {
       //题目正确加分
@@ -925,11 +951,12 @@ export const useDriverExam = (requestFn: Promise<openApi.selectFreeQuestionInfoR
     switchIndexByJudge,
     switchAnswerBySelect,
     switchIndexBySelect,
-    setPageNumToListIndex,
+    cancelUserAnswer,
     playIssueAudio,
     issueAutoRead,
     submitDriveExam,
-    deleteAllWrong
+    deleteAllWrong,
+    setPageToListIndex
 
   }
 

+ 20 - 4
src/hooks/exam/threeExam.ts

@@ -368,9 +368,7 @@ export const useThreeExam = (requestFn: Promise<threeApi.threeForceList>, config
         "userAnswer": ''
     }])
     const listIndex = ref(0)
-    const listPageNum = computed(() => {
-        return listIndex.value + 1
-    })
+    const listPageNum = ref('1')
     const countDown = ref('00:45:00')
     // const issueAutoRead = () => {
     //     let redIssue = list.value[listIndex.value].question
@@ -408,6 +406,23 @@ export const useThreeExam = (requestFn: Promise<threeApi.threeForceList>, config
         }
         return name;
     };
+    const setPageToListIndex = (page: number | string) => {
+        if (list.value.length < Number(page)) {
+          message.error({
+            content: '超过最大值'
+          })
+          return
+        }
+        else if (Number(page) < 1) {
+          message.error({
+            content: '低于最小值'
+          })
+        }
+        else {
+          listIndex.value = Number(page) - 1
+    
+        }
+      }
     const nextProblem = () => {
         console.log("nextProblem");
         if (listIndex.value < list.value.length - 1) {
@@ -699,7 +714,8 @@ export const useThreeExam = (requestFn: Promise<threeApi.threeForceList>, config
         switchIndexBySelect,
         setPageNumToListIndex,
         switchPageNumBySelect,
-        submitThreeExam
+        submitThreeExam,
+        setPageToListIndex
 
 
 

+ 62 - 20
src/views/home/practiseSelect/index.vue

@@ -38,15 +38,14 @@
                   练习
                 </div>
               </router-link>
-              <router-link
-                :to="'/reviewDriverError?subject=' + $route.query.subject"
-              >
+           
                 <div
+                @click="checkLocalWrongList()"
                   class="w64 lh34 mr15 round4 overflow-hidden select-border2"
                 >
                   回顾
                 </div>
-              </router-link>
+          
             </div>
           </div>
         </div>
@@ -54,10 +53,10 @@
       <div class="flex items-center pt30 pb30">
         <div class="vertical-line mr10"></div>
         <span class="font20 font-bold mr15">全部错误题回顾</span>
-         <router-link
-                :to="'/reviewDriverError?subject=' + $route.query.subject"
-              >
-        <div class="lh34 round4 pr15 pl15 select-border1 mr15">错误回顾</div></router-link>
+       
+          <div @click="checkLocalWrongList()" class="lh34 round4 pr15 pl15 select-border1 mr15">
+            错误回顾
+          </div>
         <div
           @click="
             () => {
@@ -91,6 +90,7 @@ import { useRoute } from "vue-router";
 import mProblemDialog from "@/components/mProblemDialog/index.vue";
 import mProblemAlert from "@/components/mProblemAlert/index.vue";
 import { message } from "ant-design-vue";
+import router from "@/router";
 export default defineComponent({
   name: "practiseSelect",
   setup() {
@@ -104,6 +104,38 @@ export default defineComponent({
         classIssueName: string;
       }[]
     >([]);
+    const deleteAllWrong = () => {
+      api.question
+        .questionWrongCancelAll({
+          km: Number(route.query.subject),
+        })
+        .then((res) => {
+          dialogVisible.value = false;
+          message.success({
+            content: "成功清除",
+          });
+        });
+    };
+    const checkLocalWrongList=()=>{
+      const subject = route.query.subject as string
+      let name = 'driverExam'+subject+'_local_wrong_list'
+      let list = JSON.parse(window.localStorage.getItem(name)||'[]')
+      if(list.length==0){
+        message.warn({
+          content:'没有对应的错题'
+        })
+        return
+      }
+      router.push({
+        path:'reviewDriverError',
+        query:{
+          subject
+
+        }
+      })
+
+
+    }
     api.question
       .questionInfoSelectFlQuestionInfo({
         subject: Number(route.query.subject),
@@ -121,20 +153,30 @@ export default defineComponent({
       dialogVisible,
       alertVisible: ref(false),
       list: list,
-      deleteAllWrong() {
-        api.question
-          .questionWrongCancelAll({
-            km: Number(route.query.subject),
-          })
-          .then((res) => {
-            dialogVisible.value = false;
-            message.success({
-              content: "成功清除",
-            });
-          });
-      },
+      deleteAllWrong,
+      checkLocalWrongList
     };
   },
+  watch: {
+    "$route.query"(nowVal, oldVal) {
+      if (JSON.stringify(nowVal) == "{}") {
+        return;
+      }
+
+      api.question
+        .questionInfoSelectFlQuestionInfo({
+          subject: Number(this.$route.query.subject),
+          liceBus: this.$route.query.liceBus as string,
+          liceCar: this.$route.query.liceCar as string,
+          liceMoto: this.$route.query.liceMoto as string,
+          liceTruck: this.$route.query.liceTruck as string,
+        })
+        .then((res) => {
+          res.data.shift();
+          this.list = res.data;
+        });
+    },
+  },
   components: {
     mProblemDialog,
     mProblemAlert,

+ 26 - 8
src/views/home/selectDriveExamSubject/index.vue

@@ -25,18 +25,14 @@
             货车
           </div>
         </div>
-             <router-link
-                :to="'/reviewDriverError?subject=' + $route.query.subject"
-              >
-        <div class="lh34 ml15 select-border1 round4 pr15 pl15">错误回顾</div></router-link>
+             
+        <div @click="checkLocalWrongList()" class="lh34 ml15 select-border1 round4 pr15 pl15">错误回顾</div>
       </div>
       <div class="flex items-center pt30 pb30">
         <div class="vertical-line mr10"></div>
         <span class="font20 font-bold mr15">全部错误题回顾</span>
-             <router-link
-                :to="'/reviewDriverError?subject=' + $route.query.subject"
-              >
-        <div class="lh34 round4 pr15 pl15 select-border1 mr15">错误回顾</div></router-link>
+             
+        <div @click="checkLocalWrongList()" class="lh34 round4 pr15 pl15 select-border1 mr15">错误回顾</div>
         <div
           @click="
             () => {
@@ -70,10 +66,31 @@ import mProblemAlert from "@/components/mProblemAlert/index.vue";
 import api from "@/api";
 import { message } from "ant-design-vue";
 import { useRoute } from "vue-router";
+import router from "@/router";
 export default defineComponent({
   setup() {
     const route = useRoute();
     const dialogVisible = ref(false)
+      const checkLocalWrongList=()=>{
+      const subject = route.query.subject as string
+      let name = 'driverExam'+subject+'_local_wrong_list'
+      let list = JSON.parse(window.localStorage.getItem(name)||'[]')
+      if(list.length==0){
+        message.warn({
+          content:'没有对应的错题'
+        })
+        return
+      }
+      router.push({
+        path:'reviewDriverError',
+        query:{
+          subject
+
+        }
+      })
+
+
+    }
     return {
       dialogVisible,
       alertVisible: ref(false),
@@ -89,6 +106,7 @@ export default defineComponent({
             });
           });
       },
+      checkLocalWrongList
     };
   },
   methods: {

+ 22 - 6
src/views/home/threeExam/index.vue

@@ -13,7 +13,7 @@
             练习
           </div>
         </div>
-       <router-link :to="'/reviewThreeError'">   <div class="lh34 ml15 select-border1 round4 pr15 pl15">错误回顾</div></router-link>
+    <div @click="checkLocalWrongList()" class="lh34 ml15 select-border1 round4 pr15 pl15">错误回顾</div>
       </div>
       <div class="flex items-center">
         <div class="vertical-line mr10"></div>
@@ -27,7 +27,7 @@
             考试
           </div>
         </div>
-          <router-link :to="'/reviewThreeError'">    <div class="lh34 ml15 select-border1 round4 pr15 pl15">错误回顾</div></router-link>
+           <div @click="checkLocalWrongList()" class="lh34 ml15 select-border1 round4 pr15 pl15">错误回顾</div>
     
       </div>
       <div class="flex items-center pt30 pb30">
@@ -35,11 +35,10 @@
 
         <span class="font20 font-bold mr15">全部错误题回顾</span>
 
-        <router-link :to="'/reviewThreeError'">
-          <div class="lh34 round4 pr15 pl15 select-border1 mr15">
+      
+          <div @click="checkLocalWrongList()" class="lh34 round4 pr15 pl15 select-border1 mr15">
             错误回顾
-          </div></router-link
-        >
+          </div>
 
         <div
           @click="
@@ -73,11 +72,27 @@ import mProblemAlert from "@/components/mProblemAlert/index.vue";
 import { useRoute } from "vue-router";
 import api from "@/api";
 import { message } from "ant-design-vue";
+import router from "@/router";
 export default defineComponent({
   setup() {
     const route = useRoute();
     const dialogVisible = ref(false);
+      const checkLocalWrongList=()=>{
+    
+      let name = 'threeExam_local_wrong_list'
+      let list = JSON.parse(window.localStorage.getItem(name)||'[]')
+      if(list.length==0){
+        message.warn({
+          content:'没有对应的错题'
+        })
+        return
+      }
+      router.push({
+        path:'/reviewThreeError',
+      })
+
 
+    }
     return {
       dialogVisible,
       alertVisible: ref(false),
@@ -93,6 +108,7 @@ export default defineComponent({
             });
           });
       },
+      checkLocalWrongList
     };
   },
   methods: {

+ 37 - 3
src/views/reviewDriverError/index.vue

@@ -79,6 +79,9 @@
               v-for="(item, index) in list[listIndex].optsArr"
               :key="index"
               class="w57 lh46 bottom-button mr15"
+              :class="{
+                'bg-primary-yellow': list[listIndex].userAnswer == item,
+              }"
             >
               {{ item }}
             </div>
@@ -89,10 +92,36 @@
               v-for="(item, index) in list[listIndex].optsArr"
               :key="index"
               class="w57 lh46 bottom-button mr15"
+              :class="{
+                'bg-primary-yellow': list[listIndex].userAnswer == item,
+              }"
             >
               {{ switchIndexBySelect(index) }}
             </div>
           </div>
+          <div v-if="list[listIndex].questionType == 3" class="flex mt15">
+            <div
+              @click="
+                list[listIndex].userAnswer.includes(item)
+                  ? cancelUserAnswer(item)
+                  : setUserAnswer(item)
+              "
+              v-for="(item, index) in list[listIndex].optsArr"
+              :key="index"
+              class="w57 lh46 bottom-button mr15"
+              :class="{
+                'bg-primary-yellow': list[listIndex].userAnswer.includes(item),
+              }"
+            >
+              {{ switchIndexBySelect(index) }}
+            </div>
+            <div
+              @click="setUserAnswerAndRes(list[listIndex].userAnswer)"
+              class="bg-primary-yellow font16 lh48 w110 text-center round4 cursor-pointer"
+            >
+              确定
+            </div>
+          </div>
         </div>
         <div class="w430 pr30 flex items-center bg-white">
           <img
@@ -252,16 +281,21 @@ export default defineComponent({
     const fixedNumber = (decimal: number, digit: number) => {
       return decimal.toFixed(digit);
     };
-    let wrongList = JSON.parse(window.localStorage.getItem(route.query.subject=='4'?'driverExam4_local_wrong_list':'driverExam1_local_wrong_list')||'[]') as {id:number,timestamp:number}[]
+    let wrongList = JSON.parse(
+      window.localStorage.getItem(
+        route.query.subject == "4"
+          ? "driverExam4_local_wrong_list"
+          : "driverExam1_local_wrong_list"
+      ) || "[]"
+    ) as { id: number; timestamp: number }[];
 
-  
     return {
       sysConfig,
       alertVisible: ref(false),
       dialogVisible: ref(false),
       ...useDriverExam(
         api.question.questionInfoGetQuestionInfoByIds({
-        ids:wrongList.map(item=>item.id).join(',')
+          ids: wrongList.map((item) => item.id).join(","),
         }),
         {
           autoAnswer: false,

+ 17 - 3
src/views/studySkill/index.vue

@@ -79,6 +79,9 @@
               v-for="(item, index) in list[listIndex].optsArr"
               :key="index"
               class="w57 lh46 bottom-button mr15"
+              :class="{
+                'bg-primary-yellow': list[listIndex].userAnswer == item,
+              }"
             >
               {{ item }}
             </div>
@@ -89,22 +92,32 @@
               v-for="(item, index) in list[listIndex].optsArr"
               :key="index"
               class="w57 lh46 bottom-button mr15"
+              :class="{
+                'bg-primary-yellow': list[listIndex].userAnswer == item,
+              }"
             >
               {{ switchIndexBySelect(index) }}
             </div>
           </div>
           <div v-if="list[listIndex].questionType == 3" class="flex mt15">
             <div
-              @click="setUserAnswer(item)"
+              @click="
+                list[listIndex].userAnswer.includes(item)
+                  ? cancelUserAnswer(item)
+                  : setUserAnswer(item)
+              "
               v-for="(item, index) in list[listIndex].optsArr"
               :key="index"
               class="w57 lh46 bottom-button mr15"
+              :class="{
+                'bg-primary-yellow': list[listIndex].userAnswer.includes(item),
+              }"
             >
               {{ switchIndexBySelect(index) }}
             </div>
             <div
               @click="setUserAnswerAndRes(list[listIndex].userAnswer)"
-              class="bg-primary-yellow font16 lh40 w110 text-center round4 mt20 cursor-pointer"
+              class="bg-primary-yellow font16 lh48 w110 text-center round4 cursor-pointer"
             >
               确定
             </div>
@@ -167,9 +180,10 @@
           <div class="flex items-center">
             <div class="pr2 pl2">转到</div>
             <input
+              @keydown.enter="setPageToListIndex(listPageNum)"
               class="outline-none input-border w35 h30 text-center"
               type="text"
-              :value="listPageNum"
+              v-model.number="listPageNum"
             />
             <div class="pr2 pl2">题</div>
           </div>

+ 4 - 3
src/views/threeStudyExam/index.vue

@@ -211,7 +211,8 @@
             <input
               class="outline-none input-border w35 h30 text-center"
               type="text"
-              :value="listPageNum"
+              @keydown.enter="setPageToListIndex(listPageNum)"
+              v-model.number="listPageNum"
             />
             <div class="pr2 pl2">题</div>
           </div>
@@ -271,7 +272,7 @@
     </div>
     <mProblemAlert
       v-model:visible="alertVisible"
-      :content="list[listIndex].explainJs"
+      :content="list[listIndex].bestExplainNew"
       title="题目解析"
     ></mProblemAlert>
     <mProblemDialog
@@ -293,7 +294,7 @@ import { useStore } from "vuex";
 import { message } from "ant-design-vue";
 import { useThreeExam } from "@/hooks/exam/threeExam";
 export default defineComponent({
-  name: "studySkill",
+  name: "threeStudySkill",
   setup() {
     let route = useRoute();
     let store = useStore();