zhangjie 2 年之前
父节点
当前提交
efa080b63f

+ 622 - 0
src/modules/grading/components/GradeActionRough.vue

@@ -0,0 +1,622 @@
+<template>
+  <div class="grade-action">
+    <!-- 头部信息 ------ -->
+    <!-- 试卷状态 -->
+    <!-- 状态:已评,待评,打回,仲裁,改大裆,改大裆打小档 -->
+    <div class="action-paper-state" v-if="stepType === 'reject'">
+      <p class="paper-state-cont">
+        {{ curPaperOrTask.isRejectedByLeader ? "科组长打回" : "自动打回" }}
+      </p>
+      <p class="paper-state-intro">
+        <span v-if="curPaperOrTask.rejectedCount"
+          >共打回{{ curPaperOrTask.rejectedCount }}次</span
+        >
+      </p>
+    </div>
+    <div class="action-paper-state" v-else>
+      <p class="paper-state-cont">{{ stepLabel }}</p>
+    </div>
+    <!-- 试卷信息 -->
+    <div class="action-paper-info">
+      <p>
+        <span v-if="IS_MARKER">任务密号:</span>
+        <span v-else>试卷密号:</span>
+        <span v-if="curPaperOrTask.sn && !isBatchAction">
+          NO.{{ curPaperOrTask.sn }}
+        </span>
+        <span v-else>--</span>
+      </p>
+    </div>
+    <!-- 改档信息 -->
+    <div class="action-grade-change" v-if="rights.gradeChange">
+      <p>
+        <span>原始档位:</span><span>{{ curPaperOrTask.originLevel }}</span>
+      </p>
+      <p>
+        <span v-if="IS_MARKER">建议档位:</span>
+        <span v-else>申请档位:</span>
+        <span>{{ curPaperOrTask.redoLevel }}</span>
+      </p>
+    </div>
+    <div
+      :class="[
+        'action-grade-change-status',
+        { 'action-grade-change-status-error': curPaperOrTask.auditStatus === 0 }
+      ]"
+      v-if="rights.gradeChange && IS_ADMIN"
+    >
+      <p>{{ curPaperOrTask.auditStatus === 1 ? "同意改档" : "不同意改档" }}</p>
+    </div>
+
+    <!-- 粗大位信息 -->
+    <!-- 已评/待评(已评档位),改大裆打小档(已评档位) -->
+    <div class="action-grade-info" v-if="rights.gradeInfo">
+      <h3 class="grade-info-name">
+        {{ curPaperLevel }}
+      </h3>
+    </div>
+    <!-- 小档位信息 -->
+    <div class="action-grade-info action-mark-info" v-if="rights.markInfo">
+      <p class="grade-info-name" v-if="curPaperScore">
+        {{ curPaperScore }}
+      </p>
+      <p class="grade-info-name grade-info-none" v-else>未分档</p>
+    </div>
+
+    <!-- 档位信息 -->
+    <!-- 已评(已评档位),打回(建议档位) -->
+    <h3
+      class="action-grade-info-title"
+      v-if="IS_MARKER && stepType === 'reject'"
+    >
+      <span>原分档档位:{{ curPaperOrTask.originLevel || "" }}</span>
+      <span
+        v-if="
+          paramsSet.levelConfig &&
+            paramsSet.levelConfig.autoCallbackShowDeviation &&
+            curPaperOrTask.deviationDirection &&
+            curPaperOrTask.deviationDirection !== '0'
+        "
+        :class="[
+          'grade-info-deviation',
+          {
+            'grade-info-deviation-error':
+              curPaperOrTask.deviationDirection * 1 > 0
+          }
+        ]"
+        >{{ curPaperOrTask.deviationDirection * 1 > 0 ? "偏高" : "偏低" }}</span
+      >
+    </h3>
+    <h3
+      class="action-grade-info-title"
+      v-if="curPaperOrTask.rejected && curPaperOrTask.isRejectedByLeader"
+    >
+      建议档位:
+    </h3>
+    <div class="action-grade-info" v-if="rights.gradeInfo && curLevel.name">
+      <h3 class="grade-info-name">{{ curLevel.name | levelNameFilter }}</h3>
+      <div class="grade-info-range">
+        <p>{{ levelRangeName }}范围</p>
+        <p>
+          <span>{{ curLevel.minScore }}</span>
+          <span>~</span>
+          <span>{{ curLevel.maxScore }}</span>
+        </p>
+      </div>
+    </div>
+
+    <!-- 选择大档位 -->
+    <h3
+      class="action-grade-info-title"
+      v-if="IS_MARK_LEADER && markLeaderOnlyRight && rights.gradeList"
+    >
+      当前操作:{{ markLeaderOnlyRight.name }}
+    </h3>
+    <div class="action-grade-list" v-if="rights.gradeList">
+      <div
+        class="action-grade-item"
+        v-for="(level, index) in levelList"
+        :key="index"
+      >
+        <div
+          :class="[
+            'action-grade-item-content',
+            {
+              'action-item-content-disabled': btnClicked,
+              'is-active': keyInput == level.name
+            }
+          ]"
+          @click="selectLevel(level)"
+        >
+          <p>{{ level.name | levelNameFilter }}</p>
+          <p>{{ level.minScore }}~{{ level.maxScore }}</p>
+        </div>
+      </div>
+    </div>
+    <div v-if="ribbonSet.keyboardMark" class="action-grade-keyboard">
+      <div class="keyboard-input">{{ keyInput }}</div>
+      <div class="keyboard-clear" @click="clearKeyInput">
+        <Icon type="md-trash" />
+      </div>
+    </div>
+    <!-- 选择小档位  -->
+    <div class="action-mark-list" v-if="rights.levelList">
+      <div
+        class="action-mark-item"
+        v-for="(score, index) in scores"
+        :key="index"
+      >
+        <div
+          :class="[
+            'action-mark-item-content',
+            {
+              'action-item-content-disabled': btnClicked,
+              'is-active': keyInput == score
+            }
+          ]"
+          @click="selectScore(score)"
+        >
+          <p>{{ score }}</p>
+        </div>
+      </div>
+    </div>
+    <!-- 跳过 -->
+    <div
+      class="action-grade-pass"
+      v-if="rights.gradePass && IS_MARKER"
+      @click="toPass"
+    >
+      跳过
+    </div>
+
+    <!-- 评卷记录 -->
+    <div class="action-grade-history" v-if="rights.gradeHis">
+      <h3>评卷记录</h3>
+      <div class="grade-history-list">
+        <div
+          class="grade-history-item"
+          v-for="his in gradingHistory"
+          :key="his.id"
+        >
+          <p>{{ his.loginName }}</p>
+          <p>{{ his.value | levelNameFilter }}</p>
+        </div>
+      </div>
+    </div>
+
+    <!-- 查询 -->
+    <div class="action-search" v-if="rights.search">
+      <Select
+        class="search-select"
+        v-model="filter.codeType"
+        placeholder="密号类型"
+      >
+        <Option
+          v-for="item in codeTypes"
+          :key="item.key"
+          :value="item.key"
+          :label="item.val"
+        ></Option>
+      </Select>
+      <Input
+        class="search-input"
+        v-model.trim="filter.code"
+        placeholder="输入密号"
+        clearable
+      >
+      </Input>
+      <Button size="small" type="primary" class="search-btn" @click="searchCode"
+        >查询</Button
+      >
+    </div>
+  </div>
+</template>
+
+<script>
+import { markHistoryList } from "@/api";
+import { CODE_TYPE } from "@/constants/enumerate";
+import { mapState, mapMutations } from "vuex";
+import { levelNameTransform } from "@/plugins/utils";
+
+// 三种情况:
+// 管理员(ADMIN),科组长(MARK_LEADER),评卷员(MARKER)
+// 管理员:查询,头部信息,评卷记录
+// 科组长:查询,头部信息,选择档位,评卷记录
+// 评卷员:头部信息,选择档位
+
+// MARK_LEADER / ADMIN: curPaperOrTask => paper
+// MARKER: curPaperOrTask => task
+//
+/*
+[paper template]
+{
+  "id": 165,
+  "sn": "029947536",
+  "examNumber": "1901040084",
+  "level": "A",
+  "score": null,
+  "redoLevel": null,
+  "updatedOn": 1591767742000,
+  "imgSrc": "",
+  "thumbSrc": "",
+  "markByLeader": false,
+  "markedLogic": true,
+  "areaCode": "2",
+  "inspectScore": null,
+  "inspectLevel": null,
+  "inspector": null,
+  "sheetSrc": null,
+  "stage": "LEVEL",
+  "test": 0,
+  "paperTest": 0,
+  "markResults": [],
+  "rejected": false,
+  "arbitrated": false,
+  "sample": false,
+  "tagged": false,
+  "missing": false,
+  "manual": false
+}
+[marktask template]
+{
+  "id": 511,
+  "sn": "4929446110",
+  "redoLevel": null,
+  "level": "A",
+  "score": null,
+  "result": "100",
+  "originLevel": null,
+  "markerId": 49,
+  "marker": "pj061001",
+  "updatedOn": 1594775592000,
+  "imgSrc": "",
+  "thumbSrc": "",
+  "markByLeader": true,
+  "oldRejected": false,
+  "paperId": 168,
+  "randomSeqNew": 9446110,
+  "randomSeq": null,
+  "rejected": false,
+  "sample": true
+}
+*/
+
+const initRights = {
+  search: false,
+  gradeInfo: false,
+  gradeList: false,
+  gradePass: false,
+  gradeHis: false
+};
+
+export default {
+  name: "grade-action",
+  props: {
+    curPaperOrTask: {
+      type: Object,
+      default() {
+        return {};
+      }
+    },
+    levels: {
+      type: Array,
+      default() {
+        return [];
+      }
+    },
+    paramsSet: {
+      type: Object,
+      default() {
+        return {};
+      }
+    },
+    isBatchAction: {
+      type: Boolean,
+      default: false
+    },
+    // 是否处于粗分档
+    isRoughLevel: {
+      type: Boolean,
+      default: false
+    }
+  },
+  data() {
+    return {
+      curUserRoleType: this.$ls.get("user", { role: "" }).role,
+      curPaperOrTaskLevel: "",
+      rights: {
+        ...initRights
+      },
+      cacheRights: null,
+      roleRight: {
+        ADMIN: {
+          done: ["search", "gradeHis", "gradeInfo"],
+          reject: ["search", "gradeInfo", "gradeHis"],
+          arbitrate: ["search", "gradeHis"]
+        },
+        MARK_LEADER: {
+          undo: ["gradeList", "gradePass", "gradeInfo"],
+          done: ["gradeList", "gradeHis", "gradeInfo"],
+          reject: ["gradeList", "gradePass", "gradeInfo", "gradeHis"],
+          arbitrate: ["gradeList", "gradePass", "gradeHis"],
+          batch: ["gradeList"]
+        },
+        MARKER: {
+          done: ["gradeList", "gradeInfo"],
+          undo: ["gradeList", "gradePass"],
+          reject: ["gradeList", "gradePass", "gradeInfo"],
+          batch: ["gradeList"]
+        },
+        STANDARD: ["gradeInfo"]
+      },
+      filter: {
+        codeType: "examNumber",
+        code: ""
+      },
+      codeTypes: [],
+      stepDict: {
+        undo: "待评",
+        done: "已评",
+        reject: "打回",
+        arbitrate: "待仲裁",
+        sample: "标准卷",
+        batch: "批量操作"
+      },
+      stepType: "",
+      stepLabel: "",
+      gradingHistory: [],
+      levelList: [],
+      curLevel: {},
+      setT: null,
+      btnClicked: false,
+      keyInput: null,
+      // 科组长权限
+      markLeaderOnlyRight: null
+    };
+  },
+  computed: {
+    ...mapState("marker", ["ribbonSet", "shortcutKeyStatus", "curSubject"]),
+    IS_ADMIN() {
+      return this.curUserRoleType === "ADMIN";
+    },
+    IS_MARKER() {
+      return this.curUserRoleType === "MARKER";
+    },
+    IS_MARK_LEADER() {
+      return this.curUserRoleType === "MARK_LEADER";
+    },
+    levelRangeName() {
+      return this.curSubject.stage === "LEVEL" ? "分数" : "档位";
+    }
+  },
+  watch: {
+    curPaperOrTask() {
+      this.rebuildRight();
+    },
+    isBatchAction(val) {
+      if (val) {
+        this.stepType = "batch";
+        this.stepLabel = this.stepDict[this.stepType];
+        const roleRights =
+          this.roleRight[this.curUserRoleType][this.stepType] || [];
+        this.rights = { ...initRights };
+        roleRights.map(key => {
+          this.rights[key] = true;
+        });
+      } else {
+        this.rebuildRight();
+      }
+      this.keyInput = null;
+    },
+    "ribbonSet.keyboardMark": {
+      immediate: true,
+      handler(val) {
+        this.setShortcutStatus({ action: val });
+      }
+    },
+    "shortcutKeyStatus.action": {
+      immediate: true,
+      handler(val, oldval) {
+        // console.log(val, oldval);
+        if (val === oldval) return;
+        if (val) {
+          document.addEventListener("keydown", this.keyEvent);
+        } else {
+          document.removeEventListener("keydown", this.keyEvent);
+        }
+      }
+    }
+  },
+  mounted() {
+    this.markLeaderOnlyRight = this.$ls.get("user", {
+      markLeaderOnlyRight: null
+    }).markLeaderOnlyRight;
+
+    this.codeTypes = Object.entries(CODE_TYPE)
+      .map(([key, val]) => {
+        return {
+          key,
+          val
+        };
+      })
+      .filter(item => item.key !== "examNumber");
+    // .filter(item => this.IS_ADMIN || item.key !== "examNumber");
+    this.rebuildRight();
+  },
+  methods: {
+    ...mapMutations("marker", ["setShortcutStatus"]),
+    getStepType() {
+      const info = this.curPaperOrTask;
+      if (info.sample) return "sample";
+      if (this.curPaperOrTaskLevel) return "done";
+      if (info.arbitrated) return "arbitrate";
+      if (info.rejected) return "reject";
+      if (!info.rejected && !info.arbitrated && !info.level) return "undo";
+      return;
+    },
+    rebuildRight() {
+      if (this.setT) clearTimeout(this.setT);
+      this.curPaperOrTaskLevel =
+        this.curSubject.stage === "LEVEL"
+          ? this.curPaperOrTask.level
+          : this.curPaperOrTask.roughLevel || this.curPaperOrTask.level;
+
+      let roleRights = [];
+      this.stepType = this.getStepType();
+      this.stepLabel = this.stepDict[this.stepType];
+      if (this.stepType === "sample") {
+        roleRights = this.roleRight.STANDARD;
+      } else {
+        roleRights = this.roleRight[this.curUserRoleType][this.stepType] || [];
+      }
+      this.rights = { ...initRights };
+      roleRights.map(key => {
+        this.rights[key] = true;
+      });
+      this.initLevels();
+      if (this.rights.gradeHis) {
+        this.getMarkHistory();
+      }
+      this.btnClicked = false;
+      this.keyInput = null;
+    },
+    initLevels() {
+      this.levelList = [...this.levels];
+      if (
+        this.curSubject.roughLevelEnable &&
+        this.curSubject.stage === "LEVEL"
+      ) {
+        this.levelList = this.levels.filter(
+          item => item.roughCode === this.curPaperOrTask.roughLevel
+        );
+      }
+      const levelName = this.curPaperOrTask.rejected
+        ? this.curPaperOrTask.redoLevel
+        : this.curPaperOrTaskLevel;
+      if (levelName) {
+        this.curLevel = this.levelList.find(item => item.name === levelName);
+      } else {
+        this.curLevel = {};
+      }
+    },
+    async getMarkHistory() {
+      // 只有科组长和超管才会展示评卷记录
+      const data = await markHistoryList(
+        this.curPaperOrTask.id,
+        this.curSubject.stage
+      );
+      this.gradingHistory = data.map(item => {
+        let level = item.result || "未评";
+        if (this.stepType === "reject" && !item.result) {
+          level = `${levelNameTransform(level)}(${levelNameTransform(
+            item.originLevel
+          )})`;
+        }
+        return {
+          id: item.id,
+          markerId: item.markerId,
+          name: item.marker,
+          loginName: item.loginName,
+          value: level
+        };
+      });
+    },
+    selectLevel(level) {
+      if (this.isBatchAction) {
+        if (this.btnClicked) return;
+        this.btnClicked = true;
+        this.setT = setTimeout(() => {
+          this.btnClicked = false;
+        }, 500);
+        this.$emit("on-batch-level", level);
+        return;
+      }
+
+      if (this.IS_MARKER && this.curPaperOrTaskLevel === level.name) return;
+      if (this.btnClicked) return;
+      this.btnClicked = true;
+
+      if (this.IS_MARK_LEADER) {
+        this.setT = setTimeout(() => {
+          this.btnClicked = false;
+        }, 500);
+
+        this.$emit(
+          "on-leader-level",
+          {
+            paperIds: this.curPaperOrTask.id + "",
+            curLevel: this.curPaperOrTaskLevel,
+            selectedLevel: level.name,
+            markLeaderOnlyRight: this.markLeaderOnlyRight
+          },
+          this.gradingHistory.map(item => {
+            return {
+              id: item.markerId,
+              name: item.loginName
+            };
+          })
+        );
+        return;
+      }
+
+      this.$emit("on-select-level", level);
+    },
+    toPass() {
+      this.$emit("on-pass");
+    },
+    searchCode() {
+      if (!this.filter.code || !this.filter.codeType) {
+        this.$Message.error("请设置密号类型和密号!");
+        return;
+      }
+      this.$emit("on-code-search", this.filter);
+    },
+    // keyboard submit
+    keyEvent(e) {
+      this.$Message.destroy();
+      if (this.btnClicked) return;
+      // if (!this.ribbonSet.keyboardMark) return;
+      if (!e.altKey && !e.shiftKey && !e.ctrlKey) {
+        if (e.key === "Enter" && this.ribbonSet.needEnterSubmit) {
+          e.preventDefault();
+          this.toKeySubmit();
+          return;
+        }
+
+        if (!/^[a-z0-9]$/.test(e.key)) return;
+
+        const keyInput = e.key.toUpperCase();
+        if (this.getKeyInputLevel(keyInput)) {
+          e.preventDefault();
+          this.keyInput = keyInput;
+
+          if (!this.ribbonSet.needEnterSubmit) {
+            this.toKeySubmit();
+          }
+        } else {
+          this.$Message.error("按键无效");
+        }
+      }
+    },
+    getKeyInputLevel(key) {
+      return this.levelList.find(item => item.name === key);
+    },
+    toKeySubmit() {
+      if (!this.keyInput) {
+        this.$Message.error("请选择档位");
+        return;
+      }
+      const level = this.getKeyInputLevel(this.keyInput);
+      this.selectLevel(level);
+    },
+    clearKeyInput() {
+      this.keyInput = null;
+    }
+  },
+  beforeDestroy() {
+    if (this.setT) clearTimeout(this.setT);
+    if (this.ribbonSet.keyboardMark)
+      document.removeEventListener("click", this.keyEvent);
+  }
+};
+</script>

