Browse Source

对接用户类登录统计-各地区登录数据的三个表格的导出接口完成(增加类型支持二进制)。

zhaowenkang/feature-20260206140254-后台AI复盘二期
songjie 1 month ago
parent
commit
a30867bf80
  1. 23
      src/api/platformData.js
  2. 40
      src/views/PlatformData/UserLoginStats.vue

23
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用户活跃度趋势 // 获取DeepChart用户活跃度趋势
export function getUserDeepChartTrend(params) { export function getUserDeepChartTrend(params) {
const formData = new FormData(); const formData = new FormData();

40
src/views/PlatformData/UserLoginStats.vue

@ -148,7 +148,7 @@
/> />
<el-button type="primary" class="search-btn" @click="handleSearchRegion">搜索</el-button> <el-button type="primary" class="search-btn" @click="handleSearchRegion">搜索</el-button>
<el-button type="primary" class="reset-btn" @click="handleResetRegion">重置</el-button> <el-button type="primary" class="reset-btn" @click="handleResetRegion">重置</el-button>
<el-button type="danger" class="export-btn">数据导出</el-button>
<el-button type="danger" class="export-btn" @click="handleExportRegion">数据导出</el-button>
</div> </div>
<!-- 表格1: 各地区活跃数据 --> <!-- 表格1: 各地区活跃数据 -->
@ -223,7 +223,8 @@
import { ref, onMounted, nextTick, watch } from 'vue'; import { ref, onMounted, nextTick, watch } from 'vue';
import { useRoute, useRouter } from 'vue-router'; import { useRoute, useRouter } from 'vue-router';
import * as echarts from 'echarts'; 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 route = useRoute();
const router = useRouter(); const router = useRouter();
@ -812,6 +813,41 @@ const updatePieChart = (chartRef, chartInstance, data) => {
instance.setOption(option); 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 = () => { const handleSearchRegion = () => {
// URL // URL
const query = { ...route.query }; const query = { ...route.query };

Loading…
Cancel
Save