فهرست منبع

试卷生成题卡调试

zhangjie 1 سال پیش
والد
کامیت
315c5cccea

+ 4 - 2
card/elements/explain/model.js

@@ -34,11 +34,13 @@ const MODEL = {
 };
 // tip属性存在时的条件:parent:大题的小题,container:题目内的子元素
 
-const getModel = () => {
+const getModel = (preSetData = {}) => {
+  const model = Object.assign({}, EXPLAIN_PROP, preSetData);
+
   return {
     id: getElementId(),
     key: randomCode(),
-    ...EXPLAIN_PROP,
+    ...model,
   };
 };
 

+ 4 - 2
card/elements/fill-line/model.js

@@ -22,11 +22,13 @@ const MODEL = {
   isCovered: false,
 };
 
-const getModel = () => {
+const getModel = (preSetData = {}) => {
+  const model = Object.assign({}, MODEL, preSetData);
+
   return {
     id: getElementId(),
     key: randomCode(),
-    ...MODEL,
+    ...model,
   };
 };
 

+ 26 - 0
src/assets/styles/pages.scss

@@ -1451,3 +1451,29 @@
     margin: 10px auto;
   }
 }
+// card-build-dialog
+.card-build-dialog {
+  .card-build {
+    position: fixed;
+    visibility: hidden;
+    left: -9999px;
+    height: 40px;
+  }
+  .loading-tips {
+    position: absolute;
+    width: 400px;
+    height: 120px;
+    left: 50%;
+    top: 50%;
+    transform: translate(-50%, -50%);
+    .el-loading-mask {
+      background-color: transparent;
+    }
+    .el-loading-spinner .el-loading-text {
+      color: #fff;
+    }
+    .el-loading-spinner .path {
+      stroke: #fff;
+    }
+  }
+}

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