+ 10 - 2
src/modules/grading/components/NoticeDialog.vue

@@ -52,7 +52,11 @@
           </div>
         </div>
         <div v-if="IS_MARK_LEADER" class="notice-send">
-          <textarea placeholder="请输入" v-model="content"></textarea>
+          <textarea
+            placeholder="请输入"
+            v-model="content"
+            maxlength="300"
+          ></textarea>
           <div class="notice-send-footer">
             <Button type="primary" :loading="loading" @click="toSend"
               >发送</Button
@@ -126,7 +130,7 @@ export default {
 
       if (this.IS_MARKER) {
         await this.getMarkerNoticeList();
-        await this.getNewNotice();
+        // await this.getNewNotice();
       }
     },
     visibleChange(visible) {
@@ -276,6 +280,10 @@ export default {
         this.$Message.error("请输入内容");
         return;
       }
+      if (this.content.length > 300) {
+        this.$Message.error("内容最多300个字符");
+        return;
+      }
 
       const user = this.$ls.get("user", { id: "", name: "" });
       const markers = this.markers

+ 0 - 250
src/modules/grading/components/data.js

@@ -1,250 +0,0 @@
-export const noticeList = [
-  {
-    id: 1,
-    content:
-      "这是一条长暗示法卡几十块,按数据库的叫法发卡上,发卡拉时间带了看。发升科技暗示发放。",
-    createTime: Date.now(),
-    sendUsers: [
-      {
-        id: 1,
-        name: "张三"
-      },
-      {
-        id: 2,
-        name: "李四"
-      },
-      {
-        id: 3,
-        name: "王五"
-      },
-      {
-        id: 4,
-        name: "赵六"
-      },
-      {
-        id: 5,
-        name: "孙七"
-      }
-    ]
-  },
-  {
-    id: 2,
-    content:
-      "这是一条长暗示法卡几十块,按数据库的叫法发卡上,发卡拉时间这是一条长暗示法卡几十块,按数据库的叫法发卡上,发卡拉时间带了看。发升科技暗示发放。这是一条长暗示法卡几十块,按数据库的叫法发卡上,发卡拉时间带了看。发升科技暗示发放。带了看。发升科技暗示发放。",
-    createTime: Date.now(),
-    sendUsers: [
-      {
-        id: 1,
-        name: "张三"
-      },
-      {
-        id: 2,
-        name: "李四"
-      },
-      {
-        id: 3,
-        name: "王五"
-      }
-    ]
-  },
-  {
-    id: 3,
-    content:
-      "这是一条长暗示法卡几十块,按数据库的这是一条长暗示法卡几十块,按数据库的叫法发卡上,发卡拉时间带了看。发升科技暗示发放。叫法发卡上,发卡拉时间带了看。发升科技暗示发放。",
-    createTime: Date.now(),
-    sendUsers: [
-      {
-        id: 1,
-        name: "张三"
-      }
-    ]
-  },
-  {
-    id: 4,
-    content:
-      "这是一条长暗示法卡几十块,按数据库的叫法发卡上,发卡拉时间带了看。发升科技暗示发放。",
-    createTime: Date.now(),
-    sendUsers: [
-      {
-        id: 1,
-        name: "张三"
-      },
-      {
-        id: 2,
-        name: "李四"
-      },
-      {
-        id: 4,
-        name: "赵六"
-      },
-      {
-        id: 5,
-        name: "孙七"
-      }
-    ]
-  },
-  {
-    id: 5,
-    content:
-      "这是一条长暗示法卡几十块,按数据库的叫法发卡上,发卡拉时间这是一条长暗示法卡几十块,按数据库的叫法发卡上,发卡拉时间带了看。发升科技暗示发放。这是一条长暗示法卡几十块,按数据库的叫法发卡上,发卡拉时间带了看。发升科技暗示发放。带了看。发升科技暗示发放。",
-    createTime: Date.now(),
-    sendUsers: [
-      {
-        id: 2,
-        name: "李四"
-      },
-      {
-        id: 3,
-        name: "王五"
-      },
-      {
-        id: 4,
-        name: "赵六"
-      },
-      {
-        id: 5,
-        name: "孙七"
-      }
-    ]
-  },
-  {
-    id: 6,
-    content:
-      "这是一条长暗示法卡几十块,按数据库的这是一条长暗示法卡几十块,按数据库的叫法发卡上,发卡拉时间带了看。发升科技暗示发放。叫法发卡上,发卡拉时间带了看。发升科技暗示发放。",
-    createTime: Date.now(),
-    sendUsers: [
-      {
-        id: 1,
-        name: "张三"
-      },
-      {
-        id: 2,
-        name: "李四"
-      },
-      {
-        id: 5,
-        name: "孙七"
-      }
-    ]
-  },
-  {
-    id: 7,
-    content:
-      "这是一条长暗示法卡几十块,按数据库的叫法发卡上,发卡拉时间带了看。发升科技暗示发放。",
-    createTime: Date.now(),
-    sendUsers: [
-      {
-        id: 1,
-        name: "张三"
-      },
-      {
-        id: 2,
-        name: "李四"
-      }
-    ]
-  },
-  {
-    id: 8,
-    content:
-      "这是一条长暗示法卡几十块,按数据库的叫法发卡上,发卡拉时间这是一条长暗示法卡几十块,按数据库的叫法发卡上,发卡拉时间带了看。发升科技暗示发放。这是一条长暗示法卡几十块,按数据库的叫法发卡上,发卡拉时间带了看。发升科技暗示发放。带了看。发升科技暗示发放。",
-    createTime: Date.now(),
-    sendUsers: [
-      {
-        id: 1,
-        name: "张三"
-      },
-      {
-        id: 2,
-        name: "李四"
-      }
-    ]
-  },
-  {
-    id: 9,
-    content:
-      "这是一条长暗示法卡几十块,按数据库的这是一条长暗示法卡几十块,按数据库的叫法发卡上,发卡拉时间带了看。发升科技暗示发放。叫法发卡上,发卡拉时间带了看。发升科技暗示发放。",
-    createTime: Date.now(),
-    sendUsers: [
-      {
-        id: 1,
-        name: "张三"
-      }
-    ]
-  },
-  {
-    id: 10,
-    content:
-      "这是一条长暗示法卡几十块,按数据库的叫法发卡上,发卡拉时间带了看。发升科技暗示发放。",
-    createTime: Date.now(),
-    sendUsers: [
-      {
-        id: 1,
-        name: "张三"
-      },
-      {
-        id: 2,
-        name: "李四"
-      }
-    ]
-  },
-  {
-    id: 11,
-    content:
-      "这是一条长暗示法卡几十块,按数据库的叫法发卡上,发卡拉时间这是一条长暗示法卡几十块,按数据库的叫法发卡上,发卡拉时间带了看。发升科技暗示发放。这是一条长暗示法卡几十块,按数据库的叫法发卡上,发卡拉时间带了看。发升科技暗示发放。带了看。发升科技暗示发放。",
-    createTime: Date.now(),
-    sendUsers: [
-      {
-        id: 1,
-        name: "张三"
-      },
-      {
-        id: 2,
-        name: "李四"
-      },
-      {
-        id: 3,
-        name: "王五"
-      }
-    ]
-  },
-  {
-    id: 12,
-    content:
-      "这是一条长暗示法卡几十块,按数据库的这是一条长暗示法卡几十块,按数据库的叫法发卡上,发卡拉时间带了看。发升科技暗示发放。叫法发卡上,发卡拉时间带了看。发升科技暗示发放。",
-    createTime: Date.now(),
-    sendUsers: [
-      {
-        id: 1,
-        name: "张三"
-      }
-    ]
-  }
-];
-
-export const userList = [
-  {
-    id: 1,
-    name: "张三",
-    selected: false
-  },
-  {
-    id: 2,
-    name: "李四",
-    selected: false
-  },
-  {
-    id: 3,
-    name: "王五",
-    selected: false
-  },
-  {
-    id: 4,
-    name: "赵六",
-    selected: false
-  },
-  {
-    id: 5,
-    name: "孙七",
-    selected: false
-  }
-];

+ 5 - 2
src/modules/grading/marker/MarkerImageView.vue

@@ -8,8 +8,11 @@
     <div class="image-view-footer">
       <slot>
         <div v-if="IS_LEVEL" class="image-info">
+          <div v-if="image.roughLevel" class="image-level">
+            {{ image.roughLevel | levelNameFilter }}
+          </div>
           <div v-if="image.level" class="image-level">
-            {{ image.level | levelNameFilter }}
+            {{ image.level }}
           </div>
           <div v-if="image.sample" class="image-sample">标</div>
           <div
@@ -96,6 +99,7 @@ export default {
         thumbSrc: "",
         title: "",
         level: "",
+        roughLevel: "",
         score: "",
         deg: 0,
         mark: false,
@@ -110,7 +114,6 @@ export default {
   methods: {
     initData() {
       this.image = this.$objAssign(this.initImage, this.data);
-      if (this.stage === "ROUGH_LEVEL") this.image.level = this.data.roughLevel;
     },
     toReview() {
       this.$emit("to-review", this.image);