From 6a7bed61fc0f985041c13b40496895f0c77b3362 Mon Sep 17 00:00:00 2001 From: maziyang Date: Thu, 26 Jun 2025 17:15:40 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=BC=E5=87=BA=E6=95=B0=E6=8D=AE=E6=8F=90?= =?UTF-8?q?=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/VoteDetail/VoteDetail.vue | 81 +++++++++++++++++++++---------------- src/views/test/test.vue | 4 +- 2 files changed, 48 insertions(+), 37 deletions(-) diff --git a/src/views/VoteDetail/VoteDetail.vue b/src/views/VoteDetail/VoteDetail.vue index 8854b03..0551f03 100644 --- a/src/views/VoteDetail/VoteDetail.vue +++ b/src/views/VoteDetail/VoteDetail.vue @@ -7,7 +7,7 @@ 搜索 - + 导出数据 @@ -41,14 +41,15 @@ import { useVoteDetailStore } from '@/stores/voteDetail' import { ref, onMounted, reactive } from 'vue' import { useRoute } from 'vue-router'; - +import { ElMessage } from 'element-plus' +const buttonLoading = ref(false) const route = useRoute(); // const voteId = ref(route.params.voteId); const voteInfo = reactive({ // voteId: Number(route.query.voteId), voteId: route.query.voteId, voteTitle: route.query.voteTitle, - articleTitle:route.query.articleTitle, + articleTitle: route.query.articleTitle, }) const tableData = ref([]) const totalCount = ref(0) @@ -105,41 +106,51 @@ const handleCurrentChange = async (newPage) => { } const exportDataFrontend = async () => { - let exportData = ref([]) - let params = reactive({ - voteId: voteInfo.voteId, - username: condition.username, - account: condition.account, - area: condition.area, - optionContent: condition.optionContent - }) - const res = await useVoteDetailStore().getExportVoteDetail(params) - exportData.value = res.data.data.voteList - let csvContent = "名字,精网号,地区,投票标题,文章/视频标题,选项,投票时间\n" - exportData.value.forEach(item => { - const row = [ - `"${item.username}"`, - `"${item.account}"`, - `"${item.area}"`, - `"${voteInfo.voteTitle}"`, - `"${voteInfo.articleTitle}"`, - `"${item.optionContents}"`, - `"${item.createTime}"` - ].join(',') - csvContent += row + '\n' - }) + buttonLoading.value = true + // ElMessage.info('开始导出,请稍候…') + try { + let exportData = ref([]) + let params = reactive({ + voteId: voteInfo.voteId, + username: condition.username, + account: condition.account, + area: condition.area, + optionContent: condition.optionContent + }) + const res = await useVoteDetailStore().getExportVoteDetail(params) + exportData.value = res.data.data.voteList + let csvContent = "名字,精网号,地区,投票标题,文章/视频标题,选项,投票时间\n" + exportData.value.forEach(item => { + const row = [ + `"${item.username}"`, + `"${item.account}"`, + `"${item.area}"`, + `"${voteInfo.voteTitle}"`, + `"${voteInfo.articleTitle}"`, + `"${item.optionContents}"`, + `"${item.createTime}"` + ].join(',') + csvContent += row + '\n' + }) + + const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' }) + const link = document.createElement('a') + const url = URL.createObjectURL(blob) - const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' }) - const link = document.createElement('a') - const url = URL.createObjectURL(blob) + link.setAttribute('href', url) + link.setAttribute('download', `投票详情_${new Date().toLocaleDateString()}.csv`) + link.style.visibility = 'hidden' - link.setAttribute('href', url) - link.setAttribute('download', `投票详情_${new Date().toLocaleDateString()}.csv`) - link.style.visibility = 'hidden' + document.body.appendChild(link) + link.click() + document.body.removeChild(link) + ElMessage.success('已生成文件并下载') + } catch (error) { + ElMessage.error('导出失败,请重试') + } finally { + buttonLoading.value = false + } - document.body.appendChild(link) - link.click() - document.body.removeChild(link) }