OfflineExam.vue 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. <script setup lang="ts">
  2. import { store } from "@/store/store";
  3. import { getAnswersUrlApi } from "@/api/offlineExam";
  4. import OfflineExamList from "./OfflineExamList.vue";
  5. import { onMounted } from "vue";
  6. import { downloadByUrl } from "@/utils/download";
  7. logger({
  8. cnl: ["local", "server"],
  9. pgn: "离线考试",
  10. act: "首次渲染",
  11. });
  12. // 获取答题纸链接
  13. let answerCardUrl: string = $ref("");
  14. async function getAnswersUrl() {
  15. const res = await getAnswersUrlApi(store.user.rootOrgId);
  16. answerCardUrl = res.data;
  17. }
  18. // 下载答题纸
  19. let loading = $ref(false);
  20. function toDownloadPaper() {
  21. logger({
  22. cnl: ["local", "server"],
  23. pgn: "离线考试",
  24. act: "下载答题卡",
  25. });
  26. downloadByUrl(answerCardUrl);
  27. loading = true;
  28. setTimeout(() => {
  29. loading = false;
  30. }, 10 * 1000);
  31. }
  32. onMounted(() => {
  33. void getAnswersUrl();
  34. });
  35. </script>
  36. <template>
  37. <div v-if="answerCardUrl" class="off-exam-card">
  38. <span>答题纸模板:</span>
  39. <n-button
  40. type="success"
  41. size="small"
  42. :disabled="loading"
  43. @click="toDownloadPaper"
  44. >下载</n-button
  45. >
  46. </div>
  47. <OfflineExamList />
  48. </template>
  49. <style scoped>
  50. .off-exam-card {
  51. height: 30px;
  52. margin-bottom: 30px;
  53. text-align: right;
  54. }
  55. </style>