zhongshujie
2 天以前 ce70bc450a2401997bb850f89f3c4dc0a23e0a72
src/assets/methods/examination.js
@@ -63,15 +63,18 @@
    if (
      foundItems &&
      foundItems.Embedded_QuestionBank_QuestionType == "material"
    ) {
    ) {
      foundItems.childList = bookQuestionsList.filter(
        (ditem) =>
          ditem.productLinkInfo[0].LinkPath == foundItems.productLinkPath
        (ditem) => ditem.productLinkInfo[0].LinkPath == foundItems.productLinkPath
      );
    }
    let foundlist = [];
    foundlist.push(foundItems);
    if(foundItems){
      foundlist.push(foundItems);
    }else{
      console.error("题目Id错误"+ qitem)
      return
    }
    if (foundlist.length > 0 && foundlist != undefined) {
      foundlist.forEach((item, index) => {
        const questionObj = handleQuestion(item, index + 1, oldList, collectList);
@@ -99,183 +102,6 @@
      });
    }
  }
  // for (let qindex = 0; qindex < questionList.length; qindex++) {
  //   const qitem = questionList[qindex];
  //   let query = {
  //     storeInfo: activeBook.storeRefcode,
  //     path: "*",
  //     cmsPath: activeBook.rootCmsItemId,
  //     cmsType: "*",
  //     productId: activeBook.bookId,
  //     queryType: "*",
  //     itemIds: qitem + "",
  //     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: [],
  //     },
  //   };
  //   const res = await MG.store.getProductDetail(query);
  //   console.log(res.datas.cmsDatas[0].datas, "材料题");
  //   if (!res.datas) return false;
  //   res.datas.cmsDatas[0].datas.forEach((item, index) => {
  //     let oldObj = {};
  //     if (oldList) {
  //       oldObj = oldList.find((item) => item.id == qitem);
  //     }
  //     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), // 题干
  //       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.userAnswer
  //         : item.Embedded_QuestionBank_QuestionType == "completion" ||
  //           item.Embedded_QuestionBank_QuestionType == "multipleChoice"
  //         ? []
  //         : "",
  //       isSubmit: false, // 查看解析
  //       isRight: null, // 是否正确
  //       isComplete: false,
  //       isCollect: collectList.indexOf(qitem) > -1 ? true : false,
  //       isUnfold: "",
  //     };
  //     console.log(item, "材料题");
  //     // 多选和填空答案肯为数组,要转换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",
  //           };
  //           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 (questionObj.stemStyle == "RichText") {
  //       // questionObj.option.txt = ''
  //       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"')
  //         .replace("../file", process.env.VUE_APP_API_URL + "/file");
  //     }
  //     // 选项富文本处理
  //     if (
  //       questionObj.optionStyle == "RichText" &&
  //       (questionObj.questionType == "singleChoice" ||
  //         questionObj.questionType == "judge" ||
  //         questionObj.questionType == "multipleChoice")
  //     ) {
  //       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("../file", process.env.VUE_APP_API_URL + "/file");
  //       });
  //     }
  //     // 解析富文本处理
  //     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 (questionObj.questionType == 'singleChoice') {
  //     //   const src = this.extractSourceSrc(questionObj.stem.stemTxt)
  //     //   if (src) {
  //     //     questionObj.src = src
  //     //     questionObj.stem.stemTxt = this.removeVideoAndAudioTags(questionObj.stem.stemTxt)
  //     //   }
  //     // }
  //     if (item.Embedded_QuestionBank_QuestionType == "judge") {
  //       questionObj.type = "判断题";
  //       judgeArr.push(questionObj);
  //     } else if (item.Embedded_QuestionBank_QuestionType == "singleChoice") {
  //       questionObj.type = "单选题";
  //       singleChoiceArr.push(questionObj);
  //     } else if (item.Embedded_QuestionBank_QuestionType == "multipleChoice") {
  //       questionObj.type = "多选题";
  //       multipleChoiceArr.push(questionObj);
  //     } else if (item.Embedded_QuestionBank_QuestionType == "completion") {
  //       questionObj.type = "填空题";
  //       completionArr.push(questionObj);
  //     } else if (item.Embedded_QuestionBank_QuestionType == "shortAnswer") {
  //       questionObj.type = "简答题";
  //       shortArr.push(questionObj);
  //     } else if (item.Embedded_QuestionBank_QuestionType == "material") {
  //       questionObj.type = "材料题";
  //       materialArr.push(questionObj);
  //     }
  //   });
  // }
  // 22
  cardList[0].infoList = singleChoiceArr;
  cardList[1].infoList = judgeArr;
@@ -301,6 +127,7 @@
  if (oldList) {
    oldObj = oldList.find((oldItem) => oldItem.id == qitem);
  }
  // 1. 构建 questionObj 的基础结构
  const questionObj = {
    number: index + 1, // 题号
@@ -329,13 +156,15 @@
        ? []
        : "",
    isSubmit: false, // 查看解析
    isRight: null, // 是否正确
    isComplete: false,
    isRight: oldObj
    ? oldObj.isRight
    :null, // 是否正确
    isComplete: oldObj
    ? oldObj.isComplete
    : false,
    isCollect: collectList.indexOf(qitem) > -1 ? true : false,
    isUnfold: "",
  };
  // 2. 处理多选和填空题的答案(JSON格式转换)
  if (
@@ -372,13 +201,9 @@
  // 4. 材料题处理 (核心递归点)
  if (questionObj.questionType == "material" && Array.isArray(item.childList)) {
    // 遍历子题目列表,并对每一个子项递归调用 processQuestionItem
    questionObj.childList = item.childList.map((childItem, childIndex) => {
      // 子题目通常不需要 oldList 和 collectList,但为了逻辑统一,可以传入
      // 如果子题目也需要独立的作答状态和收藏状态,则需要调整 oldList 和 collectList 的结构
      // 这里假设它们不需要,或者由父级材料题统一管理
      return handleQuestion(childItem, childIndex + 1, null, []);
      return handleQuestion(childItem, childIndex + 1, oldList, collectList);
    });
  }