Browse Source

用户类登录统计的登录数据列表对接完成;

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

23
src/api/platformData.js

@ -62,3 +62,26 @@ export function exportUserFullReport(params) {
responseType: 'blob' // Important for file download responseType: 'blob' // Important for file download
}) })
} }
// 获取用户登录数据列表
export function getUserLoginList(params) {
const formData = new FormData();
formData.append('token', localStorage.getItem('token'));
if (params) {
if (params.region) formData.append('region', params.region);
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://7a1b8c9e.r40.cpolar.top/admin/user/login/list',
method: 'post',
headers: {
'token': localStorage.getItem('token'),
'client': 'ios',
'version': '1',
'Content-Type': 'multipart/form-data'
},
data: formData
})
}

64
src/views/PlatformData/UserLoginStats.vue

@ -50,9 +50,9 @@
<el-icon><UserFilled /></el-icon> <el-icon><UserFilled /></el-icon>
</div> </div>
<div class="big-card-content"> <div class="big-card-content">
<div class="card-value">154,838</div>
<div class="card-tag up">
较昨日增加 5.22%
<div class="card-value">{{ loginStats.total }}</div>
<div class="card-tag" :class="getGrowthClass(loginStats.total_growth)">
{{ getGrowthText(loginStats.total_growth) }}
</div> </div>
</div> </div>
</div> </div>
@ -64,10 +64,12 @@
<div class="card-title"> <div class="card-title">
<el-icon><Trophy /></el-icon> <el-icon><Trophy /></el-icon>
</div> </div>
<div class="card-value-small">112,265</div>
<div class="card-value-small">{{ loginStats.member }}</div>
</div> </div>
<div class="card-tag-wrapper"> <div class="card-tag-wrapper">
<div class="card-tag up">较昨日增加 15.22%</div>
<div class="card-tag" :class="getGrowthClass(loginStats.member_growth)">
{{ getGrowthText(loginStats.member_growth) }}
</div>
</div> </div>
</div> </div>
@ -77,10 +79,12 @@
<div class="card-title"> <div class="card-title">
<el-icon><User /></el-icon> <el-icon><User /></el-icon>
</div> </div>
<div class="card-value-small">42,567</div>
<div class="card-value-small">{{ loginStats.normal }}</div>
</div> </div>
<div class="card-tag-wrapper"> <div class="card-tag-wrapper">
<div class="card-tag down">较昨日减少 1.22%</div>
<div class="card-tag" :class="getGrowthClass(loginStats.normal_growth)">
{{ getGrowthText(loginStats.normal_growth) }}
</div>
</div> </div>
</div> </div>
</div> </div>
@ -219,6 +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 } from '../../api/platformData';
const route = useRoute(); const route = useRoute();
const router = useRouter(); const router = useRouter();
@ -235,6 +240,48 @@ const chartRegionPieRef = ref(null);
const chartRegionMemberPieRef = ref(null); const chartRegionMemberPieRef = ref(null);
const chartRegionNonMemberPieRef = ref(null); const chartRegionNonMemberPieRef = ref(null);
//
const loginStats = ref({
total: 0,
total_growth: '0%',
member: 0,
member_growth: '0%',
normal: 0,
normal_growth: '0%'
});
//
const getGrowthClass = (growthStr) => {
if (!growthStr) return '';
return growthStr.startsWith('-') ? 'down' : 'up';
};
//
const getGrowthText = (growthStr) => {
if (!growthStr) return '';
const isDown = growthStr.startsWith('-');
const arrow = isDown ? '↓' : '↑';
const prefix = isDown ? '较昨日减少' : '较昨日增加';
const value = growthStr.replace('-', '');
return `${prefix}${arrow} ${value}`;
};
const fetchLoginData = async () => {
try {
const res = await getUserLoginList();
console.log("获取用户登录数据响应:", res);
//
const data = res.list ? res : (res.data && res.data.list ? res.data : null);
if (data && data.list) {
loginStats.value = data.list;
}
} catch (e) {
console.error('获取用户登录数据失败:', e);
}
};
// 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%' },
@ -428,6 +475,9 @@ watch(activeTab, (newVal) => {
}); });
onMounted(() => { onMounted(() => {
if (activeTab.value === 'loginData') {
fetchLoginData();
}
initCharts(); initCharts();
}); });
</script> </script>

Loading…
Cancel
Save