book-export-log.vue 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  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.exportStatus != 3 || row.cleanStatus == 1"
  30. @click="handleDownload(row)"
  31. class="ml-4"
  32. >[下载]</el-button
  33. >
  34. <el-button
  35. type="danger"
  36. link
  37. @click="handleReset"
  38. :disabled="row.exportStatus == 1"
  39. >[删除]</el-button
  40. >
  41. </template>
  42. </common-table>
  43. <template #footer>
  44. <el-button @click="handleCancel">关闭</el-button>
  45. </template>
  46. </ele-modal>
  47. </template>
  48. <script setup>
  49. import { ref, reactive, nextTick } from 'vue';
  50. import request from '@/utils/request';
  51. import CommonTable from '@/components/CommonPage/CommonTable.vue';
  52. import ProDatePicker from '@/components/CommonPage/ProDatePicker.vue';
  53. import { download, toFormData, checkDownloadRes } from '@/utils/common';
  54. const searchData = ref({ createTimeStart: '', createTimeEnd: '' });
  55. const pageRef = ref(null);
  56. function reload() {
  57. console.log('reload', searchData.value);
  58. pageRef.value?.reload(searchData.value);
  59. }
  60. function handleReset() {
  61. searchData.value.createTimeStart = '';
  62. searchData.value.createTimeEnd = '';
  63. reload();
  64. }
  65. /** 弹窗是否打开 */
  66. const visible = defineModel({ type: Boolean });
  67. /** 关闭弹窗 */
  68. const handleCancel = () => {
  69. visible.value = false;
  70. };
  71. /** 弹窗打开事件 */
  72. const handleOpen = () => {
  73. visible.value = true;
  74. };
  75. let statusKeys = ['', '处理中', '失败', '成功'];
  76. // cleanStatus 文件清理状态 0未清理 1已清理
  77. /** 表格列配置 */
  78. const columns = ref([
  79. { label: '申请时间', prop: 'createTime', align: 'center', width: 180 },
  80. { label: '条数', prop: 'dataCount', align: 'center', width: 90 },
  81. { label: '操作员', prop: 'createName', align: 'center' },
  82. {
  83. label: '处理状态',
  84. prop: 'exportStatus',
  85. align: 'center',
  86. formatter: (row) => statusKeys[row.exportStatus],
  87. width: 90
  88. },
  89. {
  90. label: '上次下载时间',
  91. prop: 'downloadTime',
  92. align: 'center',
  93. width: 180
  94. },
  95. { label: '下载次数', prop: 'downloadNum', align: 'center', width: 90 },
  96. {
  97. columnKey: 'action',
  98. label: '操作',
  99. width: 150,
  100. align: 'center',
  101. slot: 'action'
  102. }
  103. ]);
  104. const pageConfig = reactive({
  105. pageUrl: '/common/exportrecord/pagelist',
  106. fileName: '操作记录',
  107. cacheKey: 'data-operation-log',
  108. params: { logType: 1 }
  109. });
  110. async function handleDownload(row) {
  111. const res = await request({
  112. url: '/common/exportrecord/downLoadFile?id=' + row.id,
  113. method: 'get',
  114. responseType: 'blob'
  115. });
  116. await checkDownloadRes(res);
  117. download(res.data, row.fileName);
  118. }
  119. defineExpose({
  120. handleOpen
  121. });
  122. </script>