Răsfoiți Sursa

解决套题自建题卡bug

zhangjie 2 ani în urmă
părinte
comite
b4a5c160f4

+ 5 - 5
src/modules/card/autoBuild/paperCard.js

@@ -159,7 +159,6 @@ function parseCommonTypeQuestions(structType, dataList) {
 }
 
 export function getFillBackClozeCount(questionBodyContent) {
-  // TODO:
   let questionBody = null;
   let num = 0;
   try {
@@ -180,9 +179,10 @@ export function buildCardElements(structList) {
   let cardElements = [];
   structList.forEach((struct) => {
     const detailChineseNumber = numberToChinese(struct.detailNo);
-    let topicName = struct.isCommon
-      ? `${detailChineseNumber}、${struct.detailName}`
-      : `${detailChineseNumber}(${struct.nestedQNo})`;
+    let topicName =
+      struct.isCommon || (!struct.isCommon && struct.isOnlyOneNested)
+        ? `${detailChineseNumber}、${struct.detailName}`
+        : `${detailChineseNumber}(${struct.nestedQNo})`;
     const modelType = structTypeToCardElementType[struct.structType];
 
     if (!struct.isCommon && struct.structType === "TEXT_ANSWER_QUESTION") {
@@ -217,7 +217,7 @@ export function buildCardElements(structList) {
 export function buildPaperCard(paperJson) {
   const structList = parsePaperStruct(paperJson);
   const cardElements = buildCardElements(structList);
-  console.log(cardElements);
+  // console.log(cardElements);
   return cardElements;
 }
 

+ 15 - 9
src/modules/card/autoBuild/simplePaperCard.js

@@ -14,21 +14,26 @@ function parseSimpleQuestion(simpleQuestion) {
   return {
     detailNo: detailNo * 1,
     questionNo: questionNo * 1,
-    subQno: subQno && subQno * 1,
+    subQno: subQno ? subQno * 1 : null,
     questionType,
     qinfo: qinfo * 1,
   };
 }
 
+function checkDetailIsOnlyOneNested(detail) {
+  const firstQuestionNo = detail.questions[0].questionNo;
+  return !detail.questions.some((q) => q.questionNo !== firstQuestionNo);
+}
+
 function parsePaperStruct(paperSimpleStruct) {
   // console.log(paperSimpleStruct);
   const dataList = paperSimpleStruct.split("#");
   const details = dataList.filter((item) => item.startsWith("detail"));
   let detailNames = {};
   details.forEach((detail) => {
-    const [detailNos, detailName] = detail.split("-");
-    const detailNo = detailNos.replace("detail:", "") * 1;
-    detailNames[detailNo] = detailName;
+    const pos = detail.indexOf("-");
+    const detailNo = detail.substring(0, pos).replace("detail:", "") * 1;
+    detailNames[detailNo] = detail.substring(pos + 1);
   });
   const questions = dataList
     .filter((item) => !item.startsWith("detail"))
@@ -50,8 +55,9 @@ function parsePaperStruct(paperSimpleStruct) {
 
   let structList = [];
   detailList.forEach((detail) => {
-    const commonQuestions = detail.questions.filter((q) =>
-      COMMON_QUESTION_TYPES.includes(q.questionType)
+    detail.isOnlyOneNested = checkDetailIsOnlyOneNested(detail);
+    const commonQuestions = detail.questions.filter(
+      (q) => COMMON_QUESTION_TYPES.includes(q.questionType) && q.subQno === null
     );
     if (commonQuestions.length) {
       const commonStructList = getCommonQuestionStructList(
@@ -63,9 +69,7 @@ function parsePaperStruct(paperSimpleStruct) {
       structList.push(...commonStructList);
     }
 
-    const nestedQuestions = detail.questions.filter(
-      (q) => !COMMON_QUESTION_TYPES.includes(q.questionType)
-    );
+    const nestedQuestions = detail.questions.filter((q) => q.subQno !== null);
     if (nestedQuestions.length) {
       const nestedStructList = getNestedQuestionStructList(
         detail,
@@ -100,6 +104,7 @@ function getCommonQuestionStructList(
     structList.push({
       detailName: detail.detailName,
       detailNo: detail.detailNo,
+      isOnlyOneNested: detail.isOnlyOneNested,
       structType,
       isCommon,
       nestedQNo,
@@ -135,6 +140,7 @@ function getNestedQuestionStructList(detail, questions) {
       false,
       question.questionNo
     );
+    // console.log(qStructList);
     structList.push(...qStructList);
   });
   return structList;

+ 2 - 2
src/modules/card/elements/fill-question/model.js

@@ -61,7 +61,7 @@ const getModel = (presetData) => {
 };
 
 const getFullModel = (modelProp, { pageSize, columnNumber }) => {
-  console.log(modelProp);
+  // console.log(modelProp);
   const parent = deepCopy(modelProp);
   const childModel = objAssign(MODEL, parent);
 
@@ -132,7 +132,7 @@ const getFullModel = (modelProp, { pageSize, columnNumber }) => {
       questionGroup,
       parent,
     });
-    console.log(questionGroup);
+    // console.log(questionGroup);
     const maxOptionCountPerGroup =
       questionGroup.length > 1
         ? childModel.questionCountPerGroup

+ 4 - 1
src/modules/card/views/CardEdit.vue

@@ -75,7 +75,6 @@ export default {
 
       const paperRes = await paperDetailApi(this.paperId);
       this.paperJson = paperRes.data;
-      const curPaperSimpleStruct = getPaperJsonSimpleStructInfo(this.paperJson);
 
       const detDataRes = await cardDetailByPaperId(this.paperId);
       if (detDataRes.data && detDataRes.data.id)
@@ -83,6 +82,10 @@ export default {
 
       if (detDataRes.data && detDataRes.data.content) {
         this.cardContent = JSON.parse(detDataRes.data.content);
+        const curPaperSimpleStruct = getPaperJsonSimpleStructInfo(
+          this.paperJson
+        );
+
         if (curPaperSimpleStruct !== this.cardContent.paperSimpleStruct) {
           this.$message.warning("试卷结构有变化,已重新生成题卡");
           this.cardContent = {

+ 1 - 1
src/modules/questions/views/EditPaperPendingTrial.vue

@@ -176,7 +176,7 @@
               >
             </div>
             <div class="edit-cont-body">
-              <div v-html="paper.examRemark"></div>
+              <rich-text :text-json="paper.examRemark"></rich-text>
             </div>
           </div>
         </div>