zhangjie %!s(int64=2) %!d(string=hai) anos
pai
achega
4c83444061

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

@@ -1288,6 +1288,23 @@
     max-width: 200px;
   }
 }
+.question-info-view {
+  color: #9a9dab;
+  .question-info-item {
+    min-height: 20px;
+    line-height: 20px;
+  }
+  .question-info-label {
+    float: left;
+    width: 50px;
+    padding-right: 10px;
+    text-align: right;
+    font-weight: 600;
+  }
+  .question-info-content {
+    margin-left: 50px;
+  }
+}
 
 // ep-detail
 .ep-detail {

+ 35 - 0
src/modules/question/components/QuestionImportEdit.vue

@@ -186,6 +186,7 @@ export default {
       this.paperData = [];
       this.paperRichJson = { sections: [] };
       window.sessionStorage.removeItem("coursePropertys");
+      this.$message.closeAll();
     },
     cancel() {
       this.modalIsShow = false;
@@ -375,6 +376,40 @@ export default {
       }
 
       if (!this.data.importData.useOriginalPaper) return true;
+      let detailNumbers = paperData.map((detail) => detail.number);
+      // 大题号重复性校验
+      let repeatDetaiNumbers = [];
+      let detailNums = [];
+      for (let i = 0; i < detailNumbers.length; i++) {
+        const num = detailNumbers[i];
+        if (detailNums.includes(num)) {
+          if (!repeatDetaiNumbers.includes(num)) repeatDetaiNumbers.push(num);
+        } else {
+          detailNums.push(num);
+        }
+      }
+      if (repeatDetaiNumbers.length) {
+        this.$message({
+          showClose: true,
+          message: `大题号${repeatDetaiNumbers.join("、")}重复`,
+          type: "error",
+          duration: 0,
+        });
+        return;
+      }
+      // 大题号连续性校验
+      for (let i = 0; i < detailNumbers.length; i++) {
+        if (detailNumbers[i] - 1 !== i) {
+          this.$message({
+            showClose: true,
+            message: "大题号不连续",
+            type: "error",
+            duration: 0,
+          });
+          return;
+        }
+      }
+
       // 答案、分数校验
       let totalScore = calcSum(paperData.map((d) => d.totalScore));
       let errQuestions = [];

+ 0 - 1
src/modules/question/components/import-edit/BooleanQuestion.vue

@@ -11,7 +11,6 @@
       <question-info-view
         v-if="!isActive"
         :question="getData()"
-        label-width="50px"
       ></question-info-view>
     </div>
     <div v-if="isActive" class="ep-question-props">

+ 0 - 1
src/modules/question/components/import-edit/FillBlankQuestion.vue

@@ -11,7 +11,6 @@
       <question-info-view
         v-if="!isActive"
         :question="getData()"
-        label-width="50px"
       ></question-info-view>
     </div>
     <div v-if="isActive" class="ep-question-props">

+ 0 - 1
src/modules/question/components/import-edit/MatchQuestion.vue

@@ -11,7 +11,6 @@
       <question-info-view
         v-if="!isActive"
         :question="getData()"
-        label-width="50px"
       ></question-info-view>
     </div>
     <div v-if="isActive" class="ep-question-props">

+ 29 - 24
src/modules/question/components/import-edit/QuestionInfoView.vue

@@ -1,25 +1,34 @@
 <template>
   <div class="question-info-view">
-    <el-form :label-width="labelWidth">
-      <el-form-item v-if="IS_PAPER_MODE" label="分值">
-        {{ score }}
-      </el-form-item>
-      <el-form-item label="答案">
+    <div class="question-info-item" v-if="IS_PAPER_MODE">
+      <div class="question-info-label">分值</div>
+      <div class="question-info-content">{{ score }}</div>
+    </div>
+    <div class="question-info-item">
+      <div class="question-info-label">答案</div>
+      <div class="question-info-content">
         <question-answer :data="question"></question-answer>
-      </el-form-item>
-      <el-form-item
-        v-if="!isAnEmptyRichText(question.answerAnalysis)"
-        label="答案解析"
-      >
+      </div>
+    </div>
+    <div
+      v-if="!isAnEmptyRichText(question.answerAnalysis)"
+      class="question-info-item"
+    >
+      <div class="question-info-label">解析</div>
+      <div class="question-info-content">
         <rich-text :text-json="question.answerAnalysis"></rich-text>
-      </el-form-item>
-      <el-form-item v-if="question.difficulty" label="难度">
-        {{ question.difficulty }}
-      </el-form-item>
-      <el-form-item
-        v-if="question.quesProperties && question.quesProperties.length"
-        label="属性"
-      >
+      </div>
+    </div>
+    <div v-if="question.difficulty" class="question-info-item">
+      <div class="question-info-label">难度</div>
+      <div class="question-info-content">{{ question.difficulty }}</div>
+    </div>
+    <div
+      v-if="question.quesProperties && question.quesProperties.length"
+      class="question-info-item"
+    >
+      <div class="question-info-label">属性</div>
+      <div class="question-info-content">
         <el-tag
           v-for="(content, propIndex) in question.quesProperties"
           :key="propIndex"
@@ -32,8 +41,8 @@
           <span v-if="content.secondProperty" style="margin: 0 3px">/</span>
           {{ content.secondProperty && content.secondProperty.name }}
         </el-tag>
-      </el-form-item>
-    </el-form>
+      </div>
+    </div>
   </div>
 </template>
 
@@ -53,10 +62,6 @@ export default {
         return {};
       },
     },
-    labelWidth: {
-      type: String,
-      default: "100px",
-    },
   },
   data() {
     return {};

+ 0 - 1
src/modules/question/components/import-edit/SelectQuestion.vue

@@ -41,7 +41,6 @@
       <question-info-view
         v-if="!isActive"
         :question="getData()"
-        label-width="50px"
       ></question-info-view>
     </div>
     <div v-if="isActive" class="ep-question-props">

+ 0 - 1
src/modules/question/components/import-edit/TextAnswerQuestion.vue

@@ -11,7 +11,6 @@
       <question-info-view
         v-if="!isActive"
         :question="getData()"
-        label-width="50px"
       ></question-info-view>
     </div>
     <div v-if="isActive" class="ep-question-props">