|
|
|
@ -231,6 +231,11 @@ |
|
|
|
</div> |
|
|
|
|
|
|
|
</div> |
|
|
|
|
|
|
|
<!-- 悬浮刷新时间 --> |
|
|
|
<div class="refresh-time" v-if="lastUpdateTime"> |
|
|
|
数据刷新时间:{{ lastUpdateTime }} |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</template> |
|
|
|
|
|
|
|
@ -251,6 +256,7 @@ const searchRegion = ref(''); |
|
|
|
const dateRangeRegion = ref(''); |
|
|
|
const loading = ref(false); |
|
|
|
const loadingRegion = ref(false); |
|
|
|
const lastUpdateTime = ref(''); |
|
|
|
|
|
|
|
const chartTrendRef = ref(null); |
|
|
|
let chartTrendInstance = null; |
|
|
|
@ -352,6 +358,13 @@ const formatDate = (date) => { |
|
|
|
return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}`; |
|
|
|
}; |
|
|
|
|
|
|
|
const formatDateTime = (date) => { |
|
|
|
if (!date) return ''; |
|
|
|
const d = new Date(date); |
|
|
|
const pad = (n) => n < 10 ? '0' + n : n; |
|
|
|
return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())} ${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`; |
|
|
|
}; |
|
|
|
|
|
|
|
const fetchLoginData = async () => { |
|
|
|
let params = {}; |
|
|
|
if (dateRange.value && dateRange.value.length === 2) { |
|
|
|
@ -552,6 +565,7 @@ const fetchAllLoginData = async () => { |
|
|
|
fetchLoginChannelMemberData(), |
|
|
|
fetchLoginChannelNoMemberData() |
|
|
|
]); |
|
|
|
lastUpdateTime.value = formatDateTime(new Date()); |
|
|
|
} catch (error) { |
|
|
|
console.error('获取登录数据失败:', error); |
|
|
|
} finally { |
|
|
|
@ -647,6 +661,7 @@ const fetchAllRegionData = async () => { |
|
|
|
fetchRegionHistogramData(), |
|
|
|
fetchRegionDistributionData() |
|
|
|
]); |
|
|
|
lastUpdateTime.value = formatDateTime(new Date()); |
|
|
|
} catch (error) { |
|
|
|
console.error('获取地区数据失败:', error); |
|
|
|
} finally { |
|
|
|
@ -801,7 +816,6 @@ const updateRegionBarChart = (list) => { |
|
|
|
|
|
|
|
const option = { |
|
|
|
tooltip: { trigger: 'item' }, // 之前需求:取消十字线显示,改为item |
|
|
|
formatter: '{b}: {c}', // 柱状图不需要显示百分比 |
|
|
|
legend: { data: legendData, top: 'top' }, |
|
|
|
xAxis: { |
|
|
|
type: 'category', |
|
|
|
@ -991,7 +1005,7 @@ const initCharts = () => { |
|
|
|
if (chartRegionBarRef.value) { |
|
|
|
const chart = echarts.init(chartRegionBarRef.value); |
|
|
|
chart.setOption({ |
|
|
|
tooltip: { trigger: 'item', formatter: '{b}: {c} ({d}%)' }, |
|
|
|
tooltip: { trigger: 'item' }, |
|
|
|
legend: { data: ['日活跃用户', '周活跃用户', '月活跃用户'], top: 'top' }, |
|
|
|
xAxis: { |
|
|
|
type: 'category', |
|
|
|
@ -1290,4 +1304,17 @@ onMounted(() => { |
|
|
|
width: 100%; |
|
|
|
height: 300px; |
|
|
|
} |
|
|
|
|
|
|
|
.refresh-time { |
|
|
|
position: fixed; |
|
|
|
bottom: 20px; |
|
|
|
right: 20px; |
|
|
|
background: rgba(0, 0, 0, 0.6); |
|
|
|
color: #fff; |
|
|
|
padding: 8px 15px; |
|
|
|
border-radius: 20px; |
|
|
|
font-size: 12px; |
|
|
|
z-index: 2000; |
|
|
|
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); |
|
|
|
} |
|
|
|
</style> |