Explorar o código

题卡编辑题型校验,学生信息自动填充调整

zhangjie %!s(int64=2) %!d(string=hai) anos
pai
achega
5dc3de2cb7

+ 37 - 5
card/components/ElementPropEdit.vue

@@ -94,7 +94,33 @@ export default {
       }, 500);
       this.$refs.ElementPropEditComp.submit();
     },
-    checkTopic(element) {
+    equalTopicType(topic1, topic2) {
+      if (topic1.type === topic2.type) {
+        if (topic1.type !== "FILL_QUESTION") {
+          return true;
+        }
+
+        return (
+          topic1.isBoolean === topic2.isBoolean &&
+          topic1.isMultiply === topic2.isMultiply
+        );
+      }
+      return false;
+    },
+    checkTopicType(element) {
+      const relateTopics = this.topics.filter(
+        (item) =>
+          item.topicNo === element.topicNo &&
+          ((element.type !== "COMPOSITION" &&
+            item.parent &&
+            item.parent.id !== element.id) ||
+            (element.type === "COMPOSITION" && item.id !== element.id))
+      );
+      if (!relateTopics.length) return true;
+
+      return !relateTopics.some((topic) => this.equalTopicType(element, topic));
+    },
+    checkTopicNo(element) {
       if (element.type === "COMPOSITION") return true;
 
       const relateTopics = this.topics.filter(
@@ -126,10 +152,16 @@ export default {
       return !unvalid;
     },
     modified(element) {
-      // 在不校验大题号重复的情况下,需要校验小题号重复
-      if (!element["container"] && !this.checkTopic(element)) {
-        this.$message.error("小题号重复,请重新设置小题号");
-        return;
+      if (!element["container"]) {
+        if (!this.checkTopicType(element)) {
+          this.$message.error("同一大题号的所有试题题型必须相同");
+          return;
+        }
+        // 在不校验大题号重复的情况下,需要校验小题号重复
+        if (!this.checkTopicNo(element)) {
+          this.$message.error("小题号重复,请重新设置小题号");
+          return;
+        }
       }
       // 编辑试题
       // 属性存在的条件:parent:大题的小题,container:题目内的子元素

+ 1 - 1
card/store/card.js

@@ -278,7 +278,7 @@ const actions = {
         });
       });
     });
-    console.log(elementPapeNo);
+    // console.log(elementPapeNo);
     if (elementPapeNo === null || elementPapeNo === state.curPageNo) return;
 
     let pageTops = state.pages.map((page, pageNo) => {

+ 10 - 4
src/modules/card/views/CardPreview.vue

@@ -67,15 +67,18 @@ export default {
 
       this.IS_HTML_TEMPLATE =
         this.cardType === "GENERIC" && this.cardCreateMethod === "UPLOAD";
+      const isPrintExamNumber = cardConfig.examNumberStyle === "PRINT";
       let fieldInfos = {};
       [...cardConfig.requiredFields, ...cardConfig.extendFields]
         .filter((item) => item.enable)
         .map((item) => {
-          fieldInfos[item.code] = "${" + item.code + "}";
+          fieldInfos[item.code] = isPrintExamNumber
+            ? "${" + item.code + "}"
+            : "";
         });
 
       if (this.cardCreateMethod === "STANDARD") {
-        if (cardConfig.examNumberStyle === "PRINT") {
+        if (isPrintExamNumber) {
           fieldInfos.examNumber = "data:image/png;base64,${examNumber}";
           fieldInfos.examNumberStr = "${examNumberStr}";
         }
@@ -146,13 +149,16 @@ export default {
       let fieldInfos = {};
       const defContent = "相关信息";
       const defNumber = "123456789";
+      const isPrintExamNumber = cardConfig.examNumberStyle === "PRINT";
       [...cardConfig.requiredFields, ...cardConfig.extendFields]
         .filter((item) => item.enable)
         .map((item) => {
-          fieldInfos[item.code] = stdInfo[item.code] || defContent;
+          fieldInfos[item.code] = isPrintExamNumber
+            ? stdInfo[item.code] || defContent
+            : "";
         });
       if (this.cardCreateMethod === "STANDARD") {
-        if (cardConfig.examNumberStyle === "PRINT") {
+        if (isPrintExamNumber) {
           fieldInfos.examNumber = this.getBase64Barcode(
             stdInfo["examNumber"] || defNumber
           );

+ 5 - 2
src/modules/card/views/CardRulePreview.vue

@@ -71,13 +71,16 @@ export default {
       let fieldInfos = {};
       const defContent = "相关信息";
       const defNumber = "123456789";
+      const isPrintExamNumber = cardConfig.examNumberStyle === "PRINT";
       [...cardConfig.requiredFields, ...cardConfig.extendFields]
         .filter((item) => item.enable)
         .map((item) => {
           // console.log(item);
-          fieldInfos[item.code] = stdInfo[item.code] || defContent;
+          fieldInfos[item.code] = isPrintExamNumber
+            ? stdInfo[item.code] || defContent
+            : "";
         });
-      if (cardConfig.examNumberStyle === "PRINT") {
+      if (isPrintExamNumber) {
         fieldInfos.examNumber = this.getBase64Barcode(
           stdInfo["examNumber"] || defNumber
         );