闫增涛
2024-03-29 1e9c2bd06ab6851ed85b883c62cb7d74e012e2b2
packageBookService/pages/bookServices/examination/examination.js
@@ -1,4 +1,6 @@
import { getPublicImage } from '../../../../assets/js/middleGround/tool'
import {
  getPublicImage
} from '../../../../assets/js/middleGround/tool'
const app = getApp()
Page({
@@ -9,26 +11,26 @@
    barHeight: "",
    navBarHeight: "",
    loading: false,
    answerTitle: "",  // 导航栏标题
    countdownInterval: null,   // 计时器
    answerTitle: "", // 导航栏标题
    countdownInterval: null, // 计时器
    isCountdownRunning: true, // 是否倒计时
    countdownTime: 0,  // 倒计时时间
    countdownTime: 0, // 倒计时时间
    bookId: "",
    productLinkPath: "",
    rootCmsItemId: "",
    idPathList: [],  // 题目列表
    answerType: "",  // 答题模式
    submitStatus: false,  // 提交状态
    idPathList: [], // 题目列表
    answerType: "", // 答题模式
    submitStatus: false, // 提交状态
    currentIndex: 0, // 当前显示的题号
    collectList: [],   //  收藏题目列表
    errorList: [],  // 错题列表
    subjectiveTotal: 0,  // 客观题总数
    collectList: [], //  收藏题目列表
    errorList: [], // 错题列表
    subjectiveTotal: 0, // 客观题总数
    subjectiveNum: 0, // 客观题得分
    subjectiveGrade: 0, // 客观题总分
    correctNum: 0,  // 正确题目数量
    total: 0,   // 题目总数
    cardList: [],  // 提交项,
    questionDataList: [],  // 显示题目列表
    correctNum: 0, // 正确题目数量
    total: 0, // 题目总数
    cardList: [], // 提交项,
    questionDataList: [], // 显示题目列表
    mockid: 0,
    uuid: 0,
    mockData: {
@@ -84,8 +86,7 @@
  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {
  },
  onReady() {},
  /**
   * 生命周期函数--监听页面显示
@@ -149,8 +150,7 @@
  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {
  },
  onShareAppMessage() {},
  // 监听watch
  watch(context, variableName, callback) {
@@ -438,16 +438,14 @@
        })
      }
      app.MG.identity.setUserKey({
        setKeyRequests: [
          {
            domain: 'mockAnswerData',
            key: this.data.uuid,
            value: JSON.stringify({
              time: this.data.countdownTime,
              answerData: saveData
            })
          }
        ]
        setKeyRequests: [{
          domain: 'mockAnswerData',
          key: this.data.uuid,
          value: JSON.stringify({
            time: this.data.countdownTime,
            answerData: saveData
          })
        }]
      })
      child.openTestReportDialog()
    }
@@ -471,7 +469,7 @@
        })
      // 测试答题
      await this.getCollectIdList() // 获取收藏id列表
      await this.getErrorList()   // 获取错题id列表
      await this.getErrorList() // 获取错题id列表
    } else if (this.data.answerType == 'collectQuestion') {
      this.setData({
        submitStatus: true
@@ -556,16 +554,14 @@
      // 组卷模式
      // 清空答题记录
      await app.MG.identity.setUserKey({
        setKeyRequests: [
          {
            domain: 'mockAnswerData',
            key: this.data.uuid,
            value: JSON.stringify({
              time: this.data.countdownTime,
              answerData: []
            })
          }
        ]
        setKeyRequests: [{
          domain: 'mockAnswerData',
          key: this.data.uuid,
          value: JSON.stringify({
            time: this.data.countdownTime,
            answerData: []
          })
        }]
      })
      this.init()
    } else {
@@ -588,8 +584,7 @@
          this.setData({
            collectList: JSON.parse(res[0].value)
          })
        } catch (error) {
        }
        } catch (error) {}
        if (this.data.answerType == 'option') {
          // 先获取用户答题记录
          this.getAnswerInfo(async (res) => {
@@ -637,8 +632,7 @@
          this.setData({
            errorList: JSON.parse(res[0].value)
          })
        } catch (error) {
        }
        } catch (error) {}
      })
  },
  // 获取题库题目
@@ -703,29 +697,22 @@
            // num: index, // 题号
            id: item.id,
            type: pathitem.name,
            stem:
              item.Embedded_QuestionBank_QuestionType == 'completion'
                ? JSON.parse(item.Embedded_QuestionBank_Stem)
                  .stemTxt.replaceAll('<vacancy>', ',input,')
                  .split(',')
                : JSON.parse(item.Embedded_QuestionBank_Stem), // 题干
            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)
              : '', // 选择题选项
            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.userAnswer
              : item.Embedded_QuestionBank_QuestionType == 'completion' ||
                item.Embedded_QuestionBank_QuestionType == 'multipleChoice'
                ? []
                : '',
            difficulty: item.Embedded_QuestionBank_Difficulty ?
              4 - item.Embedded_QuestionBank_Difficulty : 0, // 难度等级
            userAnswer: oldObj ?
              oldObj.userAnswer : 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,
@@ -763,7 +750,7 @@
          // 题干富文本处理
          if (questionObj.stemStyle == 'RichText') {
            // questionObj.option.txt = ''
            questionObj.stem.stemTxt = questionObj.stem.stemTxt.replace(/\<img/gi, '<img class="stem-rich-img"').replace(/\<p/gi, '<p class="stem-rich-p"')
            questionObj.stem.stemTxt = questionObj.stem.stemTxt.replace(/\<img/gi, '<img style="max-width: 300rpx !important;object-fit: contain;" class="stem-rich-img" ').replace(/\<p/gi, '<p class="stem-rich-p"')
          }
          // 选项富文本处理
@@ -912,13 +899,11 @@
      // 记录错题
      app.MG.identity
        .setUserKey({
          setKeyRequests: [
            {
              domain: 'errorData',
              key: this.data.rootCmsItemId,
              value: JSON.stringify(this.data.errorList)
            }
          ]
          setKeyRequests: [{
            domain: 'errorData',
            key: this.data.rootCmsItemId,
            value: JSON.stringify(this.data.errorList)
          }]
        })
        .then((res) => {
          console.log(res)
@@ -974,27 +959,23 @@
    }
    app.MG.identity
      .setUserKey({
        setKeyRequests: [
          {
            domain: 'collectData',
            key: this.data.rootCmsItemId,
            value: JSON.stringify(this.data.collectList)
          }
        ]
        setKeyRequests: [{
          domain: 'collectData',
          key: this.data.rootCmsItemId,
          value: JSON.stringify(this.data.collectList)
        }]
      })
      .then((res) => { })
      .then((res) => {})
  },
  // 处理答题数据
  recordAnswerData() {
    this.data.cardList.push(
      {
        name: '客观题得分',
        score: this.data.subjectiveNum,
        path: this.data.productLinkPath,
        // infoList: [],
        // catalogName: ''
      }
    )
    this.data.cardList.push({
      name: '客观题得分',
      score: this.data.subjectiveNum,
      path: this.data.productLinkPath,
      // infoList: [],
      // catalogName: ''
    })
    let setInfoData = {
      currentIndex: this.data.currentIndex,
      dataList: JSON.parse(JSON.stringify(this.data.cardList))
@@ -1021,15 +1002,13 @@
  setAnswerInfo(data) {
    app.MG.identity
      .setUserKey({
        setKeyRequests: [
          {
            domain: 'answerData',
            key: this.data.productLinkPath,
            value: JSON.stringify(data)
          }
        ]
        setKeyRequests: [{
          domain: 'answerData',
          key: this.data.productLinkPath,
          value: JSON.stringify(data)
        }]
      })
      .then((res) => { })
      .then((res) => {})
  },
  // 获取答题数据
  getAnswerInfo(callback) {
@@ -1066,8 +1045,7 @@
            collectList: JSON.parse(res[0].value)
          })
          // total.value = collectList.value.length
        } catch (error) {
        }
        } catch (error) {}
        if (this.data.collectList && this.data.collectList.length) {
          await this.getCollectDataList()
        } else {
@@ -1076,8 +1054,8 @@
          })
          wx.showModal({
            title: '提示',
            content: '收藏夹暂无数据',//editable如果为true,这就是输入框的内容
            editable: false,//是否显示输入框
            content: '收藏夹暂无数据', //editable如果为true,这就是输入框的内容
            editable: false, //是否显示输入框
            showCancel: false,
            success: (res) => {
              if (res.confirm) {
@@ -1096,12 +1074,10 @@
  async getCollectDataList() {
    let questionArr = []
    this.setData({
      cardList: [
        {
          catalogName: '收藏夹',
          infoList: []
        }
      ]
      cardList: [{
        catalogName: '收藏夹',
        infoList: []
      }]
    })
    let query = {
      path: '*',
@@ -1128,28 +1104,21 @@
        const questionObj = {
          number: index + 1, // 题号
          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), // 题干
          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)
            : '', // 选择题选项
          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:
            item.Embedded_QuestionBank_QuestionType == 'completion' ||
              item.Embedded_QuestionBank_QuestionType == 'multipleChoice'
              ? []
              : '',
          difficulty: item.Embedded_QuestionBank_Difficulty ?
            4 - item.Embedded_QuestionBank_Difficulty : 0, // 难度等级
          userAnswer: item.Embedded_QuestionBank_QuestionType == 'completion' ||
            item.Embedded_QuestionBank_QuestionType == 'multipleChoice' ? [] : '',
          isSubmit: false, // 查看解析
          isRight: null, // 是否正确
          isComplete: false,
@@ -1224,8 +1193,7 @@
          this.setData({
            errorList: JSON.parse(res[0].value)
          })
        } catch (error) {
        }
        } catch (error) {}
        if (this.data.errorList && this.data.errorList.length) {
          this.getErrorDataList()
        } else {
@@ -1234,8 +1202,8 @@
          })
          wx.showModal({
            title: '提示',
            content: '错题集暂无数据',//editable如果为true,这就是输入框的内容
            editable: false,//是否显示输入框
            content: '错题集暂无数据', //editable如果为true,这就是输入框的内容
            editable: false, //是否显示输入框
            showCancel: false,
            success: (res) => {
              if (res.confirm) {
@@ -1252,12 +1220,10 @@
  // 获取错题集
  async getErrorDataList() {
    this.setData({
      cardList: [
        {
          catalogName: '错题集',
          infoList: []
        }
      ]
      cardList: [{
        catalogName: '错题集',
        infoList: []
      }]
    })
    let query = {
      path: '*',
@@ -1284,28 +1250,21 @@
        const questionObj = {
          number: index + 1, // 题号
          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), // 题干
          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)
            : '', // 选择题选项
          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:
            item.Embedded_QuestionBank_QuestionType == 'completion' ||
              item.Embedded_QuestionBank_QuestionType == 'multipleChoice'
              ? []
              : '',
          difficulty: item.Embedded_QuestionBank_Difficulty ?
            4 - item.Embedded_QuestionBank_Difficulty : 0, // 难度等级
          userAnswer: item.Embedded_QuestionBank_QuestionType == 'completion' ||
            item.Embedded_QuestionBank_QuestionType == 'multipleChoice' ? [] : '',
          isSubmit: false, // 查看解析
          isRight: null, // 是否正确
          isComplete: false,
@@ -1400,7 +1359,10 @@
          // 获取必含题目
          let list = item.cmsItemList.map((idItem) => {
            itemIds.push(idItem.id + '')
            questionIds.push({ id: idItem.id + '', score: idItem.score })
            questionIds.push({
              id: idItem.id + '',
              score: idItem.score
            })
            numberIndex++
            return {
              number: numberIndex,
@@ -1414,7 +1376,10 @@
            const extractItem = item.generatorResultList[i]
            let extractItemList = extractItem.cmsItemList.map((extractCmsItem) => {
              itemIds.push(extractCmsItem.id + '')
              questionIds.push({ id: extractCmsItem.id + '', score: extractCmsItem.score })
              questionIds.push({
                id: extractCmsItem.id + '',
                score: extractCmsItem.score
              })
              numberIndex++
              return {
                number: numberIndex,
@@ -1491,29 +1456,22 @@
            // 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), // 题干
            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)
              : '', // 选择题选项
            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'
                ? []
                : '',
            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,
@@ -1550,7 +1508,7 @@
          // 题干富文本处理
          if (questionObj.stemStyle == 'RichText') {
            // questionObj.option.txt = ''
            questionObj.stem.stemTxt = questionObj.stem.stemTxt.replace(/\<img/gi, '<img class="stem-rich-img"')
            questionObj.stem.stemTxt = questionObj.stem.stemTxt.replace(/\<img/gi, '<img style="max-width: 300rpx !important;object-fit: contain;" class="stem-rich-img"')
          }
          // 选项富文本处理
          if (questionObj.optionStyle == 'RichText' && (questionObj.questionType == 'singleChoice' || questionObj.questionType == 'judge' || questionObj.questionType == 'multipleChoice')) {
@@ -1617,26 +1575,22 @@
  // 记录购买组卷时间
  setMockInfo(data) {
    app.MG.identity.setUserKey({
      setKeyRequests: [
        {
          domain: 'mockData',
          key: this.data.bookId + '',
          value: JSON.stringify(data)
        }
      ]
      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)
          }
        ]
        setKeyRequests: [{
          domain: 'mockQuestionData',
          key: this.data.uuid,
          value: JSON.stringify(data)
        }]
      })
      .then((res) => {
        console.log('模考题目列表已记录')
@@ -1710,17 +1664,15 @@
    // 
    app.MG.identity
      .setUserKey({
        setKeyRequests: [
          {
            domain: 'mockAnswerData',
            key: this.data.uuid,
            value: JSON.stringify({
              currentIndex: this.data.currentIndex,
              time: this.data.countdownTime,
              answerData: saveData
            })
          }
        ]
        setKeyRequests: [{
          domain: 'mockAnswerData',
          key: this.data.uuid,
          value: JSON.stringify({
            currentIndex: this.data.currentIndex,
            time: this.data.countdownTime,
            answerData: saveData
          })
        }]
      })
      .then((res) => {
        this.setData({