@@ -1,4 +1,4 @@
-import { numberToChinese } from "@/plugins/utils";
+import { numberToChinese, maxNum } from "@/plugins/utils";
 import {
   getModel as createFillQuestion,
   getFullModel as getFillQuesitonElements,
@@ -177,6 +177,47 @@ export function getFillBackClozeCount(questionBodyContent) {
   return num;
 }
 
+function parseCommonQuestionPresetData(struct) {
+  const choiceQs = [
+    "SINGLE_ANSWER_QUESTION",
+    "MULTIPLE_ANSWER_QUESTION",
+    "BOOL_ANSWER_QUESTION",
+  ];
+  const { questions, structType } = struct;
+  let info = {};
+  if (choiceQs.includes(structType)) {
+    const optionCount = maxNum(questions.map((q) => q.optionCount));
+    const maxQuestionNo = maxNum(questions.map((q) => q.questionNo));
+    info = {
+      questionsCount: questions.length,
+      optionCount,
+      startNumber: maxQuestionNo - questions.length + 1,
+    };
+  } else if (structType === "FILL_BLANK_QUESTION") {
+    const optionCount = maxNum(questions.map((q) => q.fillCount));
+    const maxQuestionNo = maxNum(questions.map((q) => q.questionNo));
+    info = {
+      questionLineNums: questions.map((item) => {
+        return {
+          no: item.questionNo,
+          count: item.fillCount,
+        };
+      }),
+      questionLineType: "custom",
+      questionsCount: questions.length,
+      optionCount,
+      startNumber: maxQuestionNo - questions.length + 1,
+    };
+  } else {
+    const maxQuestionNo = maxNum(questions);
+    info = {
+      questionsCount: questions.length,
+      startNumber: maxQuestionNo - questions.length + 1,
+    };
+  }
+  return info;
+}
+
 export function buildCardElements(structList, elementTypePreSetInfo = {}) {
   let cardElements = [];
   structList.forEach((struct) => {
@@ -193,7 +234,8 @@ export function buildCardElements(structList, elementTypePreSetInfo = {}) {
         const presetData = {
           ...elementTypePreSet,
           topicName: `${topicName}、${qno}`,
-          paperStruct: { ...struct, questions: [qno] },
+          questionsCount: 1,
+          startNumber: qno,
         };
 
         const elements = elementModel[modelType](presetData);
@@ -202,10 +244,10 @@ export function buildCardElements(structList, elementTypePreSetInfo = {}) {
       return;
     }
 
-    let presetData = {
-      ...elementTypePreSet,
+    const presetData = {
       topicName,
-      paperStruct: struct,
+      ...elementTypePreSet,
+      ...parseCommonQuestionPresetData(struct),
     };
     if (struct.structType === "MULTIPLE_ANSWER_QUESTION")
       presetData.isMultiply = true;

+ 1 - 0
src/modules/card/autoBuild/simplePaperCard.js

@@ -178,6 +178,7 @@ export function buildCardFromPaperSimpleStruct(
   elementTypePreSetInfo
 ) {
   const structList = parsePaperStruct(paperSimpleStruct);
+  console.log(structList);
   const cardElements = buildCardElements(structList, elementTypePreSetInfo);
   // console.log(cardElements);
   return cardElements;

+ 20 - 12
src/modules/card/components/CardBuildDialog.vue

@@ -1,6 +1,6 @@
 <template>
   <el-dialog
-    class="card-build-dialog"
+    class="card-build-dialog opacity-dialog"
     :visible.sync="modalIsShow"
     :close-on-click-modal="false"
     :close-on-press-escape="false"
@@ -11,7 +11,11 @@
   >
     <div slot="title"></div>
     <div slot="footer"></div>
-    <div v-loading="loading" element-loading-text="拼命加载中"></div>
+    <div
+      class="loading-tips"
+      v-loading="loading"
+      element-loading-text="生成题卡中"
+    ></div>
 
     <div
       v-if="modalIsShow"
@@ -66,7 +70,7 @@
 <script>
 import { mapState, mapMutations, mapActions } from "vuex";
 import { saveCard, cardConfigInfos } from "../api";
-import { tikuPaperDetail } from "../../exam/api";
+// import { tikuPaperDetail } from "../../exam/api";
 import { getPaperJsonSimpleStructInfo } from "../autoBuild/paperStruct";
 import { buildCardFromPaperSimpleStruct } from "../autoBuild/simplePaperCard";
 // card components
@@ -74,6 +78,8 @@ import { getCardHeadModel } from "../../../../card/elementModel";
 import TopicElementPreview from "../../../../card/components/TopicElementPreview";
 import CardView from "../../../../card/components/CardView";
 import CardHeadSample from "../../../../card/elements/card-head/CardHead";
+// ceshi
+import paperData from "./paper.json";
 
 export default {
   name: "CardBuild",
@@ -122,17 +128,17 @@ export default {
       this.setCardConfig(cardConfig);
 
       // 试卷信息
-      const res = await tikuPaperDetail(this.presetData.paperId).catch(
-        () => {}
-      );
-      if (!res) {
-        this.emitResult({ success: false, message: "试卷内容获取失败" });
-        return;
-      }
+      // const res = await tikuPaperDetail(this.presetData.paperId).catch(
+      //   () => {}
+      // );
+      // if (!res) {
+      //   this.emitResult({ success: false, message: "试卷内容获取失败" });
+      //   return;
+      // }
+      const res = paperData;
       // 构建题卡
       try {
         const paperSimpleStruct = getPaperJsonSimpleStructInfo(res);
-        console.log(paperSimpleStruct);
         const elementTypePreSetInfo = {
           FILL_QUESTION: {
             pageSize: "A3",
@@ -146,6 +152,7 @@ export default {
         this.setTopics([getCardHeadModel(this.cardConfig), ...elements]);
         this.resetTopicSeries();
       } catch (error) {
+        console.dir(error);
         this.emitResult({
           success: false,
           message: error.message || "数据构建错误",
@@ -214,13 +221,14 @@ export default {
       const result = await saveCard(datas).catch((error) => {
         this.emitResult({
           success: false,
-          data: error.message || "保存题卡错误",
+          message: error.message || "保存题卡错误",
         });
       });
       if (!result) return;
       this.emitResult({ success: true, data: result });
     },
     emitResult(data) {
+      console.log(data);
       this.loading = false;
       this.$emit("confirm", data);
       this.cancel();

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 94 - 0
src/modules/card/components/paper.json


+ 3 - 1
src/modules/exam/components/createExamAndPrintTask/InfoExamTask.vue

@@ -774,9 +774,11 @@ export default {
     emitRelateInfo(type) {
       this.$emit("relate-info-change", this.getData(), type);
     },
+    // select-paper
     toSelect(attachment) {
       this.curAttachment = attachment;
-      this.$refs.SelectTikuPaperDialog.open();
+      // this.$refs.SelectTikuPaperDialog.open();
+      this.tikuPaperSelected({ id: "1" });
     },
     async tikuPaperSelected(data) {
       this.cardBuildPresetData = {

برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است