|
@@ -30,12 +30,13 @@
|
|
|
<!-- 改档信息 -->
|
|
|
<div class="action-grade-change" v-if="rights.gradeChange">
|
|
|
<p>
|
|
|
- <span>原始档位:</span><span>{{ curPaperOrTask.originLevel }}</span>
|
|
|
+ <span>原始粗档位:</span
|
|
|
+ ><span>{{ curPaperOrTask.originLevel | levelNameFilter }}</span>
|
|
|
</p>
|
|
|
<p>
|
|
|
- <span v-if="IS_MARKER">建议档位:</span>
|
|
|
- <span v-else>申请档位:</span>
|
|
|
- <span>{{ curPaperOrTask.redoLevel }}</span>
|
|
|
+ <span v-if="IS_MARKER">建议粗档位:</span>
|
|
|
+ <span v-else>申请粗档位:</span>
|
|
|
+ <span>{{ curPaperOrTask.redoLevel | levelNameFilter }}</span>
|
|
|
</p>
|
|
|
</div>
|
|
|
<div
|
|
@@ -50,26 +51,30 @@
|
|
|
|
|
|
<!-- 粗大位信息 -->
|
|
|
<!-- 已评/待评(已评档位),改大裆打小档(已评档位) -->
|
|
|
- <div class="action-grade-info" v-if="rights.gradeInfo">
|
|
|
+ <div
|
|
|
+ class="action-grade-info"
|
|
|
+ v-if="rights.roughGradeInfo && curRoughLevel.name"
|
|
|
+ >
|
|
|
<h3 class="grade-info-name">
|
|
|
- {{ curPaperLevel }}
|
|
|
+ {{ curRoughLevel.name | levelNameFilter }}
|
|
|
</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 class="grade-info-range">
|
|
|
+ <p>档位范围</p>
|
|
|
+ <p>
|
|
|
+ <span>{{ curRoughLevel.minScore }}</span>
|
|
|
+ <span>~</span>
|
|
|
+ <span>{{ curRoughLevel.maxScore }}</span>
|
|
|
+ </p>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
|
|
|
- <!-- 档位信息 -->
|
|
|
+ <!-- 小档位信息 -->
|
|
|
<!-- 已评(已评档位),打回(建议档位) -->
|
|
|
<h3
|
|
|
class="action-grade-info-title"
|
|
|
v-if="IS_MARKER && stepType === 'reject'"
|
|
|
>
|
|
|
- <span>原分档档位:{{ curPaperOrTask.originLevel || "" }}</span>
|
|
|
+ <span>原细分档档位:{{ curPaperOrTask.originLevel || "" }}</span>
|
|
|
<span
|
|
|
v-if="
|
|
|
paramsSet.levelConfig &&
|
|
@@ -91,12 +96,12 @@
|
|
|
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>
|
|
|
+ <h3 class="grade-info-name">{{ curLevel.name }}</h3>
|
|
|
<div class="grade-info-range">
|
|
|
- <p>{{ levelRangeName }}范围</p>
|
|
|
+ <p>分数范围</p>
|
|
|
<p>
|
|
|
<span>{{ curLevel.minScore }}</span>
|
|
|
<span>~</span>
|
|
@@ -104,15 +109,16 @@
|
|
|
</p>
|
|
|
</div>
|
|
|
</div>
|
|
|
-
|
|
|
- <!-- 选择大档位 -->
|
|
|
- <h3
|
|
|
- class="action-grade-info-title"
|
|
|
- v-if="IS_MARK_LEADER && markLeaderOnlyRight && rights.gradeList"
|
|
|
+ <!-- 小档位信息 -->
|
|
|
+ <div
|
|
|
+ class="action-grade-info action-mark-info"
|
|
|
+ v-if="rights.gradeInfo && !curLevel.name"
|
|
|
>
|
|
|
- 当前操作:{{ markLeaderOnlyRight.name }}
|
|
|
- </h3>
|
|
|
- <div class="action-grade-list" v-if="rights.gradeList">
|
|
|
+ <p class="grade-info-name grade-info-none">未分档</p>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <!-- 选择小档位 -->
|
|
|
+ <div class="action-grade-list" v-if="rights.levelList">
|
|
|
<div
|
|
|
class="action-grade-item"
|
|
|
v-for="(level, index) in levelList"
|
|
@@ -128,38 +134,45 @@
|
|
|
]"
|
|
|
@click="selectLevel(level)"
|
|
|
>
|
|
|
- <p>{{ level.name | levelNameFilter }}</p>
|
|
|
+ <p>{{ level.name }}</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">
|
|
|
+ <!-- 选择大档位 -->
|
|
|
+ <h3
|
|
|
+ class="action-grade-info-title"
|
|
|
+ v-if="IS_MARK_LEADER && markLeaderOnlyRight && rights.roughLevelList"
|
|
|
+ >
|
|
|
+ 当前操作:{{ markLeaderOnlyRight.name }}
|
|
|
+ </h3>
|
|
|
+ <div class="action-grade-list" v-if="rights.roughLevelList">
|
|
|
<div
|
|
|
- class="action-mark-item"
|
|
|
- v-for="(score, index) in scores"
|
|
|
+ class="action-grade-item"
|
|
|
+ v-for="(level, index) in roughLevelList"
|
|
|
:key="index"
|
|
|
>
|
|
|
<div
|
|
|
:class="[
|
|
|
- 'action-mark-item-content',
|
|
|
+ 'action-grade-item-content',
|
|
|
{
|
|
|
'action-item-content-disabled': btnClicked,
|
|
|
- 'is-active': keyInput == score
|
|
|
+ 'is-active': keyInput == level.name
|
|
|
}
|
|
|
]"
|
|
|
- @click="selectScore(score)"
|
|
|
+ @click="selectRoughLevel(level)"
|
|
|
>
|
|
|
- <p>{{ score }}</p>
|
|
|
+ <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-grade-pass"
|
|
@@ -169,6 +182,14 @@
|
|
|
跳过
|
|
|
</div>
|
|
|
|
|
|
+ <!-- marker confirm grade change -->
|
|
|
+ <div
|
|
|
+ class="action-grade-change-confirm"
|
|
|
+ v-if="IS_MARKER && rights.gradeChange"
|
|
|
+ >
|
|
|
+ <Button type="primary" @click="gradeChangeConfirm">确认改档</Button>
|
|
|
+ </div>
|
|
|
+
|
|
|
<!-- 评卷记录 -->
|
|
|
<div class="action-grade-history" v-if="rights.gradeHis">
|
|
|
<h3>评卷记录</h3>
|
|
@@ -179,7 +200,7 @@
|
|
|
:key="his.id"
|
|
|
>
|
|
|
<p>{{ his.loginName }}</p>
|
|
|
- <p>{{ his.value | levelNameFilter }}</p>
|
|
|
+ <p>{{ his.value }}</p>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
@@ -220,9 +241,6 @@ import { levelNameTransform } from "@/plugins/utils";
|
|
|
|
|
|
// 三种情况:
|
|
|
// 管理员(ADMIN),科组长(MARK_LEADER),评卷员(MARKER)
|
|
|
-// 管理员:查询,头部信息,评卷记录
|
|
|
-// 科组长:查询,头部信息,选择档位,评卷记录
|
|
|
-// 评卷员:头部信息,选择档位
|
|
|
|
|
|
// MARK_LEADER / ADMIN: curPaperOrTask => paper
|
|
|
// MARKER: curPaperOrTask => task
|
|
@@ -259,38 +277,54 @@ import { levelNameTransform } from "@/plugins/utils";
|
|
|
}
|
|
|
[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
|
|
|
-}
|
|
|
+ id: 58,
|
|
|
+ sn: "18111595446",
|
|
|
+ redoLevel: null,
|
|
|
+ level: null,
|
|
|
+ roughLevel: "5",
|
|
|
+ score: null,
|
|
|
+ result: null,
|
|
|
+ originLevel: "",
|
|
|
+ markerId: 16,
|
|
|
+ loginName: "sm1",
|
|
|
+ marker: "sm1",
|
|
|
+ updatedOn: null,
|
|
|
+ imgSrc: "",
|
|
|
+ thumbSrc: "",
|
|
|
+ markByLeader: false,
|
|
|
+ oldRejected: false,
|
|
|
+ paperId: 107,
|
|
|
+ randomSeqNew: 11595446,
|
|
|
+ randomSeq: null,
|
|
|
+ serialNumber: null,
|
|
|
+ displayNumber: false,
|
|
|
+ shift: false,
|
|
|
+ shiftScore: false,
|
|
|
+ isRejectedByLeader: false,
|
|
|
+ rejectedCount: 0,
|
|
|
+ dateMineResult: null,
|
|
|
+ deviationDirection: null,
|
|
|
+ sample: false,
|
|
|
+ rejected: false,
|
|
|
+ mark: false,
|
|
|
+ key: "i9k7nqr8s2kb60uo",
|
|
|
+ title: "NO.18111595446",
|
|
|
+ selected: false
|
|
|
+};
|
|
|
*/
|
|
|
|
|
|
const initRights = {
|
|
|
- search: false,
|
|
|
+ roughGradeInfo: false,
|
|
|
gradeInfo: false,
|
|
|
- gradeList: false,
|
|
|
+ levelList: false,
|
|
|
+ roughLevelList: false,
|
|
|
gradePass: false,
|
|
|
- gradeHis: false
|
|
|
+ gradeHis: false,
|
|
|
+ search: false
|
|
|
};
|
|
|
|
|
|
export default {
|
|
|
- name: "grade-action",
|
|
|
+ name: "grade-action-rough",
|
|
|
props: {
|
|
|
curPaperOrTask: {
|
|
|
type: Object,
|
|
@@ -330,22 +364,44 @@ export default {
|
|
|
cacheRights: null,
|
|
|
roleRight: {
|
|
|
ADMIN: {
|
|
|
- done: ["search", "gradeHis", "gradeInfo"],
|
|
|
- reject: ["search", "gradeInfo", "gradeHis"],
|
|
|
- arbitrate: ["search", "gradeHis"]
|
|
|
+ done: ["roughGradeInfo", "gradeInfo", "gradeHis", "search"],
|
|
|
+ reject: ["roughGradeInfo", "gradeInfo", "gradeHis", "search"],
|
|
|
+ arbitrate: ["gradeHis", "search"],
|
|
|
+ shift: [
|
|
|
+ "roughGradeInfo",
|
|
|
+ "gradeInfo",
|
|
|
+ "search",
|
|
|
+ "gradeChangeSearch",
|
|
|
+ "gradeChange"
|
|
|
+ ]
|
|
|
},
|
|
|
MARK_LEADER: {
|
|
|
- undo: ["gradeList", "gradePass", "gradeInfo"],
|
|
|
- done: ["gradeList", "gradeHis", "gradeInfo"],
|
|
|
- reject: ["gradeList", "gradePass", "gradeInfo", "gradeHis"],
|
|
|
- arbitrate: ["gradeList", "gradePass", "gradeHis"],
|
|
|
- batch: ["gradeList"]
|
|
|
+ undo: ["roughGradeInfo", "gradeInfo", "levelList", "roughLevelList"],
|
|
|
+ done: [
|
|
|
+ "roughGradeInfo",
|
|
|
+ "gradeInfo",
|
|
|
+ "levelList",
|
|
|
+ "roughLevelList",
|
|
|
+ "gradeHis"
|
|
|
+ ],
|
|
|
+ reject: [
|
|
|
+ "roughGradeInfo",
|
|
|
+ "gradeInfo",
|
|
|
+ "levelList",
|
|
|
+ "roughLevelList",
|
|
|
+ "gradeHis"
|
|
|
+ ],
|
|
|
+ arbitrate: ["roughGradeInfo", "gradeInfo", "levelList", "gradeHis"],
|
|
|
+ shift: ["gradeChange", "roughLevelList"],
|
|
|
+ batch: ["levelList"]
|
|
|
},
|
|
|
MARKER: {
|
|
|
- done: ["gradeList", "gradeInfo"],
|
|
|
- undo: ["gradeList", "gradePass"],
|
|
|
- reject: ["gradeList", "gradePass", "gradeInfo"],
|
|
|
- batch: ["gradeList"]
|
|
|
+ done: ["roughGradeInfo", "gradeInfo", "levelList"],
|
|
|
+ undo: ["roughGradeInfo", "gradeInfo", "levelList", "gradePass"],
|
|
|
+ reject: ["gradeInfo", "levelList", "gradePass"],
|
|
|
+ shift: ["gradeChange"],
|
|
|
+ shiftScore: ["roughGradeInfo", "gradeInfo", "levelList", "levelPass"],
|
|
|
+ batch: ["levelList"]
|
|
|
},
|
|
|
STANDARD: ["gradeInfo"]
|
|
|
},
|
|
@@ -359,6 +415,8 @@ export default {
|
|
|
done: "已评",
|
|
|
reject: "打回",
|
|
|
arbitrate: "待仲裁",
|
|
|
+ shift: "改大档",
|
|
|
+ shiftScore: "改大档打小档",
|
|
|
sample: "标准卷",
|
|
|
batch: "批量操作"
|
|
|
},
|
|
@@ -367,6 +425,8 @@ export default {
|
|
|
gradingHistory: [],
|
|
|
levelList: [],
|
|
|
curLevel: {},
|
|
|
+ roughLevelList: [],
|
|
|
+ curRoughLevel: {},
|
|
|
setT: null,
|
|
|
btnClicked: false,
|
|
|
keyInput: null,
|
|
@@ -384,9 +444,6 @@ export default {
|
|
|
},
|
|
|
IS_MARK_LEADER() {
|
|
|
return this.curUserRoleType === "MARK_LEADER";
|
|
|
- },
|
|
|
- levelRangeName() {
|
|
|
- return this.curSubject.stage === "LEVEL" ? "分数" : "档位";
|
|
|
}
|
|
|
},
|
|
|
watch: {
|
|
@@ -448,6 +505,9 @@ export default {
|
|
|
getStepType() {
|
|
|
const info = this.curPaperOrTask;
|
|
|
if (info.sample) return "sample";
|
|
|
+ if (info.shift && info.shiftScore && !info.level && !info.result)
|
|
|
+ return "shift";
|
|
|
+ if (!info.shift && info.shiftScore && !info.result) return "shiftScore";
|
|
|
if (this.curPaperOrTaskLevel) return "done";
|
|
|
if (info.arbitrated) return "arbitrate";
|
|
|
if (info.rejected) return "reject";
|
|
@@ -481,15 +541,15 @@ export default {
|
|
|
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
|
|
|
- );
|
|
|
- }
|
|
|
+ this.levelList = this.levels.filter(
|
|
|
+ item => item.roughCode === this.curPaperOrTask.roughLevel
|
|
|
+ );
|
|
|
+ this.roughLevelList = this.parseRoughLevels(this.levels);
|
|
|
+ const curRoughLevel = this.roughLevelList.find(
|
|
|
+ item => item.name === this.curPaperOrTask.roughLevel
|
|
|
+ );
|
|
|
+ this.curRoughLevel = curRoughLevel || {};
|
|
|
+
|
|
|
const levelName = this.curPaperOrTask.rejected
|
|
|
? this.curPaperOrTask.redoLevel
|
|
|
: this.curPaperOrTaskLevel;
|
|
@@ -499,6 +559,27 @@ export default {
|
|
|
this.curLevel = {};
|
|
|
}
|
|
|
},
|
|
|
+ parseRoughLevels(levelList) {
|
|
|
+ const levelMap = {};
|
|
|
+ levelList.forEach(item => {
|
|
|
+ const ind = item.roughCode;
|
|
|
+ if (!levelMap[ind]) levelMap[ind] = [];
|
|
|
+ levelMap[ind].push(item);
|
|
|
+ });
|
|
|
+ let roughLevelList = Object.keys(levelMap).map((roughCode, ind) => {
|
|
|
+ const group = levelMap[roughCode];
|
|
|
+ const levels = group.map(item => item.code);
|
|
|
+
|
|
|
+ return {
|
|
|
+ id: ind + 1,
|
|
|
+ name: roughCode,
|
|
|
+ minScore: levels[0],
|
|
|
+ maxScore: levels.slice(-1)[0]
|
|
|
+ };
|
|
|
+ });
|
|
|
+ roughLevelList.sort((a, b) => (a.name < b.name ? -1 : 1));
|
|
|
+ return roughLevelList;
|
|
|
+ },
|
|
|
async getMarkHistory() {
|
|
|
// 只有科组长和超管才会展示评卷记录
|
|
|
const data = await markHistoryList(
|
|
@@ -561,6 +642,29 @@ export default {
|
|
|
|
|
|
this.$emit("on-select-level", level);
|
|
|
},
|
|
|
+ selectRoughLevel(level) {
|
|
|
+ if (this.curPaperOrTask.roughLevel === level.name) return;
|
|
|
+
|
|
|
+ if (this.btnClicked) return;
|
|
|
+ this.btnClicked = true;
|
|
|
+
|
|
|
+ this.setT = setTimeout(() => {
|
|
|
+ this.btnClicked = false;
|
|
|
+ }, 500);
|
|
|
+ // 科组长改档 / 评卷同意改档:只使用selectedLevel
|
|
|
+ const curLevel =
|
|
|
+ this.stepType === "shift"
|
|
|
+ ? this.curPaperOrTask.redoLevel
|
|
|
+ : this.curPaperOrTask.roughLevel;
|
|
|
+ this.$emit("on-leader-change-level", {
|
|
|
+ paperId: this.curPaperOrTask.paperId,
|
|
|
+ curLevel,
|
|
|
+ selectedLevel: level.name
|
|
|
+ });
|
|
|
+ },
|
|
|
+ gradeChangeConfirm() {
|
|
|
+ this.selectRoughLevel({ name: this.curPaperOrTask.redoLevel });
|
|
|
+ },
|
|
|
toPass() {
|
|
|
this.$emit("on-pass");
|
|
|
},
|
|
@@ -599,7 +703,10 @@ export default {
|
|
|
}
|
|
|
},
|
|
|
getKeyInputLevel(key) {
|
|
|
- return this.levelList.find(item => item.name === key);
|
|
|
+ return (
|
|
|
+ this.levelList.find(item => item.name === key) ||
|
|
|
+ this.roughLevelList.find(item => item.name === key)
|
|
|
+ );
|
|
|
},
|
|
|
toKeySubmit() {
|
|
|
if (!this.keyInput) {
|
|
@@ -607,7 +714,11 @@ export default {
|
|
|
return;
|
|
|
}
|
|
|
const level = this.getKeyInputLevel(this.keyInput);
|
|
|
- this.selectLevel(level);
|
|
|
+ if (/^[a-z]$/.test(level.name)) {
|
|
|
+ this.selectLevel(level);
|
|
|
+ } else {
|
|
|
+ this.selectRoughLevel(level);
|
|
|
+ }
|
|
|
},
|
|
|
clearKeyInput() {
|
|
|
this.keyInput = null;
|