MarkHistory.vue 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. <template>
  2. <div class="history-container tw-px-1">
  3. <div class="tw-p-1 tw-flex tw-justify-between tw-place-items-center">
  4. <div class="tw-text-xl">给分记录</div>
  5. </div>
  6. <div class="tw-mt-1 tw-mb-1 tw-flex"></div>
  7. <div class="tw-flex tw-justify-between">
  8. <div>编号</div>
  9. <div>时间</div>
  10. <div>分数</div>
  11. </div>
  12. <a-spin :spinning="loading" size="large" tip="Loading...">
  13. <div v-for="(task, index) of store.historyTasks" :key="index">
  14. <div
  15. @click="replaceCurrentTask(task)"
  16. class="
  17. tw-flex
  18. tw-justify-between
  19. tw-place-items-center
  20. tw-rounded
  21. tw-cursor-pointer
  22. "
  23. :class="store.currentTask === task && 'current-task'"
  24. >
  25. <div class="tw-break-words tw-w-1/3" :title="task.secretNumber">
  26. {{ task.secretNumber }}
  27. </div>
  28. <div>
  29. {{ task.markTime && $filters.datetimeFilter(task.markTime) }}
  30. </div>
  31. <div style="width: 30px; text-align: center">
  32. {{ task.markerScore }}
  33. </div>
  34. </div>
  35. </div>
  36. </a-spin>
  37. <div class="tw-flex tw-justify-between tw-place-content-center tw-mt-2">
  38. <a-button @click="previousPage">上一页</a-button>
  39. <div style="line-height: 30px">第{{ currentPage }}页</div>
  40. <a-button @click="nextPage">下一页</a-button>
  41. </div>
  42. </div>
  43. </template>
  44. <script setup lang="ts">
  45. import type { Task } from "@/types";
  46. import { ref, watchEffect } from "vue";
  47. import { useRoute } from "vue-router";
  48. import { store } from "@/features/mark/store";
  49. import { cloneDeep } from "lodash";
  50. import { getQualityHistory } from "@/api/qualityPage";
  51. const emit = defineEmits(["reload"]);
  52. const route = useRoute();
  53. const { markerId, markerScore } = route.query as {
  54. markerId: string;
  55. markerScore: string;
  56. };
  57. watchEffect(async () => {
  58. if (store.historyOpen) {
  59. replaceCurrentTask(undefined);
  60. await updateHistoryTask({});
  61. replaceCurrentTask(store.historyTasks[0]);
  62. } else {
  63. emit("reload");
  64. }
  65. });
  66. const loading = ref(false);
  67. const currentPage = ref(1);
  68. async function updateHistoryTask({
  69. pageNumber = 1,
  70. pageSize = 10,
  71. }: {
  72. pageNumber?: number; // 从1开始
  73. pageSize?: number;
  74. }) {
  75. loading.value = true;
  76. const res = await getQualityHistory({
  77. markerId,
  78. markerScore,
  79. pageNumber,
  80. pageSize,
  81. });
  82. loading.value = false;
  83. if (res.data) {
  84. let data = cloneDeep(res.data) as Array<Task>;
  85. data = data.map((t) => {
  86. t.sliceUrls = t.sliceUrls?.map((s) => store.setting.fileServer + s);
  87. t.sheetUrls = t.sheetUrls?.map((s) => store.setting.fileServer + s);
  88. t.jsonUrl = store.setting.fileServer + t.jsonUrl;
  89. return t;
  90. });
  91. store.historyTasks = data;
  92. replaceCurrentTask(store.historyTasks[0]);
  93. }
  94. }
  95. function replaceCurrentTask(task: Task | undefined) {
  96. store.currentTask = task;
  97. }
  98. function previousPage() {
  99. if (currentPage.value > 1) {
  100. currentPage.value -= 1;
  101. updateHistoryTask({ pageNumber: currentPage.value });
  102. }
  103. }
  104. function nextPage() {
  105. if (store.historyTasks.length >= 10) {
  106. currentPage.value += 1;
  107. updateHistoryTask({ pageNumber: currentPage.value });
  108. }
  109. }
  110. </script>
  111. <style scoped>
  112. .history-container {
  113. min-width: 250px;
  114. border-right: 1px solid grey;
  115. }
  116. .current-task {
  117. background-color: aqua;
  118. }
  119. </style>