|
|
@ -109,10 +109,10 @@ |
|
|
|
|
|
|
|
|
<!-- 表格2: 会员登录数据 --> |
|
|
<!-- 表格2: 会员登录数据 --> |
|
|
<div class="detail-section"> |
|
|
<div class="detail-section"> |
|
|
<div class="section-title"><el-icon><Trophy /></el-icon> 会员登录数据</div> |
|
|
|
|
|
|
|
|
<div class="section-title"><el-icon><Trophy /></el-icon> {{ statsTitle }}会员登录数据</div> |
|
|
<el-table :data="loginTableData2" style="width: 100%" :header-cell-style="headerCellStyle"> |
|
|
<el-table :data="loginTableData2" 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="rate" label="会员登录率" /> |
|
|
<el-table-column prop="rate" 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, getUserLoginChannel } from '../../api/platformData'; |
|
|
|
|
|
|
|
|
import { getUserLoginList, getUserLoginTrend, getRegionActiveData, getRegionActiveDataHistogram, getUserLoginChannel, getUserLoginChannelMember } from '../../api/platformData'; |
|
|
|
|
|
|
|
|
const route = useRoute(); |
|
|
const route = useRoute(); |
|
|
const router = useRouter(); |
|
|
const router = useRouter(); |
|
|
@ -436,6 +436,37 @@ const fetchLoginChannelData = async () => { |
|
|
} |
|
|
} |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
const fetchLoginChannelMemberData = 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 getUserLoginChannelMember(params); |
|
|
|
|
|
console.log("获取会员登录渠道数据响应:", res); |
|
|
|
|
|
|
|
|
|
|
|
// 兼容处理拦截器 |
|
|
|
|
|
const data = res.list ? res : (res.data && res.data.list ? res.data : null); |
|
|
|
|
|
|
|
|
|
|
|
if (data && data.list) { |
|
|
|
|
|
loginTableData2.value = data.list.map(item => ({ |
|
|
|
|
|
channel: item.source, |
|
|
|
|
|
total: item.today_count, |
|
|
|
|
|
dailyNew: item.growth_value, |
|
|
|
|
|
rate: item.ratio + '%' |
|
|
|
|
|
})); |
|
|
|
|
|
} |
|
|
|
|
|
} catch (e) { |
|
|
|
|
|
console.error('获取会员登录渠道数据失败:', e); |
|
|
|
|
|
} |
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
const handleSearch = () => { |
|
|
const handleSearch = () => { |
|
|
// 更新 URL 参数 |
|
|
// 更新 URL 参数 |
|
|
const query = { ...route.query }; |
|
|
const query = { ...route.query }; |
|
|
@ -458,6 +489,8 @@ const handleSearch = () => { |
|
|
|
|
|
|
|
|
fetchTrendData(); |
|
|
fetchTrendData(); |
|
|
fetchLoginData(); |
|
|
fetchLoginData(); |
|
|
|
|
|
fetchLoginChannelData(); |
|
|
|
|
|
fetchLoginChannelMemberData(); |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
const handleReset = () => { |
|
|
const handleReset = () => { |
|
|
@ -474,6 +507,7 @@ const handleReset = () => { |
|
|
fetchTrendData(); |
|
|
fetchTrendData(); |
|
|
fetchLoginData(); |
|
|
fetchLoginData(); |
|
|
fetchLoginChannelData(); |
|
|
fetchLoginChannelData(); |
|
|
|
|
|
fetchLoginChannelMemberData(); |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
const fetchRegionActiveData = async () => { |
|
|
const fetchRegionActiveData = async () => { |
|
|
@ -683,13 +717,7 @@ const handleResetRegion = () => { |
|
|
// Tab 1 数据 |
|
|
// Tab 1 数据 |
|
|
const loginTableData1 = ref([]); |
|
|
const loginTableData1 = ref([]); |
|
|
|
|
|
|
|
|
const loginTableData2 = [ |
|
|
|
|
|
{ channel: 'App Store', total: '1,245', dailyNew: '', rate: '38%' }, |
|
|
|
|
|
{ channel: 'Play Store', total: '987', dailyNew: '', rate: '30%' }, |
|
|
|
|
|
{ channel: 'H5', total: '543', dailyNew: '', rate: '17%' }, |
|
|
|
|
|
{ channel: 'APK', total: '321', dailyNew: '', rate: '10%' }, |
|
|
|
|
|
{ channel: '总计', total: '3,096', dailyNew: '', rate: '100%' }, |
|
|
|
|
|
]; |
|
|
|
|
|
|
|
|
const loginTableData2 = ref([]); |
|
|
|
|
|
|
|
|
const loginTableData3 = [ |
|
|
const loginTableData3 = [ |
|
|
{ channel: 'App Store', total: '1,245', dailyNew: '', rate: '38%' }, |
|
|
{ channel: 'App Store', total: '1,245', dailyNew: '', rate: '38%' }, |
|
|
@ -832,6 +860,7 @@ onMounted(() => { |
|
|
if (activeTab.value === 'loginData') { |
|
|
if (activeTab.value === 'loginData') { |
|
|
fetchLoginData(); |
|
|
fetchLoginData(); |
|
|
fetchLoginChannelData(); |
|
|
fetchLoginChannelData(); |
|
|
|
|
|
fetchLoginChannelMemberData(); |
|
|
} |
|
|
} |
|
|
initCharts(); |
|
|
initCharts(); |
|
|
}); |
|
|
}); |
|
|
|