|
|
|
@ -106,7 +106,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="handleExport">数据导出</el-button> |
|
|
|
</div> |
|
|
|
|
|
|
|
<!-- 表格1: 用户构成明细 --> |
|
|
|
@ -185,7 +185,8 @@ |
|
|
|
import { ref, onMounted, nextTick, watch, computed } from 'vue'; |
|
|
|
import { useRoute, useRouter } from 'vue-router'; |
|
|
|
import * as echarts from 'echarts'; |
|
|
|
import { getUserOverviewList, getUserFullReportList } from '../../api/platformData'; |
|
|
|
import { getUserOverviewList, getUserFullReportList, exportUserFullReport } from '../../api/platformData'; |
|
|
|
import { ElMessage } from 'element-plus'; |
|
|
|
|
|
|
|
const route = useRoute(); |
|
|
|
const router = useRouter(); |
|
|
|
@ -342,6 +343,33 @@ const handleReset = () => { |
|
|
|
fetchDetailData(); |
|
|
|
}; |
|
|
|
|
|
|
|
const handleExport = 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]); |
|
|
|
} |
|
|
|
|
|
|
|
try { |
|
|
|
const res = await exportUserFullReport(params); |
|
|
|
// Blob 处理 |
|
|
|
const blob = new Blob([res]); |
|
|
|
const fileName = '用户数据明细.pdf'; |
|
|
|
const link = document.createElement('a'); |
|
|
|
link.href = window.URL.createObjectURL(blob); |
|
|
|
link.download = fileName; |
|
|
|
link.click(); |
|
|
|
window.URL.revokeObjectURL(link.href); |
|
|
|
ElMessage.success('导出成功'); |
|
|
|
} catch (e) { |
|
|
|
console.error('导出失败:', e); |
|
|
|
ElMessage.error('导出失败'); |
|
|
|
} finally { |
|
|
|
loading.value = false; |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
const initCharts = () => { |
|
|
|
if (activeTab.value === 'overview') { |
|
|
|
nextTick(() => { |
|
|
|
|