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 };