StudentTrack.vue 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. <template>
  2. <div class="my-container">
  3. <mark-header />
  4. <div class="tw-flex tw-gap-1">
  5. <mark-body @error="renderError" />
  6. </div>
  7. </div>
  8. </template>
  9. <script setup lang="ts">
  10. import { onMounted } from "vue";
  11. import { isScanImage, store } from "@/features/mark/store";
  12. import MarkHeader from "./MarkHeader.vue";
  13. import { useRoute } from "vue-router";
  14. import MarkBody from "../inspect/MarkBody.vue";
  15. import type { Task, Setting } from "@/types";
  16. import { message } from "ant-design-vue";
  17. import { getSingleStudentTask } from "@/api/studentTrackPage";
  18. import { getInspectedSetting } from "@/api/inspectPage";
  19. import { getPaper } from "@/api/jsonMark";
  20. const route = useRoute();
  21. let studentId = route.query.studentId;
  22. let subjectCode = route.query.subjectCode as string;
  23. async function updateSetting() {
  24. const settingRes = await getInspectedSetting(subjectCode);
  25. store.setting.examType = settingRes.data.examType;
  26. store.setting.fileServer = settingRes.data.fileServer;
  27. store.setting.userName = settingRes.data.userName;
  28. store.setting.uiSetting = {
  29. "answer.paper.scale": 1,
  30. "score.board.collapse": false,
  31. "normal.mode": "keyboard",
  32. } as Setting["uiSetting"];
  33. store.setting.splitConfig = settingRes.data.splitConfig;
  34. store.setting.subject = settingRes.data.subject;
  35. if (store.setting.subject?.answerUrl) {
  36. store.setting.subject.answerUrl =
  37. store.setting.fileServer + store.setting.subject?.answerUrl;
  38. }
  39. if (store.setting.subject?.paperUrl) {
  40. store.setting.subject.paperUrl =
  41. store.setting.fileServer + store.setting.subject?.paperUrl;
  42. if (!isScanImage()) {
  43. await getPaper(store);
  44. }
  45. }
  46. }
  47. async function updateTask() {
  48. // const mkey = "fetch_task_key";
  49. message.info({ content: "获取任务中...", duration: 2 });
  50. let res = await getSingleStuTask();
  51. // message.success({ content: "获取成功", key: mkey });
  52. // if (res.data.sliceUrls) {
  53. // store.setting.fileServer = res.data.fileServer;
  54. // store.setting.uiSetting = {
  55. // "answer.paper.scale": 1,
  56. // "score.board.collapse": false,
  57. // };
  58. // let task = {} as Task;
  59. // task.examNumber = res.data.examNumber;
  60. // task.sliceUrls = res.data.sliceUrls.map(
  61. // (s: string) => store.setting.fileServer + s
  62. // );
  63. // // 目前api并没有区分score和tag
  64. // task.questionList = [
  65. // // @ts-ignore
  66. // // { trackList: res.data.tagList.filter((q) => !q.tagName) },
  67. // ];
  68. // // @ts-ignore
  69. // task.specialTagList = res.data.tagList.filter((q) => q.tagName);
  70. // store.currentTask = task;
  71. if (res.data.studentId) {
  72. let rawTask = res.data as Task;
  73. rawTask.sliceUrls = rawTask.sliceUrls?.map(
  74. (s) => store.setting.fileServer + s
  75. );
  76. rawTask.sheetUrls = rawTask.sheetUrls?.map(
  77. (s) => store.setting.fileServer + s
  78. );
  79. rawTask.jsonUrl = store.setting.fileServer + rawTask.jsonUrl;
  80. store.currentTask = res.data;
  81. } else {
  82. store.message = res.data.message;
  83. }
  84. }
  85. async function fetchTask() {
  86. await updateTask();
  87. }
  88. onMounted(async () => {
  89. await updateSetting();
  90. await fetchTask();
  91. });
  92. async function getSingleStuTask() {
  93. return getSingleStudentTask(studentId as string);
  94. }
  95. const renderError = () => {
  96. store.currentTask = undefined;
  97. store.message = "加载失败,请重新加载。";
  98. };
  99. </script>
  100. <style scoped>
  101. .my-container {
  102. width: 100%;
  103. }
  104. </style>