StudentTrack.vue 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. <template>
  2. <div class="my-container">
  3. <mark-header />
  4. <div class="tw-flex tw-gap-1">
  5. <mark-body v-if="store.isScanImage" @error="renderError" />
  6. <CommonMarkBody
  7. v-else
  8. :use-mark-result="false"
  9. :store="store"
  10. :make-track="() => {}"
  11. @error="renderError"
  12. />
  13. </div>
  14. </div>
  15. </template>
  16. <script setup lang="ts">
  17. import { onMounted } from "vue";
  18. import { store } from "@/store/store";
  19. import MarkHeader from "./MarkHeader.vue";
  20. import { useRoute } from "vue-router";
  21. import MarkBody from "../inspect/MarkBody.vue";
  22. import CommonMarkBody from "@/features/mark/CommonMarkBody.vue";
  23. import type { Task } from "@/types";
  24. import { message } from "ant-design-vue";
  25. import { getSingleStudentTask } from "@/api/studentTrackPage";
  26. import { getInspectedSetting } from "@/api/inspectPage";
  27. import { getPaper } from "@/api/jsonMark";
  28. import { addFileServerPrefixToTask } from "@/utils/utils";
  29. const route = useRoute();
  30. let studentId = route.query.studentId;
  31. let subjectCode = route.query.subjectCode as string;
  32. async function updateSetting() {
  33. const settingRes = await getInspectedSetting(subjectCode);
  34. const { examType, fileServer, subject, userName, splitConfig } =
  35. settingRes.data;
  36. store.initSetting({
  37. examType,
  38. fileServer,
  39. subject,
  40. userName,
  41. splitConfig,
  42. });
  43. if (store.setting.subject?.paperUrl && store.isMultiMedia) {
  44. await getPaper(store);
  45. }
  46. }
  47. async function updateTask() {
  48. const mkey = "fetch_task_key";
  49. void message.info({ content: "获取任务中...", duration: 1.5, key: mkey });
  50. let res = await getSingleStuTask();
  51. void message.success({
  52. content: res.data.studentId ? "获取成功" : "无任务",
  53. key: mkey,
  54. });
  55. if (res.data.studentId) {
  56. let rawTask = res.data as Task;
  57. store.currentTask = addFileServerPrefixToTask(rawTask);
  58. } else {
  59. store.message = res.data.message;
  60. }
  61. }
  62. async function fetchTask() {
  63. await updateTask();
  64. }
  65. onMounted(async () => {
  66. await updateSetting();
  67. await fetchTask();
  68. });
  69. async function getSingleStuTask() {
  70. return getSingleStudentTask(studentId as string);
  71. }
  72. const renderError = () => {
  73. store.currentTask = undefined;
  74. store.message = "加载失败,请重新加载。";
  75. };
  76. </script>
  77. <style scoped>
  78. .my-container {
  79. width: 100%;
  80. }
  81. </style>