StudentTrack.vue 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  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 "../store";
  12. import MarkHeader from "./MarkHeader.vue";
  13. import { useRoute } from "vue-router";
  14. import MarkBody from "../inspect/MarkBody.vue";
  15. import type { Task } 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.subject = settingRes.data.subject;
  28. store.setting.userName = settingRes.data.userName;
  29. store.setting.uiSetting = {
  30. "answer.paper.scale": 1,
  31. "score.board.collapse": false,
  32. };
  33. store.setting.splitConfig = settingRes.data.splitConfig;
  34. if (store.setting.subject?.paperUrl) {
  35. store.setting.subject.paperUrl =
  36. store.setting.fileServer + store.setting.subject?.paperUrl;
  37. if (!isScanImage()) {
  38. await getPaper(store);
  39. }
  40. }
  41. }
  42. async function updateTask() {
  43. // const mkey = "fetch_task_key";
  44. message.info({ content: "获取任务中...", duration: 2 });
  45. let res = await getSingleStuTask();
  46. // message.success({ content: "获取成功", key: mkey });
  47. if (res.data.sliceUrls) {
  48. store.setting.fileServer = res.data.fileServer;
  49. store.setting.uiSetting = {
  50. "answer.paper.scale": 1,
  51. "score.board.collapse": false,
  52. };
  53. let task = {} as Task;
  54. task.examNumber = res.data.examNumber;
  55. task.sliceUrls = res.data.sliceUrls.map(
  56. (s: string) => store.setting.fileServer + s
  57. );
  58. // 目前api并没有区分score和tag
  59. task.questionList = [
  60. // @ts-ignore
  61. // { trackList: res.data.tagList.filter((q) => !q.tagName) },
  62. ];
  63. // @ts-ignore
  64. task.specialTagList = res.data.tagList.filter((q) => q.tagName);
  65. store.currentTask = task;
  66. } else {
  67. store.message = res.data.message;
  68. }
  69. }
  70. async function fetchTask() {
  71. await updateTask();
  72. }
  73. onMounted(async () => {
  74. await updateSetting();
  75. await fetchTask();
  76. });
  77. async function getSingleStuTask() {
  78. return getSingleStudentTask(studentId as string);
  79. }
  80. const renderError = () => {
  81. store.currentTask = undefined;
  82. store.message = "加载失败,请重新加载。";
  83. };
  84. </script>
  85. <style scoped>
  86. .my-container {
  87. width: 100%;
  88. }
  89. </style>