yiming
2024-03-25 ecabd20b3dfbd956dad14ffb6ba3dc2efcfdd7c1
packageBookService/pages/bookServices/examination/examination.js
@@ -29,12 +29,34 @@
    total: 0,   // 题目总数
    cardList: [],  // 提交项,
    questionDataList: [],  // 显示题目列表
    mockid: 0,
    uuid: 0,
    mockData: {
      // 组卷信息
      state: '0',
      score: 0, // 总分
      sumTime: 0,
      time: 0, // 答题剩余时间
      datas: [], // 所有模考记录数据(题目列表,用户答题,考试报告)
      answer: []
    },
    saveTime: 20,
    isNight: false
  },
  /**
   * 生命周期函数--监听页面加载
   */
  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; // 导航栏高度
@@ -46,8 +68,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);
  },
@@ -56,27 +84,48 @@
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {
  },
  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    if (this.data.answerType != 'mock') {
      if (wx.timer) {
        clearInterval(wx.timer)
      }
    }
    if (this.data.answerType == 'mock') {
      if (wx.timer) {
        clearInterval(wx.timer)
      }
      wx.timer = setInterval(() => {
        this.setData({
          saveTime: this.data.saveTime - 1
        })
        if (this.data.saveTime == 0) {
          this.saveMockData()
        }
      }, 1000)
    }
  },
  /**
   * 生命周期函数--监听页面隐藏
   */
  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)
    }
@@ -101,11 +150,37 @@
   */
  onShareAppMessage() {
  },
  // 返回
  goBack() {
    wx.navigateBack();
  // 监听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); // 调用回调函数,传递新值和旧值
      }
    });
  },
  // 返回
  goBack() {
    console.log(this.data.submitStatus);
    wx.navigateBack();
  },
  //设置背景色
  changeBGColor(e) {
    this.setData({
      isNight: e.detail.value
    })
  },
  // 获取保存的倒计时时间
  getSavedTime() {
    const savedTime = wx.getStorageSync('countdownTime')
@@ -165,14 +240,14 @@
    this.setData({
      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)
    if (this.data.answerType == 'collectQuestion' || this.data.answerType == 'errorQuestion') {
      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)
    }
  },
  // 点击答题卡跳转题目
  goQuestion(e) {
    console.log(e);
    const id = e.detail.id
    this.data.questionDataList.forEach((item, index) => {
      if (item.id == id) {
@@ -191,28 +266,59 @@
    questionList.forEach(item => {
      if (item.id == id) {
        item.userAnswer = radioChecked
        item.isUserAnswer = this.isHaveAnswer(radioChecked)
      }
    })
    this.setData({
      questionDataList: questionList
    const cardListUpdata = this.data.cardList
    cardListUpdata.forEach(item => {
      item.infoList.forEach(citem => {
        if (citem.id == id) {
          citem.userAnswer = radioChecked
          citem.isUserAnswer = this.isHaveAnswer(radioChecked)
        }
      })
    })
    console.log(this.data.questionDataList);
    this.setData({
      questionDataList: questionList,
      cardList: cardListUpdata
    })
    if (this.data.answerType == 'mock') {
      this.setData({
        saveTime: 20
      })
    }
  },
  // 输入框触发
  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
        return item.isUserAnswer = this.isHaveAnswer(inputData)
      }
    })
    this.setData({
      questionDataList: questionList
    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)
        }
      })
    })
    console.log(this.data.questionDataList);
    this.setData({
      questionDataList: questionList,
      cardList: cardListUpdata,
    })
    if (this.data.answerType == 'mock') {
      this.setData({
        saveTime: 20
      })
    }
  },
  // 数组转为字符串方法
  arrayToString(data) {
@@ -237,37 +343,79 @@
      } else {
        return false
      }
    } else {
    } else if (typeof data == 'object') {
      const answer = data.find((item) => item.length > 0)
      if (answer) {
        return true
      } else {
        return false
      }
    } else {
      return false
    }
  },
  // 提交逻辑
  submitPaper() {
    // 关闭退出页面监听
    wx.disableAlertBeforeUnload()
    this.setData({
      submitStatus: true
    })
    const child = this.selectComponent('#question-options')
    if (this.data.answerType == 'option' || this.data.answerType == 'errorQuestion' || this.data.answerType == 'mock') {
      // 先遍历所有题目,将未批改的题目批改
      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 (this.data.answerType == 'option') {
      this.toggleCountdown()
      const child = this.selectComponent('#question-options')
      if (this.data.answerType == 'option' || this.data.answerType == 'errorQuestion') {
        // 先遍历所有题目,将未批改的题目批改
        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 (this.data.answerType == 'option') {
        this.recordAnswerData()
        child.openTestReportDialog()
      }
      this.recordAnswerData()
      child.openTestReportDialog()
    } else if (this.data.answerType == 'collectQuestion' || this.data.answerType == 'errorQuestion') {
      this.goBack()
    } else if (this.data.answerType == 'mock') {
      this.toggleCountdown()
      // 设置模考状态为已完成
      const mockData = this.data.mockData
      mockData.datas.forEach((item) => {
        if (item.id == this.data.uuid) {
          item.state = '3'
          item.report = {
            userScore: this.data.subjectiveNum
          }
        }
      })
      this.setData({
        mockData: mockData,
        submitStatus: true
      })
      this.setMockInfo(mockData.datas)
      // 记录用户答题数据
      let saveData = []
      for (let index = 0; index < this.data.questionDataList.length; index++) {
        const item = this.data.questionDataList[index];
        saveData.push({
          id: item.id,
          answer: item.userAnswer,
          isRight: item.isRight
        })
      }
      app.MG.identity.setUserKey({
        setKeyRequests: [
          {
            domain: 'mockAnswerData',
            key: this.data.uuid,
            value: JSON.stringify({
              time: this.data.countdownTime,
              answerData: saveData
            })
          }
        ]
      })
      child.openTestReportDialog()
    }
  },
@@ -296,6 +444,48 @@
      // 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()
            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,
              subjectiveNum: oldMockData.report.userScore
            })
          }
        }
      })
    }
  },
  async restart() {
@@ -327,9 +517,9 @@
        setKeyRequests: [
          {
            domain: 'mockAnswerData',
            key: route.query.uuid,
            key: this.data.uuid,
            value: JSON.stringify({
              time: countDownRef.value.countdownTime,
              time: this.data.countdownTime,
              answerData: []
            })
          }
@@ -369,6 +559,7 @@
              let value = JSON.parse(res[0].value)
              // 有答题记录,得分赋值
              if (value) {
                wx.disableAlertBeforeUnload()
                this.setData({
                  submitStatus: true
                })
@@ -382,6 +573,7 @@
              this.setData({
                currentIndex: value.currentIndex
              })
              console.log(this.data.submitStatus);
              // 携带答题记录 获取题目
              await this.getQuestionList(value.dataList)
            } else {
@@ -404,19 +596,19 @@
            errorList: JSON.parse(res[0].value)
          })
        } catch (error) {
        }
      })
  },
  // 获取题库题目
  getQuestionList(oldData) {
  async getQuestionList(oldData) {
    // 清空正确题数记录
    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,
@@ -449,7 +641,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
        })
