|
|
@ -98,10 +98,10 @@ |
|
|
|
|
|
|
|
|
<!-- 表格1: 今日登录数据 --> |
|
|
<!-- 表格1: 今日登录数据 --> |
|
|
<div class="detail-section"> |
|
|
<div class="detail-section"> |
|
|
<div class="section-title"><el-icon><DataLine /></el-icon> 今日登录数据</div> |
|
|
|
|
|
|
|
|
<div class="section-title"><el-icon><DataLine /></el-icon> {{ statsTitle }}登录数据</div> |
|
|
<el-table :data="loginTableData1" style="width: 100%" :header-cell-style="headerCellStyle"> |
|
|
<el-table :data="loginTableData1" style="width: 100%" :header-cell-style="headerCellStyle"> |
|
|
<el-table-column prop="channel" label="来源渠道" /> |
|
|
<el-table-column prop="channel" label="来源渠道" /> |
|
|
<el-table-column prop="total" label="今日登录总数" /> |
|
|
|
|
|
|
|
|
<el-table-column prop="total" :label="statsTitle + '登录总数'" /> |
|
|
<el-table-column prop="dailyNew" label="较昨日新增" /> |
|
|
<el-table-column prop="dailyNew" label="较昨日新增" /> |
|
|
<el-table-column prop="percent" label="占比" /> |
|
|
<el-table-column prop="percent" label="占比" /> |
|
|
</el-table> |
|
|
</el-table> |
|
|
@ -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, getRegionActiveData, getRegionActiveDataHistogram } from '../../api/platformData'; |
|
|
|
|
|
|
|
|
import { getUserLoginList, getUserLoginTrend, getRegionActiveData, getRegionActiveDataHistogram, getUserLoginChannel } from '../../api/platformData'; |
|
|
|
|
|
|
|
|
const route = useRoute(); |
|
|
const route = useRoute(); |
|
|
const router = useRouter(); |
|
|
const router = useRouter(); |
|
|
@ -405,6 +405,37 @@ const updateTrendChart = (list) => { |
|
|
chartTrendInstance.setOption(option); |
|
|
chartTrendInstance.setOption(option); |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
const fetchLoginChannelData = async () => { |
|
|
|
|
|
let params = {}; |
|
|
|
|
|
if (dateRange.value && dateRange.value.length === 2) { |
|
|
|
|
|
params.start_time = formatDate(dateRange.value[0]); |
|
|
|
|
|
params.end_time = formatDate(dateRange.value[1]); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (selectedRegion.value && selectedRegion.value !== 'all') { |
|
|
|
|
|
params.region = selectedRegion.value; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
try { |
|
|
|
|
|
const res = await getUserLoginChannel(params); |
|
|
|
|
|
console.log("获取今日登录渠道数据响应:", res); |
|
|
|
|
|
|
|
|
|
|
|
// 兼容处理拦截器 |
|
|
|
|
|
const data = res.list ? res : (res.data && res.data.list ? res.data : null); |
|
|
|
|
|
|
|
|
|
|
|
if (data && data.list) { |
|
|
|
|
|
loginTableData1.value = data.list.map(item => ({ |
|
|
|
|
|
channel: item.source, |
|
|
|
|
|
total: item.today_count, |
|
|
|
|
|
dailyNew: item.growth_value, |
|
|
|
|
|
percent: item.ratio + '%' |
|
|
|
|
|
})); |
|
|
|
|
|
} |
|
|
|
|
|
} catch (e) { |
|
|
|
|
|
console.error('获取今日登录渠道数据失败:', e); |
|
|
|
|
|
} |
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
const handleSearch = () => { |
|
|
const handleSearch = () => { |
|
|
// 更新 URL 参数 |
|
|
// 更新 URL 参数 |
|
|
const query = { ...route.query }; |
|
|
const query = { ...route.query }; |
|
|
@ -442,6 +473,7 @@ const handleReset = () => { |
|
|
|
|
|
|
|
|
fetchTrendData(); |
|
|
fetchTrendData(); |
|
|
fetchLoginData(); |
|
|
fetchLoginData(); |
|
|
|
|
|
fetchLoginChannelData(); |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
const fetchRegionActiveData = async () => { |
|
|
const fetchRegionActiveData = async () => { |
|
|
@ -649,13 +681,7 @@ const handleResetRegion = () => { |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
// Tab 1 数据 |
|
|
// Tab 1 数据 |
|
|
const loginTableData1 = [ |
|
|
|
|
|
{ channel: 'App Store', total: '154,832', dailyNew: '', percent: '38%' }, |
|
|
|
|
|
{ channel: 'Play Store', total: '42,567', dailyNew: '', percent: '30%' }, |
|
|
|
|
|
{ channel: 'H5', total: '112,265', dailyNew: '', percent: '17%' }, |
|
|
|
|
|
{ channel: 'APK', total: '68,420', dailyNew: '', percent: '10%' }, |
|
|
|
|
|
{ channel: '总计', total: '68,420', dailyNew: '', percent: '100%' }, |
|
|
|
|
|
]; |
|
|
|
|
|
|
|
|
const loginTableData1 = ref([]); |
|
|
|
|
|
|
|
|
const loginTableData2 = [ |
|
|
const loginTableData2 = [ |
|
|
{ channel: 'App Store', total: '1,245', dailyNew: '', rate: '38%' }, |
|
|
{ channel: 'App Store', total: '1,245', dailyNew: '', rate: '38%' }, |
|
|
@ -805,6 +831,7 @@ watch(activeTab, (newVal) => { |
|
|
onMounted(() => { |
|
|
onMounted(() => { |
|
|
if (activeTab.value === 'loginData') { |
|
|
if (activeTab.value === 'loginData') { |
|
|
fetchLoginData(); |
|
|
fetchLoginData(); |
|
|
|
|
|
fetchLoginChannelData(); |
|
|
} |
|
|
} |
|
|
initCharts(); |
|
|
initCharts(); |
|
|
}); |
|
|
}); |
|
|
|