MarkHistory.vue 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. <template>
  2. <div
  3. :style="{ display: store.historyOpen ? 'block' : 'none' }"
  4. class="history-container tw-px-1"
  5. >
  6. <div class="tw-p-1 tw-flex tw-justify-between tw-place-items-center">
  7. <div class="tw-text-xl">回评</div>
  8. <a-button
  9. class="tw-content-end"
  10. shape="circle"
  11. @click="store.historyOpen = false"
  12. >
  13. <template #icon><CloseOutlined /></template>
  14. </a-button>
  15. </div>
  16. <div class="tw-mt-1 tw-mb-1 tw-flex"></div>
  17. <div class="tw-flex tw-justify-between">
  18. <div>编号</div>
  19. <div>时间</div>
  20. <div>分数</div>
  21. </div>
  22. <a-spin :spinning="loading" size="large" tip="Loading...">
  23. <div v-for="(task, index) of store.historyTasks" :key="index">
  24. <div
  25. @click="replaceCurrentTask(task)"
  26. class="
  27. tw-flex
  28. tw-justify-between
  29. tw-h-6
  30. tw-place-items-center
  31. tw-rounded
  32. tw-cursor-pointer
  33. "
  34. :class="store.currentTask === task && 'current-task'"
  35. >
  36. <div>{{ task.secretNumber }}</div>
  37. <div>
  38. {{ task.inspectTime && $filters.datetimeFilter(task.inspectTime) }}
  39. </div>
  40. <div style="width: 30px; text-align: center">
  41. {{ task.markerScore }}
  42. </div>
  43. </div>
  44. </div>
  45. </a-spin>
  46. <div class="tw-flex tw-justify-between tw-place-content-center tw-mt-2">
  47. <a-button @click="previousPage">上一页</a-button>
  48. <div style="line-height: 30px">第{{ currentPage }}页</div>
  49. <a-button @click="nextPage">下一页</a-button>
  50. </div>
  51. </div>
  52. </template>
  53. <script lang="ts">
  54. import { getInspectedHistory } from "@/api/inspectPage";
  55. import { Task } from "@/types";
  56. import { defineComponent, ref, watch, watchEffect } from "vue";
  57. import { useRoute } from "vue-router";
  58. import { store } from "./store";
  59. import { CloseOutlined } from "@ant-design/icons-vue";
  60. import { cloneDeep } from "lodash";
  61. export default defineComponent({
  62. name: "MarkHistory",
  63. components: { CloseOutlined },
  64. props: {
  65. shouldReload: { type: Number, required: true },
  66. },
  67. emits: ["reload"],
  68. setup(props, { emit }) {
  69. const route = useRoute();
  70. const { subjectCode } = route.query as {
  71. subjectCode: string;
  72. };
  73. watchEffect(async () => {
  74. if (store.historyOpen) {
  75. replaceCurrentTask(undefined);
  76. await updateHistoryTask({});
  77. replaceCurrentTask(store.historyTasks[0]);
  78. } else {
  79. emit("reload");
  80. }
  81. });
  82. watch(
  83. () => props.shouldReload,
  84. async () => {
  85. await updateHistoryTask({ pageNumber: currentPage.value });
  86. // 提交后,渲染第一条
  87. replaceCurrentTask(store.historyTasks[0]);
  88. }
  89. );
  90. const secretNumberInput = ref(null);
  91. const loading = ref(false);
  92. const currentPage = ref(1);
  93. async function updateHistoryTask({
  94. pageNumber = 1,
  95. pageSize = 10,
  96. }: {
  97. pageNumber?: number; // 从1开始
  98. pageSize?: number;
  99. }) {
  100. loading.value = true;
  101. const res = await getInspectedHistory({
  102. pageNumber,
  103. pageSize,
  104. subjectCode,
  105. });
  106. loading.value = false;
  107. if (res.data) {
  108. let data = cloneDeep(res.data) as Array<Task>;
  109. data = data.map((t) => {
  110. t.sliceUrls = t.sliceUrls.map((s) => store.setting.fileServer + s);
  111. t.sheetUrls = t.sheetUrls?.map((s) => store.setting.fileServer + s);
  112. t.jsonUrl = store.setting.fileServer + t.jsonUrl;
  113. return t;
  114. });
  115. store.historyTasks = data;
  116. }
  117. }
  118. function replaceCurrentTask(task: Task | undefined) {
  119. store.currentTask = task;
  120. }
  121. function previousPage() {
  122. if (currentPage.value > 1) {
  123. currentPage.value -= 1;
  124. updateHistoryTask({ pageNumber: currentPage.value });
  125. }
  126. }
  127. function nextPage() {
  128. if (store.historyTasks.length >= 10) {
  129. currentPage.value += 1;
  130. updateHistoryTask({ pageNumber: currentPage.value });
  131. }
  132. }
  133. return {
  134. store,
  135. loading,
  136. secretNumberInput,
  137. updateHistoryTask,
  138. replaceCurrentTask,
  139. currentPage,
  140. previousPage,
  141. nextPage,
  142. };
  143. },
  144. });
  145. </script>
  146. <style scoped>
  147. .history-container {
  148. min-width: 250px;
  149. border-right: 1px solid grey;
  150. }
  151. .current-task {
  152. background-color: aqua;
  153. }
  154. </style>