From 33615d230f898d8dc48c3baed0570f51aef26330 Mon Sep 17 00:00:00 2001
From: 闫增涛 <1829501689@qq.com>
Date: 星期二, 19 三月 2024 09:39:29 +0800
Subject: [PATCH] 组卷购买

---
 packageBookService/pages/bookServices/examination/examination.js |  338 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 333 insertions(+), 5 deletions(-)

diff --git a/packageBookService/pages/bookServices/examination/examination.js b/packageBookService/pages/bookServices/examination/examination.js
index a880c26..e5c3c26 100644
--- a/packageBookService/pages/bookServices/examination/examination.js
+++ b/packageBookService/pages/bookServices/examination/examination.js
@@ -29,6 +29,17 @@
     total: 0,   // 棰樼洰鎬绘暟
     cardList: [],  // 鎻愪氦椤�,
     questionDataList: [],  // 鏄剧ず棰樼洰鍒楄〃
+    mockid: 0,
+    uuid: 0,
+    mockData: {
+      // 缁勫嵎淇℃伅
+      state: '0',
+      score: 0, // 鎬诲垎
+      sumTime: 0,
+      time: 0, // 绛旈鍓╀綑鏃堕棿
+      datas: [], // 鎵�鏈夋ā鑰冭褰曟暟鎹�(棰樼洰鍒楄〃锛岀敤鎴风瓟棰橈紝鑰冭瘯鎶ュ憡)
+      answer: []
+    }
   },
 
   /**
@@ -46,8 +57,14 @@
       productLinkPath: options.productLinkPath ? options.productLinkPath : '',
       rootCmsItemId: options.rootCmsItemId,
       idPathList: options.idPathList ? JSON.parse(options.idPathList) : [],
-      answerType: options.answerType
+      answerType: options.answerType,
     });
+    if (this.data.answerType == 'mock') {
+      this.setData({
+        uuid: options.uuid,
+        mockid: options.mockid
+      })
+    }
     this.init()
     console.log('浼犲弬', options);
   },
@@ -172,7 +189,6 @@
   },
   // 鐐瑰嚮绛旈鍗¤烦杞鐩�
   goQuestion(e) {
-    console.log(e);
     const id = e.detail.id
     this.data.questionDataList.forEach((item, index) => {
       if (item.id == id) {
@@ -296,6 +312,40 @@
       // loadings.value = true
       await this.getErrorIdList()
       await this.getCollectIdList() // 鑾峰彇鏀惰棌id鍒楄〃
+    } else if (this.data.answerType == 'mock') {
+      this.getErrorList()
+      this.getCollectIdList()
+      this.getMockInfo(async (res) => {
+        let mocklist
+        try {
+          mocklist = JSON.parse(res[0].value)
+        } catch (error) {
+          mocklist = []
+        }
+        if (mocklist.length && this.data.uuid) {
+          const oldMockData = mocklist.find((mockItem) => mockItem.id == this.data.uuid)
+          this.setData({
+            'mockData.state': oldMockData.state,
+            'mockData.score': oldMockData.score,
+            'mockData.datas': mocklist,
+          })
+          if (oldMockData.state == '0') {
+            // 缁勫嵎璐拱浜嗭紝浣嗘湭杩涘叆椤甸潰
+            await this.getEduQuizConfig()
+          } else if (oldMockData.state == '1' || oldMockData.state == '2' || oldMockData.state == '3') {
+            // 缁勫嵎鍚庤繘鍏ヨ繃椤甸潰锛屼絾鏄湭绛旇繃棰�
+            let oldQuestionList = []
+            oldQuestionList = await this.getMockQuestionList()
+            const userAnswerList = await this.getMockAnswer()
+            await this.getMockDataList(oldQuestionList, userAnswerList)
+            this.setData({
+              'mockData.sumTime': oldMockData.time,
+              cardList: oldQuestionList
+            })
+
+          }
+        }
+      })
     }
   },
   async restart() {
@@ -689,7 +739,6 @@
     this.setData({
       cardList: cardUpdatedList
     })
-    // console.log(this.data.questionDataList, this.data.cardList);
   },
   // 棰樼洰鏀惰棌鎸夐挳,鏀惰棌鍜屽彇娑堝悓涓�鎺ュ彛锛屽彇娑堟暟缁勫噺鍘昏椤筰d
   setCollect() {
@@ -841,7 +890,6 @@
             }
           })
         }
-        // console.log('鏀惰棌', collectList.value)
       })
   },
   // 鑾峰彇鏀惰棌澶�
@@ -1118,6 +1166,286 @@
       })
     })
     // loadings.value = false
-    // console.log('閿欓闆�', topicList.value)
+  },
+  // 鑾峰彇缁勫嵎缁撴灉
+  async getEduQuizConfig() {
+    await app.MG.edu
+      .getEduQuizConfigResult({
+        idOrRefCode: this.data.mockid
+      })
+      .then(async (configRes) => {
+        // 鑾峰彇 鍒嗘暟 鏃堕棿
+        this.setData({
+          'mockData.score': configRes.score
+        })
+        try {
+          this.setData({
+            'mockData.time': JSON.parse(configRes.config).time * 1000
+          })
+        } catch (error) {
+          this.setData({
+            'mockData.time': 3600 * 1000
+          })
+        }
+        this.setData({
+          'mockData.sumTime': this.data.mockData.time
+        })
+        let itemIds = []
+        let numberIndex = 1
+        // 鑾峰彇鎶介缁撴灉
+        const cardList = configRes.eduQuizConfigStageResultList.map((item) => {
+          let questionIds = []
+          // 鑾峰彇蹇呭惈棰樼洰
+          let list = item.cmsItemList.map((idItem) => {
+            itemIds.push(idItem.id + '')
+            questionIds.push({ id: idItem.id + '', score: idItem.score })
+            numberIndex++
+            return {
+              number: numberIndex,
+              itemId: idItem.id,
+              score: idItem.score
+            }
+          })
+          // 鑾峰彇鎶介棰樼洰
+          let extractList = []
+          for (let i = 0; i < item.generatorResultList.length; i++) {
+            const extractItem = item.generatorResultList[i]
+            let extractItemList = extractItem.cmsItemList.map((extractCmsItem) => {
+              itemIds.push(extractCmsItem.id + '')
+              questionIds.push({ id: extractCmsItem.id + '', score: extractCmsItem.score })
+              numberIndex++
+              return {
+                number: numberIndex,
+                itemId: extractCmsItem.id,
+                score: extractCmsItem.score
+              }
+            })
+            extractList = extractList.concat(extractItemList)
+          }
+          return {
+            path: item.id,
+            catalogName: item.name,
+            infoList: list.concat(extractList)
+          }
+        })
+        this.setData({
+          cardList: cardList
+        })
+        // 鏇存柊璇ユ潯缁勫嵎鐨勬暟鎹姸鎬侊紝鍖呮嫭璁板綍鏀硅瘯鍗锋�诲垎锛屾洿鏀圭粍鍗风姸鎬乻tate涓�1锛岃〃绀哄凡缁忔娊棰樺畬鎴愶紝骞惰灏嗘娊灞夋暟鎹褰曚笅鏉�
+        if (this.data.mockData.datas && this.data.mockData.datas.length) {
+          const mockData = this.data.mockData
+          mockData.datas.forEach((item, index) => {
+            if (item.id == this.data.uuid) {
+              item.state = '1'
+              item.time = mockData.time
+              item.score = configRes.score
+              mockData.state = '1'
+            }
+          })
+          this.setData({
+            mockData: mockData
+          })
+        }
+        this.setMockInfo(this.data.mockData.datas) // 璁板綍璇曞嵎鎬诲垎 鏃堕暱锛屼慨鏀箂tate涓� 1
+        // 鏇存柊鏈湴mockData
+        this.saveMockQuestionList(this.data.cardList) // 璁板綍棰樼洰鍒楄〃
+        await this.getMockDataList(this.data.cardList) // 璇锋眰棰樼洰鏁版嵁
+      })
+  },
+
+  // 鑾峰彇缁勫嵎鏁版嵁
+  getMockInfo(callback) {
+    app.MG.identity
+      .getUserKey({
+        domain: 'mockData',
+        keys: [this.data.bookId]
+      })
+      .then((res) => {
+        if (callback) callback(res)
+      })
+  },
+  // 璁板綍璐拱缁勫嵎鏃堕棿
+  setMockInfo(data) {
+    app.MG.identity.setUserKey({
+      setKeyRequests: [
+        {
+          domain: 'mockData',
+          key: this.data.bookId + '',
+          value: JSON.stringify(data)
+        }
+      ]
+    })
+  },
+  // 璁板綍缁勫嵎棰樼洰鍒楄〃
+  saveMockQuestionList(data) {
+    app.MG.identity
+      .setUserKey({
+        setKeyRequests: [
+          {
+            domain: 'mockQuestionData',
+            key: this.data.uuid,
+            value: JSON.stringify(data)
+          }
+        ]
+      })
+      .then((res) => {
+        console.log('妯¤�冮鐩垪琛ㄥ凡璁板綍')
+      })
+  },
+  // 鑾峰彇璁板綍缁勫嵎棰樼洰鍒楄〃
+  async getMockQuestionList() {
+    let list = []
+    await app.MG.identity
+      .getUserKey({
+        domain: 'mockQuestionData',
+        keys: [this.data.uuid]
+      })
+      .then((res) => {
+        list = JSON.parse(res[0].value)
+      })
+    return list
+  },
+  // 鑾峰彇妯¤�冪敤鎴风瓟棰樻暟鎹�
+  async getMockAnswer() {
+    let data
+    await app.MG.identity
+      .getUserKey({
+        domain: 'mockAnswerData',
+        keys: [this.data.uuid]
+      })
+      .then((res) => {
+        if (res[0]) {
+          this.setData({
+            'mockData.time': JSON.parse(res[0].value).timem,
+            'mockData.answer': JSON.parse(res[0].value).answerData
+          })
+          data = JSON.parse(res[0].value).answerData
+        }
+      })
+    return data
+  },
+  // 缁勫嵎鑾峰彇棰樼洰鍒楄〃
+  async getMockDataList(questionList, oldList) {
+    const questionDataList = this.data.questionDataList
+    questionList.forEach(async (pathitem, pathindex) => {
+      let itemIds = []
+      pathitem.infoList.forEach(item => {
+        itemIds.push(item.itemId + '')
+      })
+      let query = {
+        path: '*',
+        cmsPath: this.data.rootCmsItemId,
+        cmsType: '*',
+        productId: this.data.bookId,
+        queryType: '*',
+        itemIds,
+        itemFields: {
+          Embedded_QuestionBank_Stem: [],
+          Embedded_QuestionBank_AnalysisCon: [],
+          Embedded_QuestionBank_Answer: [],
+          Embedded_QuestionBank_Option: [],
+          Embedded_QuestionBank_QuestionType: [],
+          Embedded_QuestionBank_StemStyle: [],
+          Embedded_QuestionBank_OptionStyle: [],
+          Embedded_QuestionBank_KnowledgePoint: [],
+          Embedded_QuestionBank_Difficulty: []
+        }
+      }
+      await app.MG.store.getProductDetail(query).then((res) => {
+        res.datas.cmsDatas[0].datas.forEach((item, index) => {
+          // 寰幆questionList,缁欐瘡棰樿祴鍊煎垎鏁�
+          let oldObj
+          if (oldList) oldObj = oldList.find((oldItem) => oldItem.id == item.id)
+          let questionObj = {
+            id: item.id,
+            stem:
+              item.Embedded_QuestionBank_QuestionType == 'completion'
+                ? JSON.parse(item.Embedded_QuestionBank_Stem)
+                  .stemTxt.replaceAll('<vacancy>', ',input,')
+                  .split(',')
+                : JSON.parse(item.Embedded_QuestionBank_Stem), // 棰樺共
+            answer: item.Embedded_QuestionBank_Answer, // 绛旀
+            option: item.Embedded_QuestionBank_Option
+              ? JSON.parse(item.Embedded_QuestionBank_Option)
+              : '', // 閫夋嫨棰橀�夐」
+            analysisCon: item.Embedded_QuestionBank_AnalysisCon, // 瑙f瀽
+            questionType: item.Embedded_QuestionBank_QuestionType, // 棰樺瀷
+            optionStyle: item.Embedded_QuestionBank_OptionStyle, // 閫夐」鏄剧ず绫诲瀷
+            stemStyle: item.Embedded_QuestionBank_StemStyle, // 棰樺共鏄剧ず绫诲瀷
+            difficulty: item.Embedded_QuestionBank_Difficulty
+              ? 4 - item.Embedded_QuestionBank_Difficulty
+              : 0, // 闅惧害绛夌骇
+            userAnswer: oldObj
+              ? oldObj.answer
+              : item.Embedded_QuestionBank_QuestionType == 'completion' ||
+                item.Embedded_QuestionBank_QuestionType == 'multipleChoice'
+                ? []
+                : '',
+            isRight: oldObj ? oldObj.isRight : null,
+            // isComplete: oldObj ? oldObj.isComplete : false,
+            isComplete: oldObj ? oldObj.isComplete : false,
+            isCollect: this.data.collectList.indexOf(item.id) > -1 ? true : false,
+            isUnfold: '' // 鎺у埗瑙f瀽鐨勬姌鍙犻潰鏉挎槸鍚﹀睍寮�
+          }
+          const cardList = this.data.cardList
+          for (let a = 0; a < cardList.length; a++) {
+            const cardItem = cardList[a];
+            for (let b = 0; b < cardItem.infoList.length; b++) {
+              if (cardItem.infoList[b].itemId == item.id) {
+                questionObj.number = cardItem.infoList[b].number;
+                questionObj.score = cardItem.infoList[b].score;
+                cardItem.infoList[b] = obj;
+              }
+            }
+          }
+          this.setData({
+            cardList: cardList
+          })
+          // 澶氶�夊拰濉┖绛旀鑲负鏁扮粍锛岃杞崲JSON鏍煎紡
+          if (
+            questionObj.questionType == 'completion' ||
+            questionObj.questionType == 'multipleChoice'
+          ) {
+            try {
+              questionObj.answer = JSON.parse(questionObj.answer)
+            } catch (error) {
+              questionObj.answer = item.Embedded_QuestionBank_Answer
+            }
+          }
+          // 濉┖棰樻敼閫�
+          if (questionObj.questionType == 'completion') {
+            let index = 0
+            for (let i = 0; i < questionObj.stem.length; i++) {
+              const item = questionObj.stem[i]
+              if (item == 'input') {
+                questionObj.stem[i] = {
+                  num: index,
+                  data: 'input'
+                }
+                if (!oldObj) questionObj.userAnswer[index] = ''
+                index++
+              }
+            }
+          }
+          if (oldObj && oldObj.isRight) {
+            this.setData({
+              correctNum: this.data.correctNum + 1
+            })
+          }
+          if (item.questionType != 'shortAnswer') {
+            this.setData({
+              subjectiveTotal: this.data.subjectiveTotal + 1
+            })
+          }
+          // if (oldObj && isHaveAnswer(oldObj.answer)) countDownRef.value.changeAlready()
+          questionDataList.push(questionObj)
+        })
+      })
+    })
+
+    this.setData({
+      questionDataList: questionDataList,
+      loading: false
+    })
   }
 })
\ No newline at end of file

--
Gitblit v1.9.1