From a30867bf80ebd3f9ec3d769e129bacbd056ef093 Mon Sep 17 00:00:00 2001 From: songjie Date: Sun, 25 Jan 2026 16:13:20 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=B9=E6=8E=A5=E7=94=A8=E6=88=B7=E7=B1=BB?= =?UTF-8?q?=E7=99=BB=E5=BD=95=E7=BB=9F=E8=AE=A1-=E5=90=84=E5=9C=B0?= =?UTF-8?q?=E5=8C=BA=E7=99=BB=E5=BD=95=E6=95=B0=E6=8D=AE=E7=9A=84=E4=B8=89?= =?UTF-8?q?=E4=B8=AA=E8=A1=A8=E6=A0=BC=E7=9A=84=E5=AF=BC=E5=87=BA=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E5=AE=8C=E6=88=90=EF=BC=88=E5=A2=9E=E5=8A=A0=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E6=94=AF=E6=8C=81=E4=BA=8C=E8=BF=9B=E5=88=B6=EF=BC=89?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/platformData.js | 23 ++++++++++++++++++ src/views/PlatformData/UserLoginStats.vue | 40 +++++++++++++++++++++++++++++-- 2 files changed, 61 insertions(+), 2 deletions(-) diff --git a/src/api/platformData.js b/src/api/platformData.js index acab3b7..5dd33e0 100644 --- a/src/api/platformData.js +++ b/src/api/platformData.js @@ -248,6 +248,29 @@ export function getRegionUserDistribution(params) { }) } +// 导出各地区登录活跃数据 +export function exportRegionActiveData(params) { + const formData = new FormData(); + formData.append('token', localStorage.getItem('token')); + if (params) { + if (params.start_time) formData.append('start_time', params.start_time); + if (params.end_time) formData.append('end_time', params.end_time); + } + + return request({ + url: 'http://d9a962ee.natappfree.cc/admin/user/login/statistics/export', + method: 'post', + headers: { + 'token': localStorage.getItem('token'), + 'client': 'ios', + 'version': '1', + 'Content-Type': 'multipart/form-data' + }, + data: formData, + responseType: 'blob' // 设置响应类型为二进制流 + }) +} + // 获取DeepChart用户活跃度趋势 export function getUserDeepChartTrend(params) { const formData = new FormData(); diff --git a/src/views/PlatformData/UserLoginStats.vue b/src/views/PlatformData/UserLoginStats.vue index 7b2b0a0..afb2216 100644 --- a/src/views/PlatformData/UserLoginStats.vue +++ b/src/views/PlatformData/UserLoginStats.vue @@ -148,7 +148,7 @@ /> 搜索 重置 - 数据导出 + 数据导出 @@ -223,7 +223,8 @@ import { ref, onMounted, nextTick, watch } from 'vue'; import { useRoute, useRouter } from 'vue-router'; import * as echarts from 'echarts'; -import { getUserLoginList, getUserLoginTrend, getRegionActiveData, getRegionActiveDataHistogram, getUserLoginChannel, getUserLoginChannelMember, getUserLoginChannelNoMember, getRegionUserDistribution } from '../../api/platformData'; +import { getUserLoginList, getUserLoginTrend, getRegionActiveData, getRegionActiveDataHistogram, getUserLoginChannel, getUserLoginChannelMember, getUserLoginChannelNoMember, getRegionUserDistribution, exportRegionActiveData } from '../../api/platformData'; +import { ElMessage } from 'element-plus'; const route = useRoute(); const router = useRouter(); @@ -812,6 +813,41 @@ const updatePieChart = (chartRef, chartInstance, data) => { instance.setOption(option); }; +const handleExportRegion = async () => { + let params = {}; + if (dateRangeRegion.value && dateRangeRegion.value.length === 2) { + params.start_time = formatDate(dateRangeRegion.value[0]); + params.end_time = formatDate(dateRangeRegion.value[1]); + } + + try { + const res = await exportRegionActiveData(params); + console.log("导出地区活跃数据响应(Blob):", res); + + // 创建Blob对象,处理二进制流下载 + const blob = new Blob([res], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }); + const url = window.URL.createObjectURL(blob); + const link = document.createElement('a'); + link.href = url; + + // 设置下载文件名,添加时间戳防止重名 + const fileName = `各地区登录活跃数据_${formatDate(new Date())}.xlsx`; + link.setAttribute('download', fileName); + + document.body.appendChild(link); + link.click(); + + // 清理资源 + document.body.removeChild(link); + window.URL.revokeObjectURL(url); + + ElMessage.success('导出成功'); + } catch (e) { + console.error('导出地区活跃数据失败:', e); + ElMessage.error('导出请求发生错误'); + } +}; + const handleSearchRegion = () => { // 更新 URL 参数 const query = { ...route.query };