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,