闫增涛
2024-04-09 253245731d2b0c5ea4994a9c4e17ad6b60136f2c
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({
  /**
@@ -50,15 +52,6 @@
   * 生命周期函数--监听页面加载
   */
  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 =
@@ -199,6 +192,30 @@
        const oldVal = value; // 记录属性的旧值
        value = newVal; // 更新属性的值
        callback.call(context, newVal, oldVal); // 调用回调函数,传递新值和旧值
      },
    });
  },
  // 改变loading状态
  changeLoadingState() {
    this.setData({
      loading: true
    })
  },
  // 返回拦截
  beforeleave() {
    wx.showModal({
      title: "提示",
      content: "未提交,是否退出答题",
      confirmColor: "#ff6c00",
      cancelColor: "#949494",
      complete: (res) => {
        if (res.cancel) {}
        if (res.confirm) {
          this.setData({
            submitStatus: true,
          });
          wx.navigateBack();
        }
      },
    });
  },
@@ -441,13 +458,12 @@
  },
  // 提交逻辑
  submitPaper() {
    // 关闭退出页面监听
    wx.disableAlertBeforeUnload();
    this.setData({
      submitStatus: true,
      loading: true,
    });
    const child = this.selectComponent("#question-options");
    debugger
    if (
      this.data.answerType == "option" ||
      this.data.answerType == "errorQuestion" ||
@@ -497,16 +513,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();
    }
@@ -625,16 +639,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 {
@@ -669,7 +681,6 @@
              let value = JSON.parse(res[0].value);
              // 有答题记录,得分赋值
              if (value) {
                wx.disableAlertBeforeUnload();
                this.setData({
                  submitStatus: true,
                });
@@ -776,34 +787,26 @@
            // 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,
            isCollect:
              this.data.collectList.indexOf(item.id) > -1 ? true : false,
            isCollect: this.data.collectList.indexOf(item.id) > -1 ? true : false,
            isUnfold: "", // 控制解析的折叠面板是否展开
          };
          // 多选和填空答案肯为数组,要转换JSON格式
@@ -852,8 +855,8 @@
            questionObj.option.forEach((item) => {
              if (item.txt)
                item.txt = item.txt
                  .replace(/\<img/gi, '<img class="option-rich-img"')
                  .replace(/\<p/gi, '<p class="stem-rich-p"');
                .replace(/\<img/gi, '<img class="option-rich-img"')
                .replace(/\<p/gi, '<p class="stem-rich-p"');
            });
          }
          // 解析富文本处理
@@ -1040,13 +1043,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);
@@ -1104,13 +1105,11 @@
    }
    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) => {});
  },
@@ -1149,17 +1148,15 @@
  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) => {});
  },
  // 获取答题数据
  // 获取旧答题数据
  getAnswerInfo(callback) {
    app.MG.identity
      .getUserKey({
@@ -1170,7 +1167,7 @@
        if (callback) callback(res);
      });
  },
  // 删除答题数据
  // 删除旧答题数据
  delAnswerInfo(callback) {
    app.MG.identity
      .delUserKey({
@@ -1203,6 +1200,8 @@
          wx.showModal({
            title: "提示",
            content: "收藏夹暂无数据", //editable如果为true,这就是输入框的内容
            confirmColor: "#ff6c00",
            cancelColor: "#949494",
            editable: false, //是否显示输入框
            showCancel: false,
            success: (res) => {
@@ -1221,8 +1220,7 @@
  async getCollectDataList() {
    let questionArr = [];
    this.setData({
      cardList: [
        {
      cardList: [{
          catalogName: "单选题",
          infoList: [],
        },
@@ -1276,28 +1274,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,
@@ -1368,9 +1359,19 @@
            questionObj.option.forEach((item) => {
              if (item.txt)
                item.txt = item.txt
                  .replace(/\<img/gi, '<img class="option-rich-img"')
                  .replace(/\<p/gi, '<p class="stem-rich-p"');
                .replace(/\<img/gi, '<img class="option-rich-img"')
                .replace(/\<p/gi, '<p class="stem-rich-p"');
            });
          }
          // 解析富文本处理
          if (
            questionObj.analysisCon &&
            typeof questionObj.analysisCon == "string"
          ) {
            questionObj.analysisCon = questionObj.analysisCon.replace(
              /\<img/gi,
              '<img style="max-width: 300rpx !important;object-fit: contain;" class="stem-rich-img" '
            );
          }
          if (item.Embedded_QuestionBank_QuestionType == "judge") {
            questionObj.type = "判断题";
@@ -1439,6 +1440,8 @@
          wx.showModal({
            title: "提示",
            content: "错题集暂无数据", //editable如果为true,这就是输入框的内容
            confirmColor: "#ff6c00",
            cancelColor: "#949494",
            editable: false, //是否显示输入框
            showCancel: false,
            success: (res) => {
@@ -1456,8 +1459,7 @@
  // 获取错题集
  async getErrorDataList() {
    this.setData({
      cardList: [
        {
      cardList: [{
          catalogName: "单选题",
          infoList: [],
        },
@@ -1509,28 +1511,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,
@@ -1603,9 +1598,19 @@
          questionObj.option.forEach((item) => {
            if (item.txt)
              item.txt = item.txt
                .replace(/\<img/gi, '<img class="option-rich-img"')
                .replace(/\<p/gi, '<p class="stem-rich-p"');
              .replace(/\<img/gi, '<img class="option-rich-img"')
              .replace(/\<p/gi, '<p class="stem-rich-p"');
          });
        }
        // 解析富文本处理
        if (
          questionObj.analysisCon &&
          typeof questionObj.analysisCon == "string"
        ) {
          questionObj.analysisCon = questionObj.analysisCon.replace(
            /\<img/gi,
            '<img style="max-width: 300rpx !important;object-fit: contain;" class="stem-rich-img" '
          );
        }
        if (item.Embedded_QuestionBank_QuestionType == "judge") {
          questionObj.type = "判断题";
@@ -1787,35 +1792,27 @@
            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"
              ? []
              : "",
            isUserAnswer: oldObj ? this.isHaveAnswer(oldObj.userAnswer) : false,
            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.answer) : 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,
            isCollect: this.data.collectList.indexOf(item.id) > -1 ? true : false,
            isUnfold: "", // 控制解析的折叠面板是否展开
          };
          // 多选和填空答案肯为数组,要转换JSON格式
@@ -1946,26 +1943,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("模考题目列表已记录");
@@ -1997,9 +1990,8 @@
          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,
            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));
@@ -2043,17 +2035,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({
@@ -2099,4 +2089,4 @@
    );
    return newContent;
  },
});
});