@@ -492,6 +684,7 @@
                item.Embedded_QuestionBank_QuestionType == 'multipleChoice'
                ? []
                : '',
            isUserAnswer: oldObj ? this.isHaveAnswer(oldObj.userAnswer) : false,
            isRight: oldObj ? oldObj.isRight : null,
            isComplete: oldObj ? oldObj.isComplete : false,
            isCollect: this.data.collectList.indexOf(item.id) > -1 ? true : false,
@@ -573,21 +766,21 @@
            aitem.infoList.forEach((bitem, bindex) => {
              questionList.push(bitem)
              bitem.number = bindex + 1
              bitem.grade = 2
              bitem.score = 2
            })
          })
          this.setData({
            questionDataList: questionList,
            cardList: cardUpdatedList
            cardList: cardUpdatedList,
          })
        })
      })
    })
    }
    this.setData({
      loading: false,
      loading: false
    })
  },
  // 批改题目 (练习,我的错题,我的收藏)
  // 批改题目 (练习,我的错题,我的收藏,,组卷)
  handleQuestion(num) {
    const questionList = this.data.questionDataList
    const index = num - 1 >= 0 ? num - 1 : 0
@@ -635,13 +828,13 @@
    if (item.questionType != 'shortAnswer') {
      this.setData({
        subjectiveTotal: this.data.subjectiveTotal + 1,
        subjectiveGrade: this.data.subjectiveGrade + item.grade
        subjectiveGrade: this.data.subjectiveGrade + item.score
      })
    }
    if (questionList[index].isRight && item.questionType != 'shortAnswer') {
      // 客观题回答正确
      this.setData({
        subjectiveNum: this.data.subjectiveNum + item.grade,
        subjectiveNum: this.data.subjectiveNum + item.score,
        correctNum: this.data.correctNum + 1
      })
    }
@@ -675,6 +868,7 @@
          console.log(res)
        })
    }
    this.setData({
      questionDataList: questionList
    })
@@ -689,7 +883,6 @@
    this.setData({
      cardList: cardUpdatedList
    })
    // console.log(this.data.questionDataList, this.data.cardList);
  },
  // 题目收藏按钮,收藏和取消同一接口,取消数组减去该项id
  setCollect() {
@@ -841,7 +1034,6 @@
            }
          })
        }
        // console.log('收藏', collectList.value)
      })
  },
  // 获取收藏夹
