|
@@ -1,22 +1,22 @@
|
|
<template>
|
|
<template>
|
|
- <div class="my-container">
|
|
|
|
- <mark-header />
|
|
|
|
- <div class="tw-flex tw-gap-1">
|
|
|
|
|
|
+ <div class="mark arbitrate">
|
|
|
|
+ <mark-header :isSingleStudent="isSingleStudent" />
|
|
|
|
+ <mark-tool :actions="['minimap', 'sizeScale', 'imgScale']" />
|
|
|
|
+ <div class="mark-main">
|
|
<mark-history
|
|
<mark-history
|
|
v-if="!isSingleStudent"
|
|
v-if="!isSingleStudent"
|
|
- :subjectCode="subjectCode"
|
|
|
|
|
|
+ :subjectCode="paperNumber"
|
|
:groupNumber="groupNumber"
|
|
:groupNumber="groupNumber"
|
|
:getHistory="getArbitrateHistory"
|
|
:getHistory="getArbitrateHistory"
|
|
/>
|
|
/>
|
|
<ArbitrateMarkList />
|
|
<ArbitrateMarkList />
|
|
<mark-body @error="renderError" />
|
|
<mark-body @error="renderError" />
|
|
- <template v-if="store.isTrackMode">
|
|
|
|
- <mark-board-track
|
|
|
|
- @unselectiveSubmit="saveTaskToServer(true)"
|
|
|
|
- @submit="saveTaskToServerByTrack"
|
|
|
|
- />
|
|
|
|
- </template>
|
|
|
|
- <template v-else>
|
|
|
|
|
|
+ <mark-board-track
|
|
|
|
+ v-if="store.isTrackMode"
|
|
|
|
+ @unselectiveSubmit="saveTaskToServer(true)"
|
|
|
|
+ @submit="saveTaskToServerByTrack"
|
|
|
|
+ />
|
|
|
|
+ <template v-if="!store.isTrackMode">
|
|
<mark-board-key-board
|
|
<mark-board-key-board
|
|
v-if="store.shouldShowMarkBoardKeyBoard"
|
|
v-if="store.shouldShowMarkBoardKeyBoard"
|
|
@submit="saveTaskToServer(false)"
|
|
@submit="saveTaskToServer(false)"
|
|
@@ -39,7 +39,7 @@
|
|
import { onMounted, watch, h } from "vue";
|
|
import { onMounted, watch, h } from "vue";
|
|
import { store } from "@/store/store";
|
|
import { store } from "@/store/store";
|
|
import MarkHeader from "./MarkHeader.vue";
|
|
import MarkHeader from "./MarkHeader.vue";
|
|
-import { useRoute } from "vue-router";
|
|
|
|
|
|
+import MarkTool from "../mark/MarkTool.vue";
|
|
import MarkBody from "./MarkBody.vue";
|
|
import MarkBody from "./MarkBody.vue";
|
|
import MarkBoardKeyBoard from "@/features/mark/MarkBoardKeyBoard.vue";
|
|
import MarkBoardKeyBoard from "@/features/mark/MarkBoardKeyBoard.vue";
|
|
import MarkBoardMouse from "@/features/mark/MarkBoardMouse.vue";
|
|
import MarkBoardMouse from "@/features/mark/MarkBoardMouse.vue";
|
|
@@ -58,65 +58,41 @@ import {
|
|
import ArbitrateMarkList from "./ArbitrateMarkList.vue";
|
|
import ArbitrateMarkList from "./ArbitrateMarkList.vue";
|
|
import AnswerModal from "../mark/AnswerModal.vue";
|
|
import AnswerModal from "../mark/AnswerModal.vue";
|
|
import PaperModal from "../mark/PaperModal.vue";
|
|
import PaperModal from "../mark/PaperModal.vue";
|
|
-import { getPaper } from "@/api/jsonMark";
|
|
|
|
import { getArbitrateHistory } from "@/api/arbitratePage";
|
|
import { getArbitrateHistory } from "@/api/arbitratePage";
|
|
import EventBus from "@/plugins/eventBus";
|
|
import EventBus from "@/plugins/eventBus";
|
|
-import { addFileServerPrefixToTask, preDrawImage } from "@/utils/utils";
|
|
|
|
import { isNumber } from "lodash-es";
|
|
import { isNumber } from "lodash-es";
|
|
import type { Question } from "@/types";
|
|
import type { Question } from "@/types";
|
|
|
|
+import vls from "@/utils/storage";
|
|
|
|
|
|
-const route = useRoute();
|
|
|
|
-let isSingleStudent = !!route.query.historyId;
|
|
|
|
-const {
|
|
|
|
- subjectCode,
|
|
|
|
- groupNumber,
|
|
|
|
- historyId: taskId,
|
|
|
|
-} = route.query as {
|
|
|
|
- subjectCode: string;
|
|
|
|
- groupNumber: string;
|
|
|
|
- historyId: string;
|
|
|
|
-};
|
|
|
|
|
|
+const { paperNumber, groupNumber, examId, arbitrateId } = vls.get(
|
|
|
|
+ "arbitrate",
|
|
|
|
+ {}
|
|
|
|
+);
|
|
|
|
+let isSingleStudent = !!arbitrateId;
|
|
|
|
+
|
|
|
|
+const params = isSingleStudent
|
|
|
|
+ ? { arbitrateId }
|
|
|
|
+ : { paperNumber, groupNumber, examId };
|
|
|
|
|
|
async function updateClearTask() {
|
|
async function updateClearTask() {
|
|
- await clearArbitrateTask(taskId, subjectCode);
|
|
|
|
|
|
+ await clearArbitrateTask(params);
|
|
}
|
|
}
|
|
|
|
|
|
async function updateSetting() {
|
|
async function updateSetting() {
|
|
- const settingRes = await getArbitrateSetting(
|
|
|
|
- taskId,
|
|
|
|
- subjectCode,
|
|
|
|
- groupNumber
|
|
|
|
- );
|
|
|
|
- const { examType, fileServer, subject, userName, splitConfig, enableSplit } =
|
|
|
|
- settingRes.data;
|
|
|
|
- store.initSetting({
|
|
|
|
- examType,
|
|
|
|
- fileServer,
|
|
|
|
- subject,
|
|
|
|
- userName,
|
|
|
|
- splitConfig,
|
|
|
|
- enableSplit,
|
|
|
|
|
|
+ const settingRes = await getArbitrateSetting(params);
|
|
|
|
+ store.setting = Object.assign({}, store.setting, {
|
|
|
|
+ selective: false,
|
|
|
|
+ examType: "SCAN_IMAGE",
|
|
|
|
+ subject: {
|
|
|
|
+ name: settingRes.data.courseName,
|
|
|
|
+ code: settingRes.data.courseCode,
|
|
|
|
+ },
|
|
|
|
+ mode: settingRes.data.markMode,
|
|
|
|
+ enableSplit: false,
|
|
});
|
|
});
|
|
- /*****************************根据本地临时会话存储的mode内容********************************* */
|
|
|
|
- let arbitrateLocalMode = sessionStorage.getItem("arbitrate_local_mode");
|
|
|
|
- if (
|
|
|
|
- arbitrateLocalMode &&
|
|
|
|
- (arbitrateLocalMode === "TRACK" || arbitrateLocalMode === "COMMON")
|
|
|
|
- ) {
|
|
|
|
- store.setting.mode = arbitrateLocalMode;
|
|
|
|
- sessionStorage.removeItem("arbitrate_local_mode");
|
|
|
|
- } else {
|
|
|
|
- store.setting.mode = settingRes.data.mode;
|
|
|
|
- }
|
|
|
|
- /************************************************************** */
|
|
|
|
- store.setting.selective = settingRes.data.selective;
|
|
|
|
-
|
|
|
|
- if (store.setting.subject?.paperUrl && store.isMultiMedia) {
|
|
|
|
- await getPaper(store);
|
|
|
|
- }
|
|
|
|
}
|
|
}
|
|
async function updateStatus() {
|
|
async function updateStatus() {
|
|
- const res = await getArbitrateTaskStatus(subjectCode, groupNumber);
|
|
|
|
|
|
+ const res = await getArbitrateTaskStatus(params);
|
|
if (res.data.valid) Object.assign(store.status, res.data);
|
|
if (res.data.valid) Object.assign(store.status, res.data);
|
|
}
|
|
}
|
|
async function updateTask() {
|
|
async function updateTask() {
|
|
@@ -135,11 +111,10 @@ async function updateTask() {
|
|
|
|
|
|
if (res.data.studentId) {
|
|
if (res.data.studentId) {
|
|
let rawTask = res.data;
|
|
let rawTask = res.data;
|
|
- let t = addFileServerPrefixToTask(rawTask);
|
|
|
|
- if (store.isScanImage && !!t) {
|
|
|
|
- await preDrawImage(t);
|
|
|
|
- }
|
|
|
|
- store.currentTask = t;
|
|
|
|
|
|
+ // newTask.sheetUrls = newTask.sheetUrls || [];
|
|
|
|
+ rawTask.sheetUrls = ["/1-1.jpg", "/1-2.jpg"];
|
|
|
|
+ rawTask.sliceUrls = [...rawTask.sheetUrls];
|
|
|
|
+ store.currentTask = rawTask;
|
|
} else {
|
|
} else {
|
|
store.message = res.data.message;
|
|
store.message = res.data.message;
|
|
}
|
|
}
|
|
@@ -176,11 +151,11 @@ watch(
|
|
);
|
|
);
|
|
|
|
|
|
async function getSingleStuTask() {
|
|
async function getSingleStuTask() {
|
|
- return getSingleArbitrateTask(taskId);
|
|
|
|
|
|
+ return getSingleArbitrateTask(params);
|
|
}
|
|
}
|
|
|
|
|
|
async function getOneOfStuTask() {
|
|
async function getOneOfStuTask() {
|
|
- return getOneOfArbitrateTask(subjectCode, groupNumber);
|
|
|
|
|
|
+ return getOneOfArbitrateTask(params);
|
|
}
|
|
}
|
|
|
|
|
|
const saveTaskToServerByTrack = async () => {
|
|
const saveTaskToServerByTrack = async () => {
|
|
@@ -203,8 +178,8 @@ const saveTaskToServer = async (
|
|
let res;
|
|
let res;
|
|
if (unselective) {
|
|
if (unselective) {
|
|
res = await saveArbitrateTask(
|
|
res = await saveArbitrateTask(
|
|
- store.currentTask.taskId + "",
|
|
|
|
- store.currentTask.studentId + "",
|
|
|
|
|
|
+ store.currentTask.taskId,
|
|
|
|
+ store.currentTask.studentId,
|
|
-1,
|
|
-1,
|
|
[],
|
|
[],
|
|
true
|
|
true
|
|
@@ -277,10 +252,3 @@ const renderError = () => {
|
|
store.message = "加载失败,请重新加载。";
|
|
store.message = "加载失败,请重新加载。";
|
|
};
|
|
};
|
|
</script>
|
|
</script>
|
|
-
|
|
|
|
-<style scoped>
|
|
|
|
-.my-container {
|
|
|
|
- width: 100%;
|
|
|
|
- overflow: clip;
|
|
|
|
-}
|
|
|
|
-</style>
|
|
|