|
@@ -1,6 +1,7 @@
|
|
<template>
|
|
<template>
|
|
<div class="mark-action grade-action">
|
|
<div class="mark-action grade-action">
|
|
- <div class="action-search">
|
|
|
|
|
|
+ <!-- 查询 -->
|
|
|
|
+ <div class="action-search" v-if="rights.search">
|
|
<Input v-model.trim="filter.code" placeholder="请输入号码">
|
|
<Input v-model.trim="filter.code" placeholder="请输入号码">
|
|
<Select
|
|
<Select
|
|
v-model="filter.codeType"
|
|
v-model="filter.codeType"
|
|
@@ -18,15 +19,44 @@
|
|
<Button icon="ios-search" slot="append" @click="search"></Button>
|
|
<Button icon="ios-search" slot="append" @click="search"></Button>
|
|
</Input>
|
|
</Input>
|
|
</div>
|
|
</div>
|
|
-
|
|
|
|
- <div class="action-paper-info">
|
|
|
|
|
|
+ <!-- 改档处理状态查询 -->
|
|
|
|
+ <div class="action-grade-change-search" v-if="rights.gradeChangeSearch">
|
|
|
|
+ <Select v-model="filter.codeType" placeholder="类型" style="width: 100px">
|
|
|
|
+ <Option
|
|
|
|
+ v-for="(val, key) in CODE_TYPE"
|
|
|
|
+ :key="key"
|
|
|
|
+ :value="key"
|
|
|
|
+ :label="val"
|
|
|
|
+ ></Option>
|
|
|
|
+ </Select>
|
|
|
|
+ <Button
|
|
|
|
+ icon="ios-search"
|
|
|
|
+ slot="append"
|
|
|
|
+ @click="gradeChangeSearch"
|
|
|
|
+ ></Button>
|
|
|
|
+ </div>
|
|
|
|
+ <!-- 头部信息 ------ -->
|
|
|
|
+ <!-- 试卷状态 -->
|
|
|
|
+ <!-- 状态:已评,待评,改档,改档打分 -->
|
|
|
|
+ <div class="action-paper-state" v-if="rights.paperState">
|
|
|
|
+ <p class="paper-state-cont">{{ step.typeName }}</p>
|
|
|
|
+ </div>
|
|
|
|
+ <!-- 试卷信息 -->
|
|
|
|
+ <div class="action-paper-info" v-if="rights.paperInfo">
|
|
<p>{{ curPaper.examNumber }}</p>
|
|
<p>{{ curPaper.examNumber }}</p>
|
|
<p>No.{{ curPaper.sn }}</p>
|
|
<p>No.{{ curPaper.sn }}</p>
|
|
</div>
|
|
</div>
|
|
-
|
|
|
|
- <p class="mark-info">{{ curMark }}</p>
|
|
|
|
-
|
|
|
|
- <div class="action-grade-info">
|
|
|
|
|
|
+ <!-- 改档信息 -->
|
|
|
|
+ <div class="action-grade-change" v-if="rights.gradeChange">
|
|
|
|
+ <p>原档位:</p>
|
|
|
|
+ <p>申请档位:</p>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="action-grade-change-status" v-if="rights.gradeChange">
|
|
|
|
+ <p>已同意</p>
|
|
|
|
+ </div>
|
|
|
|
+ <!-- 档位信息 -->
|
|
|
|
+ <!-- 已评/待评(已评档位),改档打分(已评档位) -->
|
|
|
|
+ <div class="action-grade-info" v-if="rights.gradeInfo">
|
|
<h3 class="grade-info-name">{{ curLevel.name }}</h3>
|
|
<h3 class="grade-info-name">{{ curLevel.name }}</h3>
|
|
<p class="grade-info-range">
|
|
<p class="grade-info-range">
|
|
<span>{{ curLevel.range[0] }}</span>
|
|
<span>{{ curLevel.range[0] }}</span>
|
|
@@ -34,17 +64,26 @@
|
|
<span>{{ curLevel.range[1] }}</span>
|
|
<span>{{ curLevel.range[1] }}</span>
|
|
</p>
|
|
</p>
|
|
</div>
|
|
</div>
|
|
- <div class="action-grade-list action-mark-list">
|
|
|
|
|
|
+ <!-- 打分信息 -->
|
|
|
|
+ <div class="action-mark-info" v-if="rights.markInfo">
|
|
|
|
+ <p>{{ curPaper.score }}</p>
|
|
|
|
+ </div>
|
|
|
|
+ <!-- 选择分数 / 档位 -->
|
|
|
|
+ <div class="action-grade-list action-mark-list" v-if="rights.gradeList">
|
|
<div
|
|
<div
|
|
class="action-grade-list-item"
|
|
class="action-grade-list-item"
|
|
- v-for="(level, index) in levels"
|
|
|
|
|
|
+ v-for="(level, index) in levelList"
|
|
:key="index"
|
|
:key="index"
|
|
>
|
|
>
|
|
- <p>{{ level }}</p>
|
|
|
|
|
|
+ <p>{{ level.name }}</p>
|
|
|
|
+ <p>{{ level.range[0] }}~{{ level.range[1] }}</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
-
|
|
|
|
- <div class="action-grade-history">
|
|
|
|
|
|
+ <div class="action-grade-pass" v-if="rights.gradeList">
|
|
|
|
+ <Button type="primary" @click="toPass">跳过</Button>
|
|
|
|
+ </div>
|
|
|
|
+ <!-- 评卷记录 -->
|
|
|
|
+ <div class="action-grade-history" v-if="rights.markHis">
|
|
<h3>评卷记录</h3>
|
|
<h3>评卷记录</h3>
|
|
<div class="action-grade-list grade-history-list">
|
|
<div class="action-grade-list grade-history-list">
|
|
<div
|
|
<div
|
|
@@ -62,6 +101,22 @@
|
|
|
|
|
|
<script>
|
|
<script>
|
|
import { CODE_TYPE } from "@/constants/enumerate";
|
|
import { CODE_TYPE } from "@/constants/enumerate";
|
|
|
|
+// 三种情况:
|
|
|
|
+// 管理员(ADMIN),科组长(MARK_LEADER),评卷员(MARKER)
|
|
|
|
+// 管理员:查询,头部信息,评卷记录
|
|
|
|
+// 科组长:查询,头部信息,选择档位,评卷记录
|
|
|
|
+// 评卷员:头部信息,选择分数
|
|
|
|
+const initRights = {
|
|
|
|
+ search: false,
|
|
|
|
+ gradeChangeSearch: false,
|
|
|
|
+ paperState: false,
|
|
|
|
+ paperInfo: false,
|
|
|
|
+ gradeChange: false,
|
|
|
|
+ gradeInfo: false,
|
|
|
|
+ markInfo: false,
|
|
|
|
+ gradeList: false,
|
|
|
|
+ markHis: false
|
|
|
|
+};
|
|
|
|
|
|
export default {
|
|
export default {
|
|
name: "mark-action",
|
|
name: "mark-action",
|
|
@@ -71,10 +126,78 @@ export default {
|
|
default() {
|
|
default() {
|
|
return {};
|
|
return {};
|
|
}
|
|
}
|
|
|
|
+ },
|
|
|
|
+ levels: {
|
|
|
|
+ type: Array,
|
|
|
|
+ default() {
|
|
|
|
+ return [];
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ userRole: {
|
|
|
|
+ type: String,
|
|
|
|
+ default: "MARKER"
|
|
|
|
+ },
|
|
|
|
+ step: {
|
|
|
|
+ type: Object,
|
|
|
|
+ default() {
|
|
|
|
+ return {};
|
|
|
|
+ }
|
|
}
|
|
}
|
|
},
|
|
},
|
|
data() {
|
|
data() {
|
|
return {
|
|
return {
|
|
|
|
+ rights: {
|
|
|
|
+ ...initRights
|
|
|
|
+ },
|
|
|
|
+ roleRight: {
|
|
|
|
+ ADMIN: {
|
|
|
|
+ done: [
|
|
|
|
+ "search",
|
|
|
|
+ "gradeHis",
|
|
|
|
+ "paperState",
|
|
|
|
+ "paperInfo",
|
|
|
|
+ "gradeInfo",
|
|
|
|
+ "markInfo"
|
|
|
|
+ ],
|
|
|
|
+ editGrade: [
|
|
|
|
+ "search",
|
|
|
|
+ "gradeChangeSearch",
|
|
|
|
+ "paperState",
|
|
|
|
+ "paperInfo",
|
|
|
|
+ "gradeChange"
|
|
|
|
+ ]
|
|
|
|
+ },
|
|
|
|
+ MARK_LEADER: {
|
|
|
|
+ done: [
|
|
|
|
+ "search",
|
|
|
|
+ "gradeList",
|
|
|
|
+ "gradeHis",
|
|
|
|
+ "paperState",
|
|
|
|
+ "paperInfo",
|
|
|
|
+ "gradeInfo",
|
|
|
|
+ "markInfo"
|
|
|
|
+ ],
|
|
|
|
+ editGrade: [
|
|
|
|
+ "search",
|
|
|
|
+ "gradeList",
|
|
|
|
+ "paperState",
|
|
|
|
+ "paperInfo",
|
|
|
|
+ "gradeChange"
|
|
|
|
+ ]
|
|
|
|
+ },
|
|
|
|
+ MARKER: {
|
|
|
|
+ done: [
|
|
|
|
+ "gradeList",
|
|
|
|
+ "paperState",
|
|
|
|
+ "paperInfo",
|
|
|
|
+ "gradeInfo",
|
|
|
|
+ "markInfo"
|
|
|
|
+ ],
|
|
|
|
+ undo: ["gradeList", "paperState", "paperInfo", "gradeInfo"],
|
|
|
|
+ editGrade: ["gradeList", "paperState", "paperInfo", "gradeChange"],
|
|
|
|
+ editGradeMark: ["gradeList", "paperState", "paperInfo", "gradeInfo"]
|
|
|
|
+ }
|
|
|
|
+ },
|
|
filter: {
|
|
filter: {
|
|
codeType: "examNumber",
|
|
codeType: "examNumber",
|
|
code: ""
|
|
code: ""
|
|
@@ -84,8 +207,8 @@ export default {
|
|
examNumber: "2020105133",
|
|
examNumber: "2020105133",
|
|
sn: "2020105133"
|
|
sn: "2020105133"
|
|
},
|
|
},
|
|
|
|
+ levelList: [],
|
|
gradingHistory: [],
|
|
gradingHistory: [],
|
|
- levels: [],
|
|
|
|
curLevel: {
|
|
curLevel: {
|
|
name: "A",
|
|
name: "A",
|
|
range: [5, 20]
|
|
range: [5, 20]
|
|
@@ -93,17 +216,27 @@ export default {
|
|
curMark: 95
|
|
curMark: 95
|
|
};
|
|
};
|
|
},
|
|
},
|
|
|
|
+ computed: {
|
|
|
|
+ IS_ADMIN() {
|
|
|
|
+ return this.userRole === "ADMIN";
|
|
|
|
+ },
|
|
|
|
+ IS_MARKER() {
|
|
|
|
+ return this.userRole === "MARKER";
|
|
|
|
+ },
|
|
|
|
+ IS_MARK_LEADER() {
|
|
|
|
+ return this.userRole === "MARK_LEADER";
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ watch: {
|
|
|
|
+ paper(val) {
|
|
|
|
+ this.rebuildRight();
|
|
|
|
+ }
|
|
|
|
+ },
|
|
mounted() {
|
|
mounted() {
|
|
this.initData();
|
|
this.initData();
|
|
},
|
|
},
|
|
methods: {
|
|
methods: {
|
|
initData() {
|
|
initData() {
|
|
- let levels = [];
|
|
|
|
- let [start, end] = this.curLevel.range;
|
|
|
|
- for (let i = start; i <= end; i++) {
|
|
|
|
- levels.push(i);
|
|
|
|
- }
|
|
|
|
- this.levels = levels;
|
|
|
|
this.gradingHistory = "ABCDEFGHIJK".split("").map((item, index) => {
|
|
this.gradingHistory = "ABCDEFGHIJK".split("").map((item, index) => {
|
|
return {
|
|
return {
|
|
id: index,
|
|
id: index,
|
|
@@ -112,8 +245,43 @@ export default {
|
|
};
|
|
};
|
|
});
|
|
});
|
|
},
|
|
},
|
|
|
|
+ rebuildRight() {
|
|
|
|
+ this.rights = { ...initRights };
|
|
|
|
+ const rights = this.roleRight[this.userRole][this.step.type] || [];
|
|
|
|
+ rights.map(key => {
|
|
|
|
+ this.rights[key] = true;
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ this.updateCurLevel();
|
|
|
|
+ this.updateLevelList();
|
|
|
|
+ },
|
|
|
|
+ updateCurLevel() {
|
|
|
|
+ if (!this.paper.level) return;
|
|
|
|
+ const paperLevel = this.levels.find(
|
|
|
|
+ level => level.name === this.paper.level
|
|
|
|
+ );
|
|
|
|
+ this.curLevel = {
|
|
|
|
+ name: paperLevel.name,
|
|
|
|
+ range: paperLevel.range
|
|
|
|
+ };
|
|
|
|
+ },
|
|
|
|
+ updateLevelList() {
|
|
|
|
+ if (!this.curLevel.range) return;
|
|
|
|
+ let levelList = [];
|
|
|
|
+ let [start, end] = this.curLevel.range;
|
|
|
|
+ for (let i = start; i <= end; i++) {
|
|
|
|
+ levelList.push({ name: i });
|
|
|
|
+ }
|
|
|
|
+ this.levelList = levelList;
|
|
|
|
+ },
|
|
search() {
|
|
search() {
|
|
this.$emit("code-search", this.filter);
|
|
this.$emit("code-search", this.filter);
|
|
|
|
+ },
|
|
|
|
+ toPass() {
|
|
|
|
+ this.$emit("on-pass");
|
|
|
|
+ },
|
|
|
|
+ gradeChangeSearch() {
|
|
|
|
+ this.$emit("grade-change-search", this.filter);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
};
|