|
@@ -1,151 +1,26 @@
|
|
|
<template>
|
|
|
- <div
|
|
|
- v-if="store.setting"
|
|
|
- class="tw-flex tw-gap-4 tw-justify-start tw-items-center header-container"
|
|
|
+ <CommonMarkHeader
|
|
|
+ :isSingleStudent="isSingleStudent"
|
|
|
+ :clearTasks="clearTasks"
|
|
|
+ showPaperAndAnswer
|
|
|
+ showScoreBoard
|
|
|
>
|
|
|
- <div
|
|
|
- v-if="!isSingleStudent"
|
|
|
- class="tw-flex tw-place-content-center tw-cursor-pointer tw-relative menu"
|
|
|
- :class="[store.historyOpen && 'menu-toggled']"
|
|
|
- @click="store.toggleHistory"
|
|
|
- >
|
|
|
- <span title="回看" class="tw-inline-flex tw-place-content-center">
|
|
|
- <img
|
|
|
- src="../mark/images/left-menu.svg"
|
|
|
- :class="[store.historyOpen && 'svg-red']"
|
|
|
- />
|
|
|
- </span>
|
|
|
- <div v-if="store.historyOpen" class="triangle"></div>
|
|
|
- </div>
|
|
|
- <div
|
|
|
- class="
|
|
|
- tw-text-white
|
|
|
- tw-block
|
|
|
- tw-overflow-ellipsis
|
|
|
- tw-overflow-hidden
|
|
|
- tw-whitespace-nowrap
|
|
|
- header-big-text
|
|
|
- "
|
|
|
- >
|
|
|
- {{
|
|
|
- `${store.setting.subject.code ?? ""}-${
|
|
|
- store.setting.subject.name ?? ""
|
|
|
- }`
|
|
|
- }}
|
|
|
- </div>
|
|
|
- <div class="tw-flex tw-gap-1">
|
|
|
- <div>
|
|
|
- <span class="header-small-text">编号</span>
|
|
|
- <span class="highlight-text">
|
|
|
- {{ store.currentTask?.secretNumber ?? "-" }}
|
|
|
- </span>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div v-if="!isSingleStudent" class="tw-flex tw-gap-2 tw-items-center">
|
|
|
- <span>
|
|
|
- <span class="header-small-text">待处理</span>
|
|
|
- <span class="highlight-text">{{ store.status.totalCount ?? "-" }}</span>
|
|
|
- </span>
|
|
|
- <span>
|
|
|
- <span class="header-small-text">已处理</span>
|
|
|
- <span class="highlight-text">{{
|
|
|
- store.status.markedCount ?? "-"
|
|
|
- }}</span>
|
|
|
- </span>
|
|
|
- </div>
|
|
|
- <div class="tw-flex-1"></div>
|
|
|
- <ZoomPaper v-if="store.isScanImage" />
|
|
|
- <a-popover
|
|
|
- v-if="store.isScanImage"
|
|
|
- title="小助手"
|
|
|
- trigger="hover"
|
|
|
- class="tw-cursor-pointer tw-flex tw-gap-2 tw-items-center"
|
|
|
- >
|
|
|
- <template #content>
|
|
|
- <table class="assistant-table">
|
|
|
- <tr v-if="store.setting.subject.paperUrl">
|
|
|
- <td>试卷</td>
|
|
|
- <td>
|
|
|
- <a-switch
|
|
|
- v-model:checked="store.setting.uiSetting['paper.modal']"
|
|
|
- />
|
|
|
- </td>
|
|
|
- </tr>
|
|
|
- <tr v-if="store.setting.subject.answerUrl">
|
|
|
- <td>答案</td>
|
|
|
- <td>
|
|
|
- <a-switch
|
|
|
- v-model:checked="store.setting.uiSetting['answer.modal']"
|
|
|
- />
|
|
|
- </td>
|
|
|
- </tr>
|
|
|
- <tr>
|
|
|
- <td>缩略图</td>
|
|
|
- <td>
|
|
|
- <a-switch
|
|
|
- v-model:checked="store.setting.uiSetting['minimap.modal']"
|
|
|
- />
|
|
|
- </td>
|
|
|
- </tr>
|
|
|
- </table>
|
|
|
- </template>
|
|
|
- <div class="tw-flex">
|
|
|
- 小助手
|
|
|
- <DownOutlined
|
|
|
- style="font-size: 12px; display: inline-block"
|
|
|
- class="tw-self-center tw-ml-1"
|
|
|
- />
|
|
|
- </div>
|
|
|
- </a-popover>
|
|
|
- <div class="tw-flex tw-place-items-center">
|
|
|
- <UserOutlined class="icon-font icon-with-text" />{{
|
|
|
- store.setting.userName
|
|
|
- }}
|
|
|
- </div>
|
|
|
- <div
|
|
|
- class="tw-flex tw-place-items-center tw-cursor-pointer"
|
|
|
- @click="closeWindow"
|
|
|
- >
|
|
|
- <PoweroffOutlined class="icon-font icon-with-text" />关闭
|
|
|
- </div>
|
|
|
- <div
|
|
|
- class="
|
|
|
- tw-flex tw-place-content-center tw-cursor-pointer tw-justify-self-end
|
|
|
- menu
|
|
|
- "
|
|
|
- :class="[
|
|
|
- store.isScoreBoardVisible && store.currentTask && 'menu-toggled',
|
|
|
- ]"
|
|
|
- @click="store.toggleScoreBoard"
|
|
|
- >
|
|
|
- <span
|
|
|
- title="给分板"
|
|
|
- class="tw-inline-flex tw-place-content-center tw-relative"
|
|
|
- >
|
|
|
- <img
|
|
|
- src="../mark/images/right-menu.svg"
|
|
|
- :class="[store.isScoreBoardVisible && 'svg-red']"
|
|
|
- />
|
|
|
- </span>
|
|
|
- <div
|
|
|
- v-if="store.isScoreBoardVisible && store.currentTask"
|
|
|
- class="triangle"
|
|
|
- ></div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
+ <span>
|
|
|
+ <span class="header-small-text">待处理</span>
|
|
|
+ <span class="highlight-text">{{ store.status.totalCount ?? "-" }}</span>
|
|
|
+ </span>
|
|
|
+ <span>
|
|
|
+ <span class="header-small-text">已处理</span>
|
|
|
+ <span class="highlight-text">{{ store.status.markedCount ?? "-" }}</span>
|
|
|
+ </span>
|
|
|
+ </CommonMarkHeader>
|
|
|
</template>
|
|
|
|
|
|
<script setup lang="ts">
|
|
|
-import { onMounted } from "vue";
|
|
|
import { store } from "@/store/store";
|
|
|
-import {
|
|
|
- UserOutlined,
|
|
|
- PoweroffOutlined,
|
|
|
- DownOutlined,
|
|
|
-} from "@ant-design/icons-vue";
|
|
|
import { useRoute } from "vue-router";
|
|
|
import { clearArbitrateTask } from "@/api/arbitratePage";
|
|
|
-import ZoomPaper from "@/components/ZoomPaper.vue";
|
|
|
+import CommonMarkHeader from "@/components/CommonMarkHeader.vue";
|
|
|
|
|
|
const route = useRoute();
|
|
|
let isSingleStudent = !!route.query.historyId;
|
|
@@ -159,49 +34,15 @@ const {
|
|
|
historyId: string;
|
|
|
};
|
|
|
|
|
|
-async function updateClearTask() {
|
|
|
- await clearArbitrateTask(libraryId, subjectCode, groupNumber);
|
|
|
-}
|
|
|
-
|
|
|
-const closeWindow = async () => {
|
|
|
- await updateClearTask();
|
|
|
- window.close();
|
|
|
-};
|
|
|
-
|
|
|
-onMounted(() => {
|
|
|
- // 不确定是否一定能在关闭页面时调用
|
|
|
- window.addEventListener("beforeunload", () => {
|
|
|
- updateClearTask().catch((e) => console.log(e));
|
|
|
- });
|
|
|
-});
|
|
|
+let clearTasks = clearArbitrateTask.bind(
|
|
|
+ null,
|
|
|
+ libraryId,
|
|
|
+ subjectCode,
|
|
|
+ groupNumber
|
|
|
+);
|
|
|
</script>
|
|
|
|
|
|
<style scoped>
|
|
|
-.header-container {
|
|
|
- position: relative;
|
|
|
- height: 56px;
|
|
|
- line-height: 16px;
|
|
|
-
|
|
|
- background-color: var(--header-bg-color);
|
|
|
- color: rgba(255, 255, 255, 0.5);
|
|
|
-}
|
|
|
-.menu {
|
|
|
- width: 56px;
|
|
|
- height: 56px;
|
|
|
- padding: 20px;
|
|
|
-}
|
|
|
-.menu:hover,
|
|
|
-.menu-toggled {
|
|
|
- background-color: rgba(255, 255, 255, 0.2);
|
|
|
-}
|
|
|
-
|
|
|
-.header-container span {
|
|
|
- vertical-align: middle;
|
|
|
-}
|
|
|
-.header-big-text {
|
|
|
- font-size: 20px;
|
|
|
- line-height: 30px;
|
|
|
-}
|
|
|
.header-small-text {
|
|
|
font-size: var(--app-secondary-font-size);
|
|
|
}
|
|
@@ -209,28 +50,4 @@ onMounted(() => {
|
|
|
color: white;
|
|
|
font-size: var(--app-title-font-size);
|
|
|
}
|
|
|
-
|
|
|
-.assistant-table {
|
|
|
- z-index: 5500;
|
|
|
- border-collapse: separate;
|
|
|
- border-spacing: 0 1em;
|
|
|
- color: var(--app-bold-text-color);
|
|
|
- width: 240px;
|
|
|
-}
|
|
|
-.assistant-table tr td:nth-child(2) {
|
|
|
- text-align: right;
|
|
|
-}
|
|
|
-.svg-red {
|
|
|
- filter: invert(27%) sepia(51%) saturate(2878%) hue-rotate(346deg)
|
|
|
- brightness(104%) contrast(97%);
|
|
|
-}
|
|
|
-.triangle {
|
|
|
- background-color: white;
|
|
|
- width: 10px;
|
|
|
- height: 10px;
|
|
|
- clip-path: polygon(0 100%, 100% 100%, 50% 0);
|
|
|
-
|
|
|
- position: absolute;
|
|
|
- bottom: -2px;
|
|
|
-}
|
|
|
</style>
|