diff --git a/src/api/platformData.js b/src/api/platformData.js index c0fd908..8e88642 100644 --- a/src/api/platformData.js +++ b/src/api/platformData.js @@ -291,3 +291,49 @@ export function getRegionsList() { data: formData }) } + +// 导出DeepChart活跃用户明细 +export function exportDeepChartActiveUserList(params) { + const formData = new FormData(); + formData.append('token', localStorage.getItem('token')); + if (params) { + if (params.jwcode) formData.append('jwcode', params.jwcode); + if (params.region && params.region !== 'all') formData.append('region', params.region); + if (params.startTime) formData.append('startTime', params.startTime); + if (params.endTime) formData.append('endTime', params.endTime); + } + + return request({ + url: 'https://16866f84.r7.cpolar.top/admin/user/active/list/export', + method: 'post', + headers: { + 'token': localStorage.getItem('token'), + 'client': 'ios', + 'version': '1', + 'Content-Type': 'multipart/form-data' + }, + data: formData + }) +} + +// 获取导出列表 +export function getExportStatusList(params) { + const formData = new FormData(); + formData.append('token', localStorage.getItem('token')); + if (params) { + if (params.page) formData.append('page', params.page); + if (params.page_size) formData.append('page_size', params.page_size); + } + + return request({ + url: 'https://16866f84.r7.cpolar.top/admin/export/status/list', + method: 'post', + headers: { + 'token': localStorage.getItem('token'), + 'client': 'ios', + 'version': '1', + 'Content-Type': 'multipart/form-data' + }, + data: formData + }) +} diff --git a/src/views/PlatformData/UserActivityStats.vue b/src/views/PlatformData/UserActivityStats.vue index 5f96e3d..9bc6664 100644 --- a/src/views/PlatformData/UserActivityStats.vue +++ b/src/views/PlatformData/UserActivityStats.vue @@ -63,8 +63,8 @@ 搜索 重置 - 数据导出 - 查看导出列表 + 数据导出 + 查看导出列表 @@ -95,6 +95,51 @@ /> + + + + + + + + + + + + + + + +
+ +
+
@@ -102,7 +147,8 @@ import { ref, onMounted, nextTick, watch } from 'vue'; import { useRoute, useRouter } from 'vue-router'; import * as echarts from 'echarts'; -import { getUserDeepChartTrend, getDeepChartActiveUserList, getRegionsList } from '../../api/platformData'; +import { ElMessage } from 'element-plus'; +import { getUserDeepChartTrend, getDeepChartActiveUserList, getRegionsList, exportDeepChartActiveUserList, getExportStatusList } from '../../api/platformData'; const route = useRoute(); const router = useRouter(); @@ -270,6 +316,58 @@ const pageSize = ref(10); const total = ref(0); const regionOptions = ref([]); +// 导出列表相关 +const exportDialogVisible = ref(false); +const exportList = ref([]); +const exportListLoading = ref(false); +const exportCurrentPage = ref(1); +const exportPageSize = ref(10); +const exportTotal = ref(0); + +const handleShowExportList = () => { + exportDialogVisible.value = true; + exportCurrentPage.value = 1; + fetchExportList(); +}; + +const handleExportPageChange = (page) => { + exportCurrentPage.value = page; + fetchExportList(); +}; + +const fetchExportList = async () => { + exportListLoading.value = true; + try { + const params = { + page: exportCurrentPage.value, + page_size: exportPageSize.value + }; + const res = await getExportStatusList(params); + console.log("获取导出列表响应:", res); + const data = res.data || res; + + if (data && data.list) { + exportList.value = data.list.map((item, index) => ({ + ...item, + index: (exportCurrentPage.value - 1) * exportPageSize.value + index + 1 + })); + exportTotal.value = data.total || 0; + } else { + exportList.value = []; + exportTotal.value = 0; + } + } catch (e) { + console.error('获取导出列表失败:', e); + ElMessage.error('获取导出列表失败'); + } finally { + exportListLoading.value = false; + } +}; + +const handleDownload = (url) => { + window.open(url.trim(), '_blank'); +}; + // 获取地区列表 const fetchRegionOptions = async () => { try { @@ -311,6 +409,38 @@ const handleSizeChange = (size) => { fetchTableData(); }; +const handleExport = async () => { + const params = {}; + + if (tableAccount.value) params.jwcode = tableAccount.value; + if (tableRegion.value && tableRegion.value !== 'all') params.region = tableRegion.value; + + if (tableDateRange.value && tableDateRange.value.length === 2) { + params.startTime = formatDate(tableDateRange.value[0]); + params.endTime = formatDate(tableDateRange.value[1]); + } + + try { + const res = await exportDeepChartActiveUserList(params); + console.log("导出DeepChart活跃用户明细响应:", res); + + // 兼容处理:后端可能直接返回任务ID (数字),或者标准响应对象 + // res 即是返回数据中的data字段,res.code是无效的 + const isSuccess = (typeof res === 'number' && res > 0) || + (res && res.code === 200) || + (res && typeof res.data === 'number' && res.data > 0); + + if (isSuccess) { + ElMessage.success('导出任务已添加到队列,请稍后在“查看导出列表”中查看结果。'); + } else { + ElMessage.error((res && res.msg) || '导出请求失败'); + } + } catch (e) { + console.error('导出DeepChart活跃用户明细失败:', e); + ElMessage.error('导出请求发生错误'); + } +}; + const fetchTableData = async () => { const params = { page: currentPage.value,