zhangjie 2 年 前
コミット
d88ca11520

+ 36 - 2
src/modules/question/components/QuestionImportEdit.vue

@@ -330,6 +330,8 @@ export default {
       return detailInfo;
     },
     checkImportPaperData(paperData) {
+      this.$message.closeAll();
+
       // 题目内容校验
       const MATCHING_QUESTION = ["PARAGRAPH_MATCHING", "BANKED_CLOZE"];
       const SELECT_QUESTION = [
@@ -348,6 +350,7 @@ export default {
           const { questionType, quesBody } = question;
           const questionTitle = `第${detail.number}大题第${question.number}小题`;
           let qErrInfo = [];
+          // 题干
           if (
             !MATCHING_QUESTION.includes(questionType) &&
             (!quesBody || isAnEmptyRichText(quesBody))
@@ -355,6 +358,7 @@ export default {
             qErrInfo.push(`没有题干`);
           }
 
+          // 选项
           if (SELECT_QUESTION.includes(questionType)) {
             if (!question.quesOptions.length) {
               qErrInfo.push(`没有选项`);
@@ -368,21 +372,50 @@ export default {
             }
           }
 
+          // 小题数
           if (
             NESTED_QUESTION.includes(questionType) &&
             !question.subQuestions.length
           ) {
             qErrInfo.push(`没有小题`);
           }
+
           if (qErrInfo.length) {
             errInfos.push(`${questionTitle}${qErrInfo.join("、")}`);
             qErrInfo = [];
           }
 
+          // 选词填空、段落匹配,单用模式时校验输入答案是否重复
+          if (
+            MATCHING_QUESTION.includes(questionType) &&
+            question.quesParam.matchingMode === 1
+          ) {
+            let selectedAnswer = [],
+              errorQuestionIndexs = [];
+            question.subQuestions.forEach((subq, sindex) => {
+              if (selectedAnswer.includes(subq.quesAnswer)) {
+                errorQuestionIndexs.push(`${question.number}-${sindex + 1}`);
+              } else {
+                if (subq.quesAnswer !== "[]")
+                  selectedAnswer.push(subq.quesAnswer);
+              }
+            });
+            if (errorQuestionIndexs.length) {
+              errInfos.push(
+                `第${
+                  detail.number
+                }大题${errorQuestionIndexs.join()}小题答案重复!`
+              );
+            }
+          }
+
           if (!NESTED_QUESTION.includes(questionType)) return;
 
+          // 套题小题校验
           question.subQuestions.forEach((subq, sindex) => {
-            const subqTitle = `第${detail.number}大题第${question.number}-${sindex}小题`;
+            const subqTitle = `第${detail.number}大题第${question.number}-${
+              sindex + 1
+            }小题`;
             if (
               questionType === "READING_COMPREHENSION" &&
               (!subq.quesBody || isAnEmptyRichText(subq.quesBody))
@@ -423,6 +456,7 @@ export default {
       }
 
       if (!this.data.importData.useOriginalPaper) return true;
+
       let detailNumbers = paperData.map((detail) => detail.number);
       // 大题号重复性校验
       let repeatDetaiNumbers = [];
@@ -470,7 +504,7 @@ export default {
             });
             if (subIndexs.length)
               errQuestions.push(
-                `第${detail.number}大题第${subIndexs.join}小题`
+                `第${detail.number}大题第${subIndexs.join()}小题`
               );
           } else {
             if (!question.score) {

+ 16 - 0
src/modules/question/components/edit/BankedClozeQuestion.vue

@@ -271,6 +271,22 @@ export default {
         return Promise.reject();
       }
 
+      // 单用时校验答案
+      if (this.modalForm.quesParam.matchingMode === 1) {
+        let selectedAnswer = [];
+        for (let i = 0; i < this.$refs.MatchQuestion.length; i++) {
+          const compInst = this.$refs.MatchQuestion[i];
+          if (selectedAnswer.includes(compInst.quesAnswer)) {
+            errorQuestionIndexs.push(i + 1);
+          } else {
+            if (compInst.quesAnswer) selectedAnswer.push(compInst.quesAnswer);
+          }
+        }
+        if (errorQuestionIndexs.length) {
+          this.$message.error(`第${errorQuestionIndexs.join()}小题答案重复!`);
+          return Promise.reject();
+        }
+      }
       return true;
     },
     getData() {