DbfExport.vue 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. <template>
  2. <div class="m-b-16px">
  3. <a-button type="primary" @click="onSetSiteCode">
  4. <template #icon><SettingOutlined /></template>设置扫描点代码
  5. </a-button>
  6. <a-tag
  7. v-if="siteCodeData.scanSite"
  8. class="m-l-12px ant-tag-big"
  9. color="blue"
  10. >扫描点代码:{{ siteCodeData.scanSite }}</a-tag
  11. >
  12. </div>
  13. <a-table
  14. :columns="columns"
  15. :row-key="(record) => record.subjectCode"
  16. :data-source="dataList"
  17. :pagination="false"
  18. :loading="loading"
  19. bordered
  20. >
  21. <template #bodyCell="{ column, index }">
  22. <template v-if="column.dataIndex === 'operation'">
  23. <qm-button type="link" @click="onExportAnswer(index)"
  24. >导出扫描答案DBF</qm-button
  25. >
  26. <qm-button type="link" @click="onExportPackage(index)"
  27. >导出打包DBF</qm-button
  28. >
  29. </template>
  30. </template>
  31. </a-table>
  32. <!-- ModifySiteCode -->
  33. <ModifySiteCode
  34. ref="modifySiteCodeRef"
  35. :row-data="siteCodeData"
  36. @modified="siteCodeModified"
  37. />
  38. <!-- TaskProgressDialog -->
  39. <TaskProgressDialog
  40. ref="taskProgressDialogRef"
  41. :task="curExportTask"
  42. :download-handle="downloadTaskFile"
  43. />
  44. </template>
  45. <script setup lang="ts">
  46. import { ref, onMounted } from "vue";
  47. import { SettingOutlined } from "@ant-design/icons-vue";
  48. import type { TableProps } from "ant-design-vue";
  49. import { message } from "ant-design-vue";
  50. import { SubjectItem } from "@/ap/types/base";
  51. import { getSubjectList } from "@/ap/base";
  52. import {
  53. markSiteCodeInfo,
  54. dbfAnswerExport,
  55. dbfPackageExport,
  56. dbfExportTaskDownload,
  57. } from "@/ap/resultExport";
  58. import { markSiteSetParams } from "@/ap/types/resultExport";
  59. import { useUserStore } from "@/store";
  60. import ModifySiteCode from "./ModifySiteCode.vue";
  61. import TaskProgressDialog from "./TaskProgressDialog.vue";
  62. defineOptions({
  63. name: "DbfExport",
  64. });
  65. const userStore = useUserStore();
  66. const loading = ref(false);
  67. const dataList = ref<SubjectItem[]>([]);
  68. const curExportTask = ref({ id: "", name: "" });
  69. const columns: TableProps["columns"] = [
  70. {
  71. title: "科目代码",
  72. dataIndex: "code",
  73. },
  74. {
  75. title: "科目名称",
  76. dataIndex: "name",
  77. },
  78. {
  79. title: "操作",
  80. dataIndex: "operation",
  81. width: "240px",
  82. customCell: () => {
  83. return {
  84. class: "operation-cell",
  85. };
  86. },
  87. },
  88. ];
  89. const siteCodeData = ref({} as markSiteSetParams);
  90. async function getScanSiteCode() {
  91. const res = await markSiteCodeInfo({ examId: userStore.curExam.id });
  92. siteCodeData.value = { scanSite: res, examId: userStore.curExam.id };
  93. }
  94. const modifySiteCodeRef = ref();
  95. function onSetSiteCode() {
  96. modifySiteCodeRef.value?.open();
  97. }
  98. function siteCodeModified(data: markSiteSetParams) {
  99. siteCodeData.value = data;
  100. }
  101. async function getData() {
  102. const res = await getSubjectList({ examId: userStore.curExam.id });
  103. dataList.value = res || [];
  104. }
  105. const taskProgressDialogRef = ref();
  106. async function onExportAnswer(index: number) {
  107. const record = dataList.value[index];
  108. const res = await dbfAnswerExport({
  109. examId: userStore.curExam.id,
  110. subjectCode: record.code,
  111. });
  112. curExportTask.value = {
  113. id: res.taskId,
  114. name: "扫描答案DBF",
  115. };
  116. taskProgressDialogRef.value?.open();
  117. }
  118. async function onExportPackage(index: number) {
  119. const record = dataList.value[index];
  120. const res = await dbfPackageExport({
  121. examId: userStore.curExam.id,
  122. subjectCode: record.code,
  123. });
  124. curExportTask.value = { id: res.taskId, name: "打包DBF" };
  125. taskProgressDialogRef.value?.open();
  126. }
  127. async function downloadTaskFile() {
  128. const res = await dbfExportTaskDownload(curExportTask.value.id).catch(
  129. () => false
  130. );
  131. if (!res) return;
  132. message.success("文件下载成功!");
  133. }
  134. onMounted(() => {
  135. getScanSiteCode();
  136. getData();
  137. });
  138. </script>