|
|
|
@ -43,7 +43,7 @@ |
|
|
|
/> |
|
|
|
<el-button type="primary" class="search-btn" @click="handleSearch">搜索</el-button> |
|
|
|
<el-button type="primary" class="reset-btn" @click="handleReset">重置</el-button> |
|
|
|
<el-button type="danger" class="export-btn">数据导出</el-button> |
|
|
|
<el-button type="danger" class="export-btn" @click="handleExportLogin">数据导出</el-button> |
|
|
|
</div> |
|
|
|
|
|
|
|
<!-- 统计卡片 --> |
|
|
|
@ -238,7 +238,7 @@ |
|
|
|
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, exportRegionActiveData, getRegionsList } from '../../api/platformData'; |
|
|
|
import { getUserLoginList, getUserLoginTrend, getRegionActiveData, getRegionActiveDataHistogram, getUserLoginChannel, getUserLoginChannelMember, getUserLoginChannelNoMember, getRegionUserDistribution, exportRegionActiveData, getRegionsList, exportUserLoginPDF } from '../../api/platformData'; |
|
|
|
import { ElMessage } from 'element-plus'; |
|
|
|
|
|
|
|
const route = useRoute(); |
|
|
|
@ -559,6 +559,48 @@ const fetchAllLoginData = async () => { |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
const handleExportLogin = async () => { |
|
|
|
loading.value = true; |
|
|
|
let params = {}; |
|
|
|
if (dateRange.value && dateRange.value.length === 2) { |
|
|
|
params.start_time = formatDate(dateRange.value[0]); |
|
|
|
params.end_time = formatDate(dateRange.value[1]); |
|
|
|
} |
|
|
|
|
|
|
|
if (selectedRegion.value && selectedRegion.value !== 'all') { |
|
|
|
params.region = selectedRegion.value; |
|
|
|
} |
|
|
|
|
|
|
|
try { |
|
|
|
const res = await exportUserLoginPDF(params); |
|
|
|
console.log("导出登录数据PDF响应(Blob):", res); |
|
|
|
|
|
|
|
// 创建Blob对象,处理二进制流下载 |
|
|
|
const blob = new Blob([res], { type: 'application/pdf' }); |
|
|
|
const url = window.URL.createObjectURL(blob); |
|
|
|
const link = document.createElement('a'); |
|
|
|
link.href = url; |
|
|
|
|
|
|
|
// 设置下载文件名,添加时间戳防止重名 |
|
|
|
const fileName = `用户登录数据_${formatDate(new Date())}.pdf`; |
|
|
|
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('导出请求发生错误'); |
|
|
|
} finally { |
|
|
|
loading.value = false; |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
const handleSearch = () => { |
|
|
|
// 更新 URL 参数 |
|
|
|
const query = { ...route.query }; |
|
|
|
|