zhangjie 3 år sedan
förälder
incheckning
1d717e9fc6

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

@@ -974,6 +974,23 @@
     position: absolute;
     background-color: rgba($color: #000000, $alpha: 0.2);
   }
+  .element-delete {
+    position: absolute;
+    height: 20px;
+    width: 20px;
+    top: 0;
+    right: -20px;
+    line-height: 20px;
+    text-align: center;
+    font-size: 18px;
+    display: none;
+    z-index: 9;
+    color: $--color-danger;
+    cursor: pointer;
+    &:hover {
+      color: mix(#fff, $--color-danger, 20%);
+    }
+  }
 
   .element-resize {
     background-color: transparent;
@@ -999,6 +1016,9 @@
           display: block;
         }
       }
+      .element-delete {
+        display: block;
+      }
     }
   }
   .element-resize-compact {

+ 39 - 20
src/modules/stmms/components/markParam/AnswerPopover.vue

@@ -6,8 +6,8 @@
     trigger="hover"
   >
     <el-radio-group v-model="bAnswer" @change="bAnswerChange">
-      <el-radio v-for="item in radioList" :key="item" :label="item">{{
-        item
+      <el-radio v-for="item in radioList" :key="item.code" :label="item.code">{{
+        item.name
       }}</el-radio>
     </el-radio-group>
     <div class="answer-divider"></div>
@@ -16,16 +16,27 @@
         item
       }}</el-checkbox>
     </el-checkbox-group>
-    <el-button
-      slot="reference"
-      :type="answerStr ? 'primary' : 'default'"
-      plain
-      >{{ answerStr || "请设置答案" }}</el-button
-    >
+    <el-button slot="reference" :type="answer ? 'primary' : 'default'" plain>{{
+      answerDisplay || "请设置答案"
+    }}</el-button>
   </el-popover>
 </template>
 
 <script>
+const RADIO_LIST = [
+  {
+    name: "√",
+    code: "true"
+  },
+  {
+    name: "×",
+    code: "false"
+  }
+];
+const RADIOS = RADIO_LIST.map(item => item.code);
+const RADIO_DICT = {};
+RADIO_LIST.forEach(item => (RADIO_DICT[item.code] = item.name));
+
 export default {
   name: "answer-popover",
   props: {
@@ -35,50 +46,58 @@ export default {
   },
   data() {
     return {
-      answerStr: "",
+      answer: "",
       oAnswer: [],
       bAnswer: null,
       choiceList: "abcdefghijklmnopqrstuvwxyz".toUpperCase().split(""),
-      radioList: "√×".split("")
+      radioList: RADIO_LIST
     };
   },
   watch: {
     value: {
       immediate: true,
       handler(val) {
-        if (val === this.answerStr) return;
+        if (val === this.answer) return;
 
-        if (this.radioList.includes(val)) {
+        if (RADIOS.includes(val)) {
           this.bAnswer = val;
         } else {
           this.oAnswer = val.split("");
         }
-        this.updateAnswerStr();
+        this.updateAnswer();
+      }
+    }
+  },
+  computed: {
+    answerDisplay() {
+      if (this.bAnswer) {
+        return RADIO_DICT[this.bAnswer];
       }
+      return [...this.oAnswer].sort((a, b) => (a < b ? -1 : 1)).join("");
     }
   },
   methods: {
     oAnswerChange(val) {
       if (val) this.bAnswer = null;
-      this.updateAnswerStr();
+      this.updateAnswer();
       this.emitChange();
     },
     bAnswerChange(val) {
       if (val) this.oAnswer = [];
-      this.updateAnswerStr();
+      this.updateAnswer();
       this.emitChange();
     },
-    updateAnswerStr() {
+    updateAnswer() {
       if (this.bAnswer) {
-        this.answerStr = this.bAnswer;
+        this.answer = this.bAnswer;
         return;
       }
       this.oAnswer.sort((a, b) => (a < b ? -1 : 1));
-      this.answerStr = this.oAnswer.join("");
+      this.answer = this.oAnswer.join("");
     },
     emitChange() {
-      this.$emit("input", this.answerStr);
-      this.$emit("change", this.answerStr);
+      this.$emit("input", this.answer);
+      this.$emit("change", this.answer);
     }
   }
 };

+ 1 - 1
src/modules/stmms/components/markParam/MarkPaperMarker.vue

@@ -195,7 +195,7 @@ export default {
       this.curGroupInfo = {
         id: this.$randomCode(),
         markerList: [],
-        doubleRate: 1,
+        doubleRate: 0,
         arbitrateThreshold: 1,
         questions: [],
         pictureConfigList: []

+ 13 - 8
src/modules/stmms/components/markParam/MarkPaperStructure.vue

@@ -177,15 +177,20 @@ export default {
       }
       return classNames.join(" ");
     },
+    getNextMainStartPos(startPos, curMainId) {
+      let nextMainStartPos = null;
+      for (let i = startPos, len = this.tableData.length; i < len; i++) {
+        const element = this.tableData[i];
+        if (element.mainId !== curMainId) {
+          nextMainStartPos = i;
+          return nextMainStartPos;
+        }
+      }
+      if (nextMainStartPos === null) return this.tableData.length;
+    },
     toAddMain(row) {
-      const mainStartPos = this.tableData.findIndex(
-        item => item.mainId === row.mainId
-      );
-      let nextMainStartPos = this.tableData
-        .slice(mainStartPos)
-        .findIndex(item => item.mainId !== row.mainId);
-      if (nextMainStartPos === -1) nextMainStartPos = this.tableData.length;
-
+      const startPos = this.tableData.findIndex(item => item.id === row.id);
+      let nextMainStartPos = this.getNextMainStartPos(startPos, row.mainId);
       this.tableData.splice(nextMainStartPos, 0, {
         id: this.$randomCode(),
         qType: row.qType,

+ 0 - 1
src/modules/stmms/components/markParam/ModifyMarkerQuestion.vue

@@ -440,7 +440,6 @@ export default {
         delete nitem.selected;
         return nitem;
       });
-      console.log(datas);
       this.$emit("modified", datas);
       this.cancel();
     }

+ 1 - 0
src/modules/stmms/components/markParam/areaCropper/AreaCropper.vue

@@ -27,6 +27,7 @@
         :key="area.key"
         :data="area"
         :cur-element="curArea"
+        @del-element="removeArea"
         @act-element="actCurArea"
         @resize-over="modifyArea"
       ></area-item>

+ 6 - 0
src/modules/stmms/components/markParam/areaCropper/ElementItem.vue

@@ -11,6 +11,9 @@
       @on-click="activeCurElement"
     >
       <div class="element-item-body" :style="styles" :id="data.id"></div>
+      <div class="element-delete" @click="toDelete">
+        <i class="el-icon-error"></i>
+      </div>
     </element-resize>
   </div>
 </template>
@@ -65,6 +68,9 @@ export default {
     },
     activeCurElement() {
       this.$emit("act-element", this.data);
+    },
+    toDelete() {
+      this.$emit("del-element", this.data);
     }
   }
 };