From b2a6887c94cc7887b03ba1cce578e3fc59a62259 Mon Sep 17 00:00:00 2001
From: 闫增涛 <1829501689@qq.com>
Date: 星期三, 27 三月 2024 16:12:28 +0800
Subject: [PATCH] 1

---
 packageBookService/pages/bookServices/examination/examination.js |  184 ++++++++++++++++++++++++++++++++++++---------
 1 files changed, 147 insertions(+), 37 deletions(-)

diff --git a/packageBookService/pages/bookServices/examination/examination.js b/packageBookService/pages/bookServices/examination/examination.js
index 6b82781..9d544ed 100644
--- a/packageBookService/pages/bookServices/examination/examination.js
+++ b/packageBookService/pages/bookServices/examination/examination.js
@@ -41,13 +41,23 @@
       answer: []
     },
     saveTime: 20,
-    isNight: false
+    isNight: false,
+    sliderValue: 0, // 瀛椾綋婊戝潡
   },
 
   /**
    * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
    */
   onLoad(options) {
+    // wx.enableAlertBeforeUnload({
+    //   message: "鏈彁浜わ紝鏄惁閫�鍑虹瓟棰橈紵",
+    //   success: function (res) {
+    //     console.log('纭畾', res);
+    //   },
+    //   fail: function (err) {
+    //     console.log("澶辫触锛�", err);
+    //   },
+    // });
     const systInfo = wx.getSystemInfoSync();
     const menu = wx.getMenuButtonBoundingClientRect(); // 鑳跺泭淇℃伅
     const navBarHeight = (menu.top - systInfo.statusBarHeight) * 2 + menu.height; // 瀵艰埅鏍忛珮搴�
@@ -75,13 +85,17 @@
    * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍒濇娓叉煋瀹屾垚
    */
   onReady() {
-
   },
 
   /**
    * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鏄剧ず
    */
   onShow() {
+    if (this.data.answerType != 'mock') {
+      if (wx.timer) {
+        clearInterval(wx.timer)
+      }
+    }
     if (this.data.answerType == 'mock') {
       if (wx.timer) {
         clearInterval(wx.timer)
@@ -101,13 +115,18 @@
    * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰闅愯棌
    */
   onHide() {
-
+    if (wx.timer) {
+      clearInterval(wx.timer)
+    }
   },
 
   /**
    * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍗歌浇
    */
-  onUnload() {
+  onUnload(e) {
+    if (wx.timer) {
+      clearInterval(wx.timer)
+    }
     if (this.data.countdownInterval !== null) {
       clearInterval(this.data.countdownInterval)
     }
@@ -132,8 +151,34 @@
    */
   onShareAppMessage() {
   },
+
+  // 鐩戝惉watch
+  watch(context, variableName, callback) {
+    let value = context.data[variableName]; // 鑾峰彇琚洃鍚睘鎬х殑褰撳墠鍊�
+
+    // 浣跨敤 Object.defineProperty 鏂规硶鍦ㄦ暟鎹璞′笂瀹氫箟灞炴�х殑 getter 鍜� setter
+    Object.defineProperty(context.data, variableName, {
+      configurable: true, // 鍙厤缃�
+      enumerable: true, // 鍙灇涓�
+      get: function () {
+        return value; // 杩斿洖灞炴�х殑褰撳墠鍊�
+      },
+      set: function (newVal) {
+        const oldVal = value; // 璁板綍灞炴�х殑鏃у��
+        value = newVal; // 鏇存柊灞炴�х殑鍊�
+        callback.call(context, newVal, oldVal); // 璋冪敤鍥炶皟鍑芥暟锛屼紶閫掓柊鍊煎拰鏃у��
+      }
+    });
+  },
+  onChangeSlider(e) {
+    this.setData({
+      sliderValue: e.detail.value
+    })
+    console.log(e.detail.value);
+  },
   // 杩斿洖
   goBack() {
+    console.log(this.data.submitStatus);
     wx.navigateBack();
   },
   //璁剧疆鑳屾櫙鑹�
@@ -202,9 +247,11 @@
       currentIndex: e.detail.index
     })
     let index = e.detail.index - 1 >= 0 ? e.detail.index - 1 : 0
-    let flag = this.isHaveAnswer(this.data.questionDataList[index].userAnswer)
-    if (flag) this.handleQuestion(e.detail.index)
-
+    const item = this.data.questionDataList[index]
+    if ((this.data.answerType == 'collectQuestion' || this.data.answerType == 'errorQuestion') && !item.isComplete) {
+      let flag = this.isHaveAnswer(item.userAnswer)
+      if (flag) this.handleQuestion(index)
+    }
   },
   // 鐐瑰嚮绛旈鍗¤烦杞鐩�
   goQuestion(e) {
@@ -223,14 +270,50 @@
     const id = e.detail.value.currentTarget.dataset.id
     const radioChecked = e.detail.value.detail.value
     const questionList = this.data.questionDataList
-    questionList.forEach(item => {
-      if (item.id == id) {
+    // 鎴戠殑閿欓鍜屾垜鐨勬敹钘忔ā寮忎笅锛屽崟閫夐閫夋嫨浜嗙洿鎺ユ壒鏀�
+    for (let index = 0; index < questionList.length; index++) {
+      const item = questionList[index];
+      if (item.id == id && !item.isComplete) {
         item.userAnswer = radioChecked
         item.isUserAnswer = this.isHaveAnswer(radioChecked)
+        if ((item.questionType == 'singleChoice' || item.questionType == 'judge') && (this.data.answerType == 'collectQuestion' || this.data.answerType == 'errorQuestion') && !item.isComplete) {
+          debugger
+          let index = this.data.currentIndex - 1 >= 0 ? this.data.currentIndex - 1 : 0
+          this.handleQuestion(index)
+        }
       }
-    })
+    }
+    // questionList.forEach(item => {
+    //   if (item.id == id && !item.isComplete) {
+    //     item.userAnswer = radioChecked
+    //     item.isUserAnswer = this.isHaveAnswer(radioChecked)
+    //     if ((item.questionType == 'singleChoice' || item.questionType == 'judge') && (this.data.answerType == 'collectQuestion' || this.data.answerType == 'errorQuestion') && !item.isComplete) {
+    //       this.handleQuestion(this.data.currentIndex)
+    //     }
+    //   }
+    // })
+    const cardListUpdata = this.data.cardList
+    for (let index = 0; index < cardListUpdata.length; index++) {
+      const item = cardListUpdata[index];
+      for (let cindex = 0; cindex < item.infoList.length; cindex++) {
+        const citem = item.infoList[cindex];
+        if (citem.id == id && !citem.isComplete) {
+          citem.userAnswer = radioChecked
+          citem.isUserAnswer = this.isHaveAnswer(radioChecked)
+        }
+      }
+    }
+    // cardListUpdata.forEach(item => {
+    //   item.infoList.forEach(citem => {
+    //     if (citem.id == id && !citem.isComplete) {
+    //       citem.userAnswer = radioChecked
+    //       citem.isUserAnswer = this.isHaveAnswer(radioChecked)
+    //     }
+    //   })
+    // })
     this.setData({
-      questionDataList: questionList
+      questionDataList: questionList,
+      cardList: cardListUpdata
     })
     if (this.data.answerType == 'mock') {
       this.setData({
@@ -242,16 +325,27 @@
   onChangeInput(e) {
     const inputData = e.detail.value.detail.value
     const id = e.detail.value.currentTarget.dataset.id
-    const index = e.detail.value.currentTarget.dataset.index
+    const index = Number(e.detail.value.currentTarget.dataset.index)
+    console.log(index);
     const questionList = this.data.questionDataList
     questionList.forEach(item => {
       if (item.id == id) {
-        item.userAnswer[index] = inputData,
-          item.isUserAnswer = this.isHaveAnswer(item.userAnswer)
+        item.userAnswer[index] = inputData
+        return item.isUserAnswer = this.isHaveAnswer(inputData)
       }
     })
+    const cardListUpdata = this.data.cardList
+    cardListUpdata.forEach(item => {
+      item.infoList.forEach(citem => {
+        if (citem.id == id) {
+          citem.userAnswer[index] = inputData
+          return citem.isUserAnswer = this.isHaveAnswer(inputData)
+        }
+      })
+    })
     this.setData({
-      questionDataList: questionList
+      questionDataList: questionList,
+      cardList: cardListUpdata,
     })
     if (this.data.answerType == 'mock') {
       this.setData({
@@ -295,8 +389,12 @@
   },
   // 鎻愪氦閫昏緫
   submitPaper() {
+
+    // 鍏抽棴閫�鍑洪〉闈㈢洃鍚�
+    wx.disableAlertBeforeUnload()
     this.setData({
-      submitStatus: true
+      submitStatus: true,
+      loading: true
     })
     const child = this.selectComponent('#question-options')
     if (this.data.answerType == 'option' || this.data.answerType == 'errorQuestion' || this.data.answerType == 'mock') {
@@ -304,7 +402,7 @@
       const qustionList = this.data.questionDataList
       for (let index = 0; index < qustionList.length; index++) {
         const item = qustionList[index];
-        if (!item.isComplete) this.handleQuestion(index + 1)
+        if (!item.isComplete) this.handleQuestion(index)
       }
     }
     if (this.data.answerType == 'option') {
@@ -354,7 +452,9 @@
       })
       child.openTestReportDialog()
     }
-
+    this.setData({
+      loading: false
+    })
   },
   // 鍒濆鍖栧嚱鏁�
   async init() {
@@ -366,17 +466,23 @@
     })
     if (this.data.answerType == 'option') {
       if (this.data)
-        this.startCountdown()
-      this.setData({
-        countdownTime: 2 * 60 * 60 * 1000
-      })
+        // this.startCountdown()
+        this.setData({
+          countdownTime: 2 * 60 * 60 * 1000
+        })
       // 娴嬭瘯绛旈
       await this.getCollectIdList() // 鑾峰彇鏀惰棌id鍒楄〃
       await this.getErrorList()   // 鑾峰彇閿欓id鍒楄〃
     } else if (this.data.answerType == 'collectQuestion') {
+      this.setData({
+        submitStatus: true
+      })
       // 鎴戠殑鏀惰棌
       await this.getcollectId() // 鑾峰彇鏀惰棌棰樼洰
     } else if (this.data.answerType == 'errorQuestion') {
+      this.setData({
+        submitStatus: true
+      })
       // 鎴戠殑閿欓
       // loadings.value = true
       await this.getErrorIdList()
@@ -406,18 +512,19 @@
             let oldQuestionList = []
             oldQuestionList = await this.getMockQuestionList()
             const userAnswerList = await this.getMockAnswer()
-            await this.getMockDataList(oldQuestionList, userAnswerList)
             this.setData({
               'mockData.sumTime': oldMockData.time,
               cardList: oldQuestionList
             })
+            await this.getMockDataList(oldQuestionList, userAnswerList)
           }
           if (oldMockData.state == '0' || oldMockData.state == '1' || oldMockData.state == '2') {
             this.startCountdown()
           }
           if (oldMockData.state == '3') {
             this.setData({
-              submitStatus: true
+              submitStatus: true,
+              subjectiveNum: oldMockData.report.userScore
             })
           }
         }
@@ -495,6 +602,7 @@
               let value = JSON.parse(res[0].value)
               // 鏈夌瓟棰樿褰曪紝寰楀垎璧嬪��
               if (value) {
+                wx.disableAlertBeforeUnload()
                 this.setData({
                   submitStatus: true
                 })
@@ -508,6 +616,7 @@
               this.setData({
                 currentIndex: value.currentIndex
               })
+              console.log(this.data.submitStatus);
               // 鎼哄甫绛旈璁板綍 鑾峰彇棰樼洰
               await this.getQuestionList(value.dataList)
             } else {
@@ -530,19 +639,19 @@
             errorList: JSON.parse(res[0].value)
           })
         } catch (error) {
-
         }
       })
   },
   // 鑾峰彇棰樺簱棰樼洰
-  getQuestionList(oldData) {
+  async getQuestionList(oldData) {
     // 娓呯┖姝g‘棰樻暟璁板綍
     this.setData({
       cardList: [],
       correctNum: 0,
     })
     let flag = 0
-    this.data.idPathList.forEach((pathitem) => {
+    for (let index = 0; index < this.data.idPathList.length; index++) {
+      const pathitem = this.data.idPathList[index];
       const pathList = this.data.cardList
       pathList.push({
         path: pathitem.productLinkPath,
@@ -575,7 +684,7 @@
           size: 999
         }
       }
-      app.MG.store.getProductDetail(query).then((res) => {
+      await app.MG.store.getProductDetail(query).then((res) => {
         this.setData({
           total: res.datas.cmsDatas[0].datas.length
         })
@@ -705,19 +814,21 @@
           })
           this.setData({
             questionDataList: questionList,
-            cardList: cardUpdatedList
+            cardList: cardUpdatedList,
           })
         })
       })
-    })
+    }
+    // 鏈夐鐩啀寮�濮嬪�掕鏃�
+    if (this.data.questionDataList.length) this.startCountdown()
     this.setData({
-      loading: false,
+      loading: false
     })
   },
   // 鎵规敼棰樼洰 锛堢粌涔狅紝鎴戠殑閿欓锛屾垜鐨勬敹钘�,锛岀粍鍗凤級
   handleQuestion(num) {
     const questionList = this.data.questionDataList
-    const index = num - 1 >= 0 ? num - 1 : 0
+    const index = num
     if (questionList[index].isComplete) {
       // 棰樼洰宸插畬鎴愶紝璺宠繃
       return true
@@ -1335,7 +1446,8 @@
   // 鑾峰彇缁勫嵎棰樼洰鍒楄〃
   async getMockDataList(questionList, oldList) {
     const questionDataList = this.data.questionDataList
-    questionList.forEach(async (pathitem, pathindex) => {
+    for (let pathindex = 0; pathindex < questionList.length; pathindex++) {
+      const pathitem = questionList[pathindex];
       let itemIds = []
       pathitem.infoList.forEach(item => {
         itemIds.push(item.id + '')
@@ -1394,7 +1506,7 @@
             isUserAnswer: oldObj ? this.isHaveAnswer(oldObj.userAnswer) : false,
             isRight: oldObj ? oldObj.isRight : null,
             // isComplete: oldObj ? oldObj.isComplete : false,
-            isComplete: this.data.mockData.state == '3' ? true : oldObj ? this.isHaveAnswer(oldObj.answer) : false,
+            isComplete: this.data.mockData.state == '3' ? true : false,
             isCollect: this.data.collectList.indexOf(item.id) > -1 ? true : false,
             isUnfold: '' // 鎺у埗瑙f瀽鐨勬姌鍙犻潰鏉挎槸鍚﹀睍寮�
           }
@@ -1462,12 +1574,10 @@
             questionDataList: questionList,
             cardList: cardUpdatedList
           })
-          console.log('缁勫嵎棰樼洰鍒楄〃', this.data.questionDataList);
         })
       })
-    })
+    }
     this.setData({
-      // questionDataList: questionDataList,
       loading: false
     })
   },

--
Gitblit v1.9.1