Browse Source

各地区登录数据的三个表格接口对接完成;

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

24
src/api/platformData.js

@ -108,3 +108,27 @@ export function getUserLoginTrend(params) {
data: formData data: formData
}) })
} }
// 获取各地区登录活跃数据
export function getRegionActiveData(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);
// identity: 0:全部 1:会员 2:非网 (可不传,默认全部)
if (params.identity !== undefined) formData.append('identity', params.identity);
}
return request({
url: 'http://d9a962ee.natappfree.cc/admin/user/login/statistics/regionActiveData',
method: 'post',
headers: {
'token': localStorage.getItem('token'),
'client': 'ios',
'version': '1',
'Content-Type': 'multipart/form-data'
},
data: formData
})
}

81
src/views/PlatformData/UserLoginStats.vue

@ -146,8 +146,8 @@
end-placeholder="结束时间" end-placeholder="结束时间"
size="default" size="default"
/> />
<el-button type="primary" class="search-btn">搜索</el-button>
<el-button type="primary" class="reset-btn">重置</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="danger" class="export-btn">数据导出</el-button> <el-button type="danger" class="export-btn">数据导出</el-button>
</div> </div>
@ -223,7 +223,7 @@
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 } from '../../api/platformData';
import { getUserLoginList, getUserLoginTrend, getRegionActiveData } from '../../api/platformData';
const route = useRoute(); const route = useRoute();
const router = useRouter(); const router = useRouter();
@ -241,6 +241,11 @@ const chartRegionPieRef = ref(null);
const chartRegionMemberPieRef = ref(null); const chartRegionMemberPieRef = ref(null);
const chartRegionNonMemberPieRef = ref(null); const chartRegionNonMemberPieRef = ref(null);
//
const regionalTableData1 = ref([]);
const regionalTableData2 = ref([]);
const regionalTableData3 = ref([]);
// //
const initQueryParams = () => { const initQueryParams = () => {
const { start_time, end_time, region } = route.query; const { start_time, end_time, region } = route.query;
@ -425,6 +430,58 @@ const handleReset = () => {
fetchLoginData(); fetchLoginData();
}; };
const fetchRegionActiveData = 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 [resAll, resMember, resNormal] = await Promise.all([
getRegionActiveData({ ...params, identity: 0 }),
getRegionActiveData({ ...params, identity: 1 }),
getRegionActiveData({ ...params, identity: 2 })
]);
console.log("获取地区活跃数据响应:", { resAll, resMember, resNormal });
const processData = (res) => {
//
const data = res.region_active_data ? res : (res.data && res.data.region_active_data ? res.data : null);
if (data && data.region_active_data) {
return data.region_active_data.map(item => ({
region: item.region,
dailyActive: item.daily_active_user,
weeklyActive: item.weekly_active_user,
monthlyActive: item.monthly_active_user,
periodActive: item.range_active_user,
percent: item.active_rate + '%'
}));
}
return [];
};
regionalTableData1.value = processData(resAll);
regionalTableData2.value = processData(resMember);
regionalTableData3.value = processData(resNormal);
} catch (e) {
console.error('获取地区活跃数据失败:', e);
}
};
const handleSearchRegion = () => {
fetchRegionActiveData();
};
const handleResetRegion = () => {
dateRangeRegion.value = '';
searchRegion.value = '';
fetchRegionActiveData();
};
// Tab 1 // Tab 1
const loginTableData1 = [ const loginTableData1 = [
{ channel: 'App Store', total: '154,832', dailyNew: '', percent: '38%' }, { channel: 'App Store', total: '154,832', dailyNew: '', percent: '38%' },
@ -450,21 +507,7 @@ const loginTableData3 = [
{ channel: '总计', total: '3,096', dailyNew: '', rate: '100%' }, { channel: '总计', total: '3,096', dailyNew: '', rate: '100%' },
]; ];
// Tab 2
const regionalTableData1 = [
{ region: '香港', dailyActive: '1,245', weeklyActive: '1,245', monthlyActive: '1,245', periodActive: '', percent: '38%' },
{ region: '新加坡', dailyActive: '987', weeklyActive: '987', monthlyActive: '807', periodActive: '', percent: '30%' },
{ region: '泰国', dailyActive: '543', weeklyActive: '543', monthlyActive: '543', periodActive: '', percent: '17%' },
{ region: '越南', dailyActive: '321', weeklyActive: '321', monthlyActive: '321', periodActive: '', percent: '10%' },
{ region: '马来西亚', dailyActive: '321', weeklyActive: '321', monthlyActive: '321', periodActive: '', percent: '10%' },
{ region: '加拿大', dailyActive: '321', weeklyActive: '321', monthlyActive: '321', periodActive: '', percent: '10%' },
{ region: '其他', dailyActive: '321', weeklyActive: '321', monthlyActive: '321', periodActive: '', percent: '10%' },
{ region: '总计', dailyActive: '3,096', weeklyActive: '3,096', monthlyActive: '3,096', periodActive: '', percent: '100%' },
];
const regionalTableData2 = JSON.parse(JSON.stringify(regionalTableData1)); //
const regionalTableData3 = JSON.parse(JSON.stringify(regionalTableData1)); //
// Tab 2 regionalTableData1, 2, 3 fetchRegionActiveData
const headerCellStyle = { const headerCellStyle = {
background: '#fff0f0', background: '#fff0f0',
color: '#333', color: '#333',
@ -479,7 +522,9 @@ const initCharts = () => {
// fetchTrendData -> updateTrendChart // fetchTrendData -> updateTrendChart
// fetchTrendData // fetchTrendData
fetchTrendData(); fetchTrendData();
fetchLoginData();
} else if (activeTab.value === 'regionalData') { } else if (activeTab.value === 'regionalData') {
fetchRegionActiveData();
// //
if (chartRegionBarRef.value) { if (chartRegionBarRef.value) {
const chart = echarts.init(chartRegionBarRef.value); const chart = echarts.init(chartRegionBarRef.value);

Loading…
Cancel
Save