book-import-log.vue 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. <!-- 编辑弹窗 -->
  2. <template>
  3. <ele-modal
  4. form
  5. :width="1160"
  6. v-model="visible"
  7. title="导出记录"
  8. @open="handleOpen"
  9. >
  10. <common-table
  11. ref="pageRef"
  12. :pageConfig="pageConfig"
  13. :columns="columns"
  14. :tools="false"
  15. >
  16. <template #toolbar>
  17. <ProDatePicker
  18. start-placeholder="导入时间(开始时间)"
  19. end-placeholder="导入时间(结束时间)"
  20. v-model="searchData"
  21. />
  22. <el-button type="primary" @click="reload" class="ml-4">查询</el-button>
  23. <el-button type="info" @click="handleReset">重置</el-button>
  24. </template>
  25. <template #action="{ row }">
  26. <el-button
  27. type="primary"
  28. link
  29. :disabled="row.cleanStatus === 1"
  30. @click="handleDownload(row)"
  31. class="ml-4"
  32. >[下载源文件]</el-button
  33. >
  34. </template>
  35. </common-table>
  36. <template #footer>
  37. <el-button @click="handleCancel">关闭</el-button>
  38. </template>
  39. </ele-modal>
  40. </template>
  41. <script setup>
  42. import { ref, reactive, nextTick } from 'vue';
  43. import request from '@/utils/request';
  44. import CommonTable from '@/components/CommonPage/CommonTable.vue';
  45. import ProDatePicker from '@/components/CommonPage/ProDatePicker.vue';
  46. import { download, toFormData, checkDownloadRes } from '@/utils/common';
  47. const searchData = ref({ createTimeStart: '', createTimeEnd: '' });
  48. const pageRef = ref(null);
  49. function reload() {
  50. console.log('reload', searchData.value);
  51. pageRef.value?.reload(searchData.value);
  52. }
  53. function handleReset() {
  54. searchData.value.createTimeStart = '';
  55. searchData.value.createTimeEnd = '';
  56. reload();
  57. }
  58. /** 弹窗是否打开 */
  59. const visible = defineModel({ type: Boolean });
  60. /** 关闭弹窗 */
  61. const handleCancel = () => {
  62. visible.value = false;
  63. };
  64. /** 弹窗打开事件 */
  65. const handleOpen = () => {
  66. visible.value = true;
  67. };
  68. let statusKeys = ['', '处理中', '失败', '成功'];
  69. // cleanStatus 文件清理状态 0未清理 1已清理
  70. /** 表格列配置 */
  71. const columns = ref([
  72. { label: '导入时间', prop: 'createTime', align: 'center', width: 180 },
  73. { label: '条数', prop: 'dataCount', align: 'center', width: 90 },
  74. { label: '操作员', prop: 'createName', align: 'center' },
  75. {
  76. label: '处理状态',
  77. prop: 'exportStatus',
  78. align: 'center',
  79. formatter: (row) => statusKeys[row.exportStatus],
  80. width: 90
  81. },
  82. {
  83. label: '上次下载时间',
  84. prop: 'downloadTime',
  85. align: 'center',
  86. width: 180
  87. },
  88. { label: '下载次数', prop: 'downloadNum', align: 'center', width: 90 },
  89. {
  90. columnKey: 'action',
  91. label: '操作',
  92. width: 150,
  93. align: 'center',
  94. slot: 'action'
  95. }
  96. ]);
  97. const pageConfig = reactive({
  98. pageUrl: '/common/exportrecord/pagelist',
  99. fileName: '操作记录',
  100. cacheKey: 'data-operation-log',
  101. params: { logType: 2 }
  102. });
  103. async function handleDownload(row) {
  104. const res = await request({
  105. url: '/common/exportrecord/downLoadFile?id=' + row.id,
  106. method: 'get',
  107. responseType: 'blob'
  108. });
  109. await checkDownloadRes(res);
  110. download(res.data, row.fileName);
  111. }
  112. defineExpose({
  113. handleOpen
  114. });
  115. </script>