StudentTrack.vue 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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 { store } from "./store";
  12. import MarkHeader from "./MarkHeader.vue";
  13. import { useRoute } from "vue-router";
  14. import MarkBody from "./MarkBody.vue";
  15. import type { Task } from "@/types";
  16. import { message } from "ant-design-vue";
  17. import { getSingleStudentTask } from "@/api/studentTrackPage";
  18. const route = useRoute();
  19. let studentId = route.query.studentId;
  20. async function updateTask() {
  21. // const mkey = "fetch_task_key";
  22. message.info({ content: "获取任务中...", duration: 2 });
  23. let res = await getSingleStuTask();
  24. // message.success({ content: "获取成功", key: mkey });
  25. if (res.data.sliceUrls) {
  26. store.setting.fileServer = res.data.fileServer;
  27. store.setting.uiSetting = {
  28. "answer.paper.scale": 1,
  29. "score.board.collapse": false,
  30. };
  31. let task = {} as Task;
  32. task.examNumber = res.data.examNumber;
  33. task.sliceUrls = res.data.sliceUrls.map(
  34. (s: string) => store.setting.fileServer + s
  35. );
  36. // 目前api并没有区分score和tag
  37. task.questionList = [
  38. // @ts-ignore
  39. // { trackList: res.data.tagList.filter((q) => !q.tagName) },
  40. ];
  41. // @ts-ignore
  42. task.specialTagList = res.data.tagList.filter((q) => q.tagName);
  43. store.currentTask = task;
  44. if (store.currentTask) store.setting.subject = store.currentTask.subject;
  45. } else {
  46. store.message = res.data.message;
  47. }
  48. }
  49. async function fetchTask() {
  50. await updateTask();
  51. }
  52. onMounted(async () => {
  53. await fetchTask();
  54. });
  55. async function getSingleStuTask() {
  56. return getSingleStudentTask(studentId as string);
  57. }
  58. const renderError = () => {
  59. store.currentTask = undefined;
  60. store.message = "加载失败,请重新加载。";
  61. };
  62. </script>
  63. <style scoped>
  64. .my-container {
  65. width: 100%;
  66. }
  67. a {
  68. color: #42b983;
  69. }
  70. label {
  71. margin: 0 0.5em;
  72. font-weight: bold;
  73. }
  74. code {
  75. background-color: #eee;
  76. padding: 2px 4px;
  77. border-radius: 4px;
  78. color: #304455;
  79. }
  80. </style>