Переглянути джерело

axios response 添加数据类型

Michael Wang 3 роки тому
батько
коміт
2241e4ad2f

+ 22 - 9
src/api/arbitratePage.ts

@@ -1,5 +1,11 @@
 import { httpApp } from "@/plugins/axiosApp";
-import { HistoryQueryParams } from "@/types";
+import {
+  CommonResponse,
+  HistoryQueryParams,
+  MarkDetail,
+  Setting,
+  Task,
+} from "@/types";
 
 /** 清理仲裁任务(libraryId 与其他参数互斥填写) */
 export async function clearArbitrateTask(
@@ -12,21 +18,24 @@ export async function clearArbitrateTask(
   libraryId && form.append("groupNumber", libraryId);
   subjectCode && form.append("subjectCode", subjectCode);
   groupNumber && form.append("groupNumber", groupNumber);
-  return httpApp.post("/admin/exam/arbitrate/clear", form);
+  return httpApp.post<void>("/admin/exam/arbitrate/clear", form);
 }
 
 /** 查看单个学生的仲裁任务 */
 export async function getSingleArbitrateTask(historyId: string) {
   const form = new FormData();
   historyId && form.append("historyId", historyId);
-  return httpApp.post("/admin/exam/arbitrate/getTask", form);
+  return httpApp.post<Task>("/admin/exam/arbitrate/getTask", form);
 }
 
 /** 查看仲裁任务2次分数 */
 export async function getArbitrateList(historyId: string) {
   const form = new FormData();
   historyId && form.append("historyId", historyId);
-  return httpApp.post("/admin/exam/arbitrate/getArbitrationList", form);
+  return httpApp.post<MarkDetail[]>(
+    "/admin/exam/arbitrate/getArbitrationList",
+    form
+  );
 }
 
 /** 批量仲裁得到单个学生的仲裁任务 */
@@ -37,7 +46,7 @@ export async function getOneOfArbitrateTask(
   const form = new FormData();
   form.append("subjectCode", subjectCode);
   form.append("groupNumber", groupNumber);
-  return httpApp.post("/admin/exam/arbitrate/getTask", form, {
+  return httpApp.post<Task>("/admin/exam/arbitrate/getTask", form, {
     setGlobalMask: true,
   });
 }
@@ -50,7 +59,11 @@ export async function getArbitrateTaskStatus(
   const form = new FormData();
   form.append("subjectCode", subjectCode);
   form.append("groupNumber", groupNumber);
-  return httpApp.post("/admin/exam/arbitrate/getStatus", form);
+  return httpApp.post<{
+    valid: boolean;
+    totalCount: number;
+    markedCount: number;
+  }>("/admin/exam/arbitrate/getStatus", form);
 }
 
 /** 批量仲裁设置 */
@@ -63,7 +76,7 @@ export async function getArbitrateSetting(
   historyId && form.append("historyId", historyId);
   subjectCode && form.append("subjectCode", subjectCode);
   groupNumber && form.append("groupNumber", groupNumber);
-  return httpApp.post("/admin/exam/arbitrate/getSetting", form);
+  return httpApp.post<Setting>("/admin/exam/arbitrate/getSetting", form);
 }
 
 /** 批量仲裁历史 */
@@ -85,7 +98,7 @@ export async function getArbitrateHistory({
   form.append("order", order);
   form.append("sort", sort);
   secretNumber && form.append("secretNumber", secretNumber);
-  return httpApp.post("/admin/exam/arbitrate/getHistory", form);
+  return httpApp.post<Task[]>("/admin/exam/arbitrate/getHistory", form);
 }
 
 /** 保存仲裁任务 */
@@ -96,7 +109,7 @@ export async function saveArbitrateTask(
   scoreList: Array<number>,
   unselective: boolean
 ) {
-  return httpApp.post("/admin/exam/arbitrate/saveTask", {
+  return httpApp.post<CommonResponse>("/admin/exam/arbitrate/saveTask", {
     libraryId,
     studentId,
     markerScore,

+ 7 - 3
src/api/importInspectPage.ts

@@ -1,16 +1,20 @@
 import { httpApp } from "@/plugins/axiosApp";
+import { AdminPageSettingForImport, CommonResponse, Task } from "@/types";
 
 export async function getInspectedSetting(studentId?: string) {
   const form = new FormData();
   studentId && form.append("studentId", studentId);
-  return httpApp.post("/admin/exam/inspected/import/getSetting", form);
+  return httpApp.post<AdminPageSettingForImport>(
+    "/admin/exam/inspected/import/getSetting",
+    form
+  );
 }
 
 /** 查看单个学生的复核任务 */
 export async function getSingleInspectedTask(studentId: string) {
   const form = new FormData();
   studentId && form.append("studentId", studentId);
-  return httpApp.post("/admin/exam/inspected/import/getTask", form);
+  return httpApp.post<Task>("/admin/exam/inspected/import/getTask", form);
 }
 
 /** 保存复核任务 */
@@ -18,5 +22,5 @@ export async function saveInspectedTask(studentId: string, isTag: string) {
   const form = new FormData();
   form.append("studentId", studentId);
   form.append("isTag", isTag);
-  return httpApp.post("/admin/exam/inspected/import/tag", form);
+  return httpApp.post<CommonResponse>("/admin/exam/inspected/import/tag", form);
 }

+ 21 - 10
src/api/inspectPage.ts

@@ -1,5 +1,11 @@
 import { httpApp } from "@/plugins/axiosApp";
-import { HistoryQueryParams, Question } from "@/types";
+import {
+  AdminPageSetting,
+  CommonResponse,
+  HistoryQueryParams,
+  Question,
+  Task,
+} from "@/types";
 
 /** 清理复核任务 */
 export async function clearInspectedTask(
@@ -9,15 +15,14 @@ export async function clearInspectedTask(
   const form = new FormData();
   studentId && form.append("studentId", studentId);
   subjectCode && form.append("subjectCode", subjectCode);
-  return httpApp.post("/admin/exam/inspected/clear", form);
+  return httpApp.post<void>("/admin/exam/inspected/clear", form);
 }
 
 /** 查看单个学生的复核任务 */
 export async function getSingleInspectedTask(studentId: string) {
-  // return httpApp.post("/admin/exam/inspected/getTask?studentId=" + studentId);
   const form = new FormData();
   studentId && form.append("studentId", studentId);
-  return httpApp.post("/admin/exam/inspected/getTask", form);
+  return httpApp.post<Task>("/admin/exam/inspected/getTask", form);
 }
 
 export interface InspectedParams {
@@ -51,7 +56,7 @@ export async function getOneOfInspectedTask({
   form.append("mainEndScore", mainEndScore);
   form.append("questionScore", questionScore);
   form.append("selectiveStatus", selectiveStatus);
-  return httpApp.post("/admin/exam/inspected/getTask", form);
+  return httpApp.post<Task>("/admin/exam/inspected/getTask", form);
 }
 
 /** 批量复核得到任务总数 */
@@ -74,14 +79,20 @@ export async function getInspectedTaskStatus({
   form.append("mainEndScore", mainEndScore);
   form.append("questionScore", questionScore);
   form.append("selectiveStatus", selectiveStatus);
-  return httpApp.post("/admin/exam/inspected/getStatus", form);
+  return httpApp.post<{ valid: boolean; totalCount: number }>(
+    "/admin/exam/inspected/getStatus",
+    form
+  );
 }
 
 /** 批量复核设置 */
 export async function getInspectedSetting(subjectCode?: string) {
   const form = new FormData();
   subjectCode && form.append("subjectCode", subjectCode);
-  return httpApp.post("/admin/exam/inspected/getSetting", form);
+  return httpApp.post<AdminPageSetting>(
+    "/admin/exam/inspected/getSetting",
+    form
+  );
 }
 
 /** 批量复核历史 */
@@ -101,14 +112,14 @@ export async function getInspectedHistory({
   form.append("sort", sort);
   form.append("pageNumber", pageNumber + "");
   form.append("pageSize", pageSize + "");
-  return httpApp.post("/admin/exam/inspected/getHistory", form);
+  return httpApp.post<Task[]>("/admin/exam/inspected/getHistory", form);
 }
 
 /** 保存复核任务 */
 export async function saveInspectedTask(studentId: string) {
   const form = new FormData();
   form.append("studentId", studentId);
-  return httpApp.post("/admin/exam/inspected/save", form);
+  return httpApp.post<CommonResponse>("/admin/exam/inspected/save", form);
 }
 
 /** 复核任务打回问题 */
@@ -122,7 +133,7 @@ export async function rejectInspectedTask(
       !key.startsWith("__") ? value : undefined
     )
   );
-  return httpApp.post("/admin/exam/inspected/rejected", {
+  return httpApp.post<CommonResponse>("/admin/exam/inspected/rejected", {
     studentId,
     questionList,
   });

+ 13 - 15
src/api/libraryInspectPage.ts

@@ -1,5 +1,5 @@
 import { httpApp } from "@/plugins/axiosApp";
-import { HistoryQueryParams, Question } from "@/types";
+import { CommonResponse, HistoryQueryParams, Question, Task } from "@/types";
 
 /** 清理复核任务 */
 export async function clearInspectedTask(
@@ -9,17 +9,9 @@ export async function clearInspectedTask(
   const form = new FormData();
   subjectCode && form.append("subjectCode", subjectCode);
   groupNumber && form.append("groupNumber", groupNumber);
-  return httpApp.post("/admin/exam/library/clear", form);
+  return httpApp.post<void>("/admin/exam/library/clear", form);
 }
 
-/** 查看单个学生的复核任务 */
-// export async function getSingleInspectedTask(studentId: string) {
-//   // return httpApp.post("/admin/exam/inspected/getTask?studentId=" + studentId);
-//   const form = new FormData();
-//   studentId && form.append("studentId", studentId);
-//   return httpApp.post("/admin/exam/inspected/getTask", form);
-// }
-
 /** 批量复核历史 */
 export async function getLibraryInspectedHistory({
   subjectCode,
@@ -39,7 +31,7 @@ export async function getLibraryInspectedHistory({
   form.append("pageNumber", pageNumber + "");
   form.append("pageSize", pageSize + "");
   groupNumber && form.append("groupNumber", groupNumber);
-  return httpApp.post("/admin/exam/library/getHistory", form);
+  return httpApp.post<Task[]>("/admin/exam/library/getHistory", form);
 }
 
 /** 批量复核得到单个学生的复核任务 */
@@ -50,7 +42,7 @@ export async function getOneOfInspectedTask(
   const form = new FormData();
   subjectCode && form.append("subjectCode", subjectCode);
   groupNumber && form.append("groupNumber", groupNumber);
-  return httpApp.post("/admin/exam/library/getTask", form);
+  return httpApp.post<Task>("/admin/exam/library/getTask", form);
 }
 
 /** 批量复核得到任务总数 */
@@ -61,14 +53,20 @@ export async function getInspectedTaskStatus(
   const form = new FormData();
   form.append("subjectCode", subjectCode);
   form.append("groupNumber", groupNumber);
-  return httpApp.post("/admin/exam/library/getStatus", form);
+  return httpApp.post<{ valid: boolean; totalCount: number }>(
+    "/admin/exam/library/getStatus",
+    form
+  );
 }
 
 /** 保存复核任务 */
 export async function saveInspectedTask(libraryId: string) {
   const form = new FormData();
   form.append("libraryId", libraryId);
-  return httpApp.post("/admin/exam/library/inspected/save", form);
+  return httpApp.post<CommonResponse>(
+    "/admin/exam/library/inspected/save",
+    form
+  );
 }
 
 /** 复核任务打回问题 */
@@ -82,7 +80,7 @@ export async function rejectInspectedTask(
       !key.startsWith("__") ? value : undefined
     )
   );
-  return httpApp.post("/admin/exam/library/rejected", {
+  return httpApp.post<CommonResponse>("/admin/exam/library/rejected", {
     libraryId,
     questionList,
   });

+ 13 - 2
src/api/libraryTrackPage.ts

@@ -1,15 +1,26 @@
 import { httpApp } from "@/plugins/axiosApp";
+import { Task } from "@/types";
+
+interface LibraryTrackResponse {
+  fileServer: string;
+  task: Task;
+  groupNumber: number;
+  splitConfig: [];
+}
 
 /** 查看单个评卷任务的试卷轨迹 */
 export async function getSingleLibraryTask(libraryId: string) {
   const form = new FormData();
   libraryId && form.append("libraryId", libraryId);
-  return httpApp.post("/admin/exam/track/library", form);
+  return httpApp.post<LibraryTrackResponse>("/admin/exam/track/library", form);
 }
 
 /** 查看单个*试评*评卷任务的试卷轨迹 */
 export async function getSingleLibraryTaskTrial(libraryId: string) {
   const form = new FormData();
   libraryId && form.append("libraryId", libraryId);
-  return httpApp.post("/admin/exam/track/trialLibrary", form);
+  return httpApp.post<LibraryTrackResponse>(
+    "/admin/exam/track/trialLibrary",
+    form
+  );
 }

+ 23 - 19
src/api/markPage.ts

@@ -1,31 +1,38 @@
 import { store } from "@/store/store";
 import { httpApp } from "@/plugins/axiosApp";
-import { Setting, UISetting, HistoryQueryParams } from "@/types";
+import {
+  Setting,
+  UISetting,
+  HistoryQueryParams,
+  MarkStore,
+  Group,
+  Task,
+  CommonResponse,
+} from "@/types";
 
 /** 清除评卷任务(之前锁住的任务之类的) */
 export async function clearMarkTask() {
-  return httpApp.post("/mark/clear");
+  return httpApp.post<void>("/mark/clear");
 }
 
 /** 获取评卷设置 */
 export async function getSetting() {
-  return httpApp.post("/mark/getSetting");
+  return httpApp.post<Setting>("/mark/getSetting");
 }
 
 /** 获取评卷状态 */
 export async function getStatus() {
-  return httpApp.post("/mark/getStatus");
+  return httpApp.post<MarkStore["status"]>("/mark/getStatus");
 }
 
 /** 获取评卷分组 */
 export async function getGroup() {
-  return httpApp.post("/mark/getGroup");
+  return httpApp.post<Group[]>("/mark/getGroup");
 }
 
 /** 获取评卷任务 */
 export async function getTask() {
-  const res = await httpApp.post("/mark/getTask");
-  return res;
+  return httpApp.post<Task>("/mark/getTask");
 }
 
 /** 更新评卷UI */
@@ -36,7 +43,7 @@ export async function updateUISetting(
   const form = new FormData();
   uiSetting && form.append("uiSetting", JSON.stringify(uiSetting));
   mode && form.append("mode", mode);
-  return httpApp.post("/mark/updateSetting", form);
+  return httpApp.post<void>("/mark/updateSetting", form);
 }
 
 /** 获取评卷历史任务 */
@@ -53,7 +60,7 @@ export async function getHistoryTask({
   form.append("order", order);
   form.append("sort", sort);
   secretNumber && form.append("secretNumber", secretNumber);
-  return httpApp.post("/mark/getHistory", form);
+  return httpApp.post<Task[]>("/mark/getHistory", form);
 }
 
 /** 保存评卷任务(正常保存) */
@@ -66,12 +73,9 @@ export async function saveTask() {
   markResult.spent = Date.now() - store.currentTask.__markStartTime;
   markResult = { ...markResult };
 
-  return httpApp.post("/mark/saveTask", markResult, { setGlobalMask: true });
-}
-
-/** 获取分组列表 */
-export async function getGroups() {
-  return httpApp.post("/mark/getGroup");
+  return httpApp.post<CommonResponse>("/mark/saveTask", markResult, {
+    setGlobalMask: true,
+  });
 }
 
 /** 获取用户信息 */
@@ -79,7 +83,7 @@ export async function changeUserInfo(name: string, password?: string) {
   const form = new FormData();
   form.append("name", name);
   password && form.append("password", password);
-  return httpApp.post("/mark/changeName", form);
+  return httpApp.post<void>("/mark/changeName", form);
 }
 
 /** 评卷用户退出 */
@@ -91,7 +95,7 @@ export function doLogout() {
 export async function doSwitchGroup(markerId: number) {
   const form = new FormData();
   form.append("markerId", "" + markerId);
-  return httpApp.post("/mark/subjectSelect", form);
+  return httpApp.post<CommonResponse>("/mark/subjectSelect", form);
 }
 
 /** 评卷用户选择试卷的问题类型 */
@@ -110,7 +114,7 @@ export async function doProblemType(problemId: number) {
   markResult.spent = Date.now() - store.currentTask.__markStartTime;
   markResult = { ...markResult };
 
-  return httpApp.post("/mark/saveTask", markResult);
+  return httpApp.post<CommonResponse>("/mark/saveTask", markResult);
 }
 
 /** 评卷用户选择试卷的为未选做 */
@@ -128,5 +132,5 @@ export async function doUnselectiveType() {
   markResult.spent = Date.now() - store.currentTask.__markStartTime;
   markResult = { ...markResult };
 
-  return httpApp.post("/mark/saveTask", markResult);
+  return httpApp.post<CommonResponse>("/mark/saveTask", markResult);
 }

+ 2 - 2
src/api/qualityPage.ts

@@ -1,5 +1,5 @@
 import { httpApp } from "@/plugins/axiosApp";
-import { HistoryQueryParams } from "@/types";
+import { HistoryQueryParams, Task } from "@/types";
 
 /** 批量仲裁历史 */
 export async function getQualityHistory({
@@ -19,5 +19,5 @@ export async function getQualityHistory({
   form.append("sort", sort);
   form.append("pageNumber", pageNumber + "");
   form.append("pageSize", pageSize + "");
-  return httpApp.post("/admin/exam/quality/history", form);
+  return httpApp.post<Task[]>("/admin/exam/quality/history", form);
 }

+ 2 - 1
src/api/studentTrackPage.ts

@@ -1,8 +1,9 @@
 import { httpApp } from "@/plugins/axiosApp";
+import { Task } from "@/types";
 
 /** 查看单个学生的试卷轨迹 */
 export async function getSingleStudentTask(studentId: string) {
   const form = new FormData();
   studentId && form.append("studentId", studentId);
-  return httpApp.post("/admin/exam/track/student", form);
+  return httpApp.post<Task>("/admin/exam/track/student", form);
 }

+ 6 - 7
src/features/arbitrate/Arbitrate.vue

@@ -47,7 +47,6 @@ import {
   saveArbitrateTask,
 } from "@/api/arbitratePage";
 import ArbitrateMarkList from "./ArbitrateMarkList.vue";
-import { Task } from "@/types";
 import AnswerModal from "../mark/AnswerModal.vue";
 import PaperModal from "../mark/PaperModal.vue";
 import { getPaper } from "@/api/jsonMark";
@@ -94,7 +93,7 @@ async function updateSetting() {
 }
 async function updateStatus() {
   const res = await getArbitrateTaskStatus(subjectCode, groupNumber);
-  if (res.data.valid) store.status = res.data;
+  if (res.data.valid) Object.assign(store.status, res.data);
 }
 async function updateTask() {
   const mkey = "fetch_task_key";
@@ -111,7 +110,7 @@ async function updateTask() {
   });
 
   if (res.data.studentId) {
-    let rawTask = res.data as Task;
+    let rawTask = res.data;
     store.currentTask = addFileServerPrefixToTask(rawTask);
   } else {
     store.message = res.data.message;
@@ -163,21 +162,21 @@ const saveTaskToServer = async (unselective: boolean) => {
   void message.loading({ content: "保存评卷任务...", key: mkey });
   let res;
   if (unselective) {
-    res = (await saveArbitrateTask(
+    res = await saveArbitrateTask(
       store.currentTask.libraryId + "",
       store.currentTask.studentId + "",
       -1,
       [],
       true
-    )) as any;
+    );
   } else {
-    res = (await saveArbitrateTask(
+    res = await saveArbitrateTask(
       store.currentTask.libraryId + "",
       store.currentTask.studentId + "",
       store.currentTask.markResult.markerScore as number,
       store.currentTask.markResult.scoreList as Array<number>,
       false
-    )) as any;
+    );
   }
   if (res.data.success && store.currentTask) {
     void message.success({ content: "仲裁成功", key: mkey, duration: 2 });

+ 2 - 8
src/features/arbitrate/ArbitrateMarkList.vue

@@ -39,13 +39,7 @@
 import { reactive, watch } from "vue";
 import { store } from "@/store/store";
 import { getArbitrateList } from "@/api/arbitratePage";
-
-interface MarkDetail {
-  markerName: string;
-  markerTime: number;
-  totalScore: number;
-  scoreList: string;
-}
+import { MarkDetail } from "@/types";
 
 let list: MarkDetail[] = reactive([]);
 
@@ -58,7 +52,7 @@ watch(
       );
       if (Array.isArray(res.data)) {
         list.splice(0);
-        list.push(...(<Array<MarkDetail>>res.data));
+        list.push(...res.data);
       }
     } else {
       list.splice(0);

+ 4 - 4
src/features/library/inspect/LibraryInspect.vue

@@ -23,7 +23,7 @@ import { useRoute } from "vue-router";
 import MarkBody from "./MarkBody.vue";
 import MarkHistory from "@/features/mark/MarkHistory.vue";
 import MarkBoardInspect from "./MarkBoardInspect.vue";
-import type { Question, Task } from "@/types";
+import type { Question } from "@/types";
 import { message } from "ant-design-vue";
 import {
   clearInspectedTask,
@@ -69,7 +69,7 @@ async function updateSetting() {
 }
 async function updateStatus() {
   const res = await getInspectedTaskStatus(subjectCode, groupNumber);
-  if (res.data.valid) store.status = res.data;
+  if (res.data.valid) Object.assign(store.status, res.data);
 }
 async function updateTask() {
   const mkey = "fetch_task_key";
@@ -81,7 +81,7 @@ async function updateTask() {
   });
 
   if (res.data.studentId) {
-    let rawTask = res.data as Task;
+    let rawTask = res.data;
     store.currentTask = addFileServerPrefixToTask(rawTask);
   } else {
     store.message = res.data.message;
@@ -120,7 +120,7 @@ const saveTaskToServer = async () => {
   console.log("save inspect task to server");
   const mkey = "save_task_key";
   void message.loading({ content: "保存评卷任务...", key: mkey });
-  const res = (await saveInspectedTask(realLibraryId)) as any;
+  const res = await saveInspectedTask(realLibraryId);
   if (res.data.success && store.currentTask) {
     void message.success({ content: "复核成功", key: mkey, duration: 2 });
     if (!store.historyOpen) {

+ 3 - 3
src/features/library/libraryTrack/LibraryTrack.vue

@@ -13,7 +13,6 @@ import { store } from "@/store/store";
 import MarkHeader from "./MarkHeader.vue";
 import { useRoute } from "vue-router";
 import MarkBody from "./MarkBody.vue";
-import type { Task } from "@/types";
 import { message } from "ant-design-vue";
 import {
   getSingleLibraryTask,
@@ -58,10 +57,11 @@ async function updateTask() {
     store.setting.splitConfig = res.data.splitConfig;
     store.setting.groupNumber = res.data.groupNumber;
 
-    let rawTask = res.data.task as Task;
+    let rawTask = res.data.task;
     store.currentTask = addFileServerPrefixToTask(rawTask);
   } else {
-    store.message = res.data.message;
+    // store.message = res.data.message;
+    console.log("请求异常");
   }
 }
 

+ 4 - 3
src/features/mark/Mark.vue

@@ -52,7 +52,7 @@ import { useTimers } from "@/setups/useTimers";
 import MarkHistory from "./MarkHistory.vue";
 import MarkBoardTrack from "./MarkBoardTrack.vue";
 import { Question } from "@/types";
-import type { Setting, Task } from "@/types";
+import type { Setting } from "@/types";
 import MarkBoardKeyBoard from "./MarkBoardKeyBoard.vue";
 import MarkBoardMouse from "./MarkBoardMouse.vue";
 import { debounce, isEmpty, isNumber } from "lodash-es";
@@ -112,7 +112,7 @@ let preDrawing = false;
 async function updateTask() {
   const res = await getTask();
   if (res.data.libraryId) {
-    let rawTask = res.data as Task;
+    let rawTask = res.data;
     const newTask = addFileServerPrefixToTask(rawTask);
     store.tasks.push(newTask);
     if (!store.historyOpen) {
@@ -335,7 +335,8 @@ const saveTaskToServer = async () => {
   }
   console.log("save task to server");
   void message.loading({ content: "保存评卷任务...", key: mkey });
-  const res = (await saveTask()) as any;
+  const res = await saveTask();
+  if (!res) return;
   // 故意不在此处同步等待,因为不必等待
   updateStatus().catch((e) => console.log("保存任务后获取status出错", e));
   if (res.data.success && store.currentTask) {

+ 2 - 2
src/features/mark/MarkSwitchGroupDialog.vue

@@ -37,7 +37,7 @@
   </a-modal>
 </template>
 <script setup lang="ts">
-import { doSwitchGroup, getGroups } from "@/api/markPage";
+import { doSwitchGroup, getGroup } from "@/api/markPage";
 import { message } from "ant-design-vue";
 import { onUpdated } from "vue";
 import { store } from "@/store/store";
@@ -46,7 +46,7 @@ let visible = $ref(false);
 
 onUpdated(async () => {
   if (visible) {
-    const groups = await getGroups();
+    const groups = await getGroup();
     store.groups = groups.data;
   }
 });

+ 6 - 14
src/features/student/importInspect/ImportInspect.vue

@@ -26,7 +26,7 @@ import MarkHeader from "./MarkHeader.vue";
 import { useRoute } from "vue-router";
 import MarkBody from "../inspect/MarkBody.vue";
 import MarkBoardInspect from "./MarkBoardInspect.vue";
-import type { Task } from "@/types";
+import type { AdminPageSetting } from "@/types";
 import { message } from "ant-design-vue";
 import { addFileServerPrefixToTask } from "@/utils/utils";
 
@@ -41,15 +41,8 @@ let currentStudentId = $ref(0);
 
 async function updateSetting() {
   const settingRes = await getInspectedSetting(studentId);
-  const { examType, fileServer, subject, userName, splitConfig } =
-    settingRes.data;
-  store.initSetting({
-    examType,
-    fileServer,
-    subject,
-    userName,
-    splitConfig,
-  });
+  const { examType, fileServer } = settingRes.data;
+  store.initSetting({ examType, fileServer } as AdminPageSetting);
   store.status.totalCount = settingRes.data.inspectCount;
   store.status.markedCount = 0;
 
@@ -74,9 +67,8 @@ async function updateTask() {
   });
 
   if (res.data.studentId) {
-    let rawTask = res.data as Task;
+    let rawTask = res.data;
     store.currentTask = addFileServerPrefixToTask(rawTask);
-    store.setting.subject = res.data.subject;
   } else {
     store.message = res.data.message;
   }
@@ -112,10 +104,10 @@ onMounted(async () => {
 const saveTaskToServer = async () => {
   const mkey = "save_task_key";
   void message.loading({ content: "标记评卷任务...", key: mkey });
-  const res = (await saveInspectedTask(
+  const res = await saveInspectedTask(
     currentStudentId + "",
     !isCurrentTagged + ""
-  )) as any;
+  );
   if (res.data.success) {
     void message.success({
       content: isCurrentTagged ? "取消标记成功" : "标记成功",

+ 5 - 5
src/features/student/inspect/Inspect.vue

@@ -31,7 +31,7 @@ import { useRoute } from "vue-router";
 import MarkBody from "./MarkBody.vue";
 import MarkHistory from "@/features/mark/MarkHistory.vue";
 import MarkBoardInspect from "./MarkBoardInspect.vue";
-import type { Question, Task } from "@/types";
+import type { Question } from "@/types";
 import { message } from "ant-design-vue";
 import { getPaper } from "@/api/jsonMark";
 import { getInspectedHistory } from "@/api/inspectPage";
@@ -92,7 +92,7 @@ async function updateStatus() {
     questionScore,
     selectiveStatus,
   });
-  if (res.data.valid) store.status = res.data;
+  if (res.data.valid) Object.assign(store.status, res.data);
 }
 async function updateTask() {
   const mkey = "fetch_task_key";
@@ -109,7 +109,7 @@ async function updateTask() {
   });
 
   if (res.data.studentId) {
-    let rawTask = res.data as Task;
+    let rawTask = res.data;
     store.currentTask = addFileServerPrefixToTask(rawTask);
     if (res.data.subject) store.setting.subject = res.data.subject;
   } else {
@@ -162,7 +162,7 @@ const saveTaskToServer = async () => {
   console.log("save inspect task to server");
   const mkey = "save_task_key";
   void message.loading({ content: "保存评卷任务...", key: mkey });
-  const res = (await saveInspectedTask(realStudentId)) as any;
+  const res = await saveInspectedTask(realStudentId);
   if (res.data.success && store.currentTask) {
     void message.success({ content: "复核成功", key: mkey, duration: 2 });
     if (!store.historyOpen) {
@@ -182,7 +182,7 @@ const saveTaskToServer = async () => {
 const rejectQuestions = async (questions: Array<Question>) => {
   const mkey = "reject_task_key";
   void message.loading({ content: "打回评卷任务...", key: mkey });
-  const res = (await rejectInspectedTask(realStudentId, questions)) as any;
+  const res = await rejectInspectedTask(realStudentId, questions);
   if (res.data.success && store.currentTask) {
     store.currentTask = undefined;
     void message.success({ content: "打回成功", key: mkey, duration: 2 });

+ 1 - 2
src/features/student/studentTrack/StudentTrack.vue

@@ -15,7 +15,6 @@ import MarkHeader from "./MarkHeader.vue";
 import { useRoute } from "vue-router";
 import MarkBody from "../inspect/MarkBody.vue";
 import CommonMarkBody from "@/features/mark/CommonMarkBody.vue";
-import type { Task } from "@/types";
 import { message } from "ant-design-vue";
 import { getSingleStudentTask } from "@/api/studentTrackPage";
 import { getInspectedSetting } from "@/api/inspectPage";
@@ -52,7 +51,7 @@ async function updateTask() {
   });
 
   if (res.data.studentId) {
-    let rawTask = res.data as Task;
+    let rawTask = res.data;
     store.currentTask = addFileServerPrefixToTask(rawTask);
   } else {
     store.message = res.data.message;

+ 30 - 2
src/types/index.ts

@@ -2,6 +2,7 @@ export interface MarkStore {
   setting: Setting;
   groups: Array<Group>;
   status: {
+    valid: boolean; // 为false时不更新以下字段
     personCount: number; //个人评卷数量
     markedCount: number; //总评卷数量
     totalCount: number; //总数量
@@ -76,6 +77,13 @@ export interface AdminPageSetting {
   splitConfig: Array<number>; //使用裁切整图时的裁切配置 [0,1]|[0,0.3,0.25,0.55],
 }
 
+export interface AdminPageSettingForImport extends AdminPageSetting {
+  studentIds: number[];
+  tagIds: number[];
+  inspectCount: number;
+  message: string;
+}
+
 export enum ModeEnum {
   TRACK = "TRACK",
   COMMON = "COMMON",
@@ -89,7 +97,7 @@ interface SingleSheetConfig {
   y: number; // y 左上角为 (0, 0)
 }
 
-interface Group {
+export interface Group {
   markerId: number;
   number: number;
   title: string;
@@ -104,7 +112,14 @@ export interface Task {
   studentName: string; //后端处理是否显示
   studentCode: string;
   examNumber: string;
-  // subject: { name: string; code: string };
+  subject?: {
+    // 一般不要用此处的subject,优先用setting.subject
+    name: string;
+    code: string;
+    answerUrl: string;
+    paperUrl: string;
+    questions: Array<RichTextQuestion>;
+  };
   sliceUrls: Array<string>; //裁切图url
   sliceConfig: Array<PictureSlice>; //最高显示优先级
   jsonUrl: string; // sliceUrls为空,则是多媒体阅卷,显示JSON
@@ -239,6 +254,14 @@ export interface getHistory {
   (historyQuery: HistoryQueryParams): any;
 }
 
+// 仲裁用:评卷明细
+export interface MarkDetail {
+  markerName: string;
+  markerTime: number;
+  totalScore: number;
+  scoreList: string;
+}
+
 export interface RichTextQuestion {
   unionOrder: string; // 题目的综合题号 1-2-4
   body: RichTextJSON;
@@ -264,3 +287,8 @@ export interface RichTextBlockJSON {
     height: string;
   } | null;
 }
+
+export interface CommonResponse {
+  success: boolean; // 请求是否成功
+  message: string; // 错误消息
+}