@@ -1118,6 +1310,356 @@
      })
    })
    // 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,
            countdownTime: JSON.parse(configRes.config).time * 1000
          })
        } catch (error) {
          this.setData({
            'mockData.time': 3600 * 1000,
            countdownTime: 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,
              id: 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,
                id: extractCmsItem.id,
                score: extractCmsItem.score
              }
            })
            extractList = extractList.concat(extractItemList)
          }
          return {
            path: item.id,
            catalogName: item.name,
            infoList: list.concat(extractList)
          }
        })
        this.setData({
          cardList: cardList
        })
        // 更新该条组卷的数据状态,包括记录改试卷总分,更改组卷状态state为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) // 记录试卷总分 时长,修改state为 1
        // 更新本地mockData
        this.saveMockQuestionList(this.data.cardList) // 记录题目列表
        await this.getMockDataList(this.data.cardList) // 请求题目数据
      })
  },
  // 获取组卷题目列表
  async getMockDataList(questionList, oldList) {
    const questionDataList = this.data.questionDataList
    for (let pathindex = 0; pathindex < questionList.length; pathindex++) {
      const pathitem = questionList[pathindex];
      let itemIds = []
      pathitem.infoList.forEach(item => {
        itemIds.push(item.id + '')
      })
      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 = {
            // number: pathitem.infoList.find(infoItem => infoItem.itemId == item.id).number,
            id: item.id,
            score: pathitem.infoList.find(infoItem => infoItem.id == item.id).score,
            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, // 解析
            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'
                ? []
                : '',
            isUserAnswer: oldObj ? this.isHaveAnswer(oldObj.userAnswer) : false,
            isRight: oldObj ? oldObj.isRight : null,
            // isComplete: oldObj ? oldObj.isComplete : false,
            isComplete: this.data.mockData.state == '3' ? true : false,
            isCollect: this.data.collectList.indexOf(item.id) > -1 ? true : false,
            isUnfold: '' // 控制解析的折叠面板是否展开
          }
          // 多选和填空答案肯为数组,要转换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 (questionObj.stemStyle == 'Image' || questionObj.stemStyle == 'TxtAndImage') {
            questionObj.stem.stemImage = getPublicImage(questionObj.stem.stemImage, 150)
          }
          if (questionObj.optionStyle == 'Image' || questionObj.optionStyle == 'TxtAndImage') {
            questionObj.option.forEach(optionItem => {
              if (optionItem.img) optionItem.img = getPublicImage(optionItem.img, 150)
            })
          }
          if (oldObj && oldObj.isRight) {
            this.setData({
              correctNum: this.data.correctNum + 1
            })
          }
          if (item.questionType != 'shortAnswer' && item.isComplete) {
            this.setData({
              subjectiveTotal: this.data.subjectiveTotal + 1
            })
          }
          // if (oldObj && isHaveAnswer(oldObj.answer)) countDownRef.value.changeAlready()
          // cardList赋值
          let cardIndex = this.data.cardList.findIndex((item) => item.catalogName == pathitem.catalogName)
          let infoIndex = this.data.cardList[cardIndex].infoList.findIndex(infoItem => infoItem.id == item.id)
          this.setData({
            [`cardList[${cardIndex}].infoList[${infoIndex}]`]: questionObj
          })
          let questionList = []
          const cardUpdatedList = this.data.cardList
          cardUpdatedList.forEach(aitem => {
            aitem.infoList.forEach((bitem, bindex) => {
              questionList.push(bitem)
              bitem.number = bindex + 1
            })
          })
          this.setData({
            questionDataList: questionList,
            cardList: cardUpdatedList
          })
        })
      })
    }
    this.setData({
      loading: false
    })
  },
  // 获取组卷数据
  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({
            currentIndex: JSON.parse(res[0].value).currentIndex,
            'mockData.time': JSON.parse(res[0].value).time,
            countdownTime: JSON.parse(res[0].value).time ? JSON.parse(res[0].value).time : this.data.mockData.sumTime,
            'mockData.answer': JSON.parse(res[0].value).answerData
          })
          console.log(JSON.parse(res[0].value));
          data = JSON.parse(res[0].value).answerData
        }
      })
    return data
  },
  // 记录模考答题数据
  saveMockData() {
    const data = this.data.mockData.datas.find((itme) => itme.id == this.data.uuid)
    if (data.state == '3') return true
    const saveData = this.data.mockData.answer
    for (let i = 0; i < this.data.questionDataList.length; i++) {
      const item = this.data.questionDataList[i]
      if (this.isHaveAnswer(item.userAnswer)) {
        const index = saveData.findIndex((saveitem) => saveitem.id == item.id)
        if (index + '' != '-1') {
          saveData[index].answer = item.userAnswer
        } else {
          saveData.push({
            id: item.id,
            answer: item.userAnswer
          })
        }
      }
    }
    //
    if (this.data.mockData.state == '1') {
      const datas = this.data.mockData.datas
      datas.forEach((item) => {
        if (item.id == this.data.uuid) {
          item.state = '2'
        }
      })
      this.setMockInfo(datas)
    }
    //
    app.MG.identity
      .setUserKey({
        setKeyRequests: [
          {
            domain: 'mockAnswerData',
            key: this.data.uuid,
            value: JSON.stringify({
              currentIndex: this.data.currentIndex,
              time: this.data.countdownTime,
              answerData: saveData
            })
          }
        ]
      })
      .then((res) => {
        this.setData({
          saveTime: 20
        })
        console.log('模考答题数据已记录')
      })
  }
})