|
|
|
@ -251,6 +251,12 @@ const formatDate = (date) => { |
|
|
|
return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())} ${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`; |
|
|
|
}; |
|
|
|
|
|
|
|
const isOverviewLoaded = ref(false); |
|
|
|
const isDetailLoaded = ref(false); |
|
|
|
|
|
|
|
const chartMemberInstance = ref(null); |
|
|
|
const chartNewOldInstance = ref(null); |
|
|
|
|
|
|
|
const fetchData = async () => { |
|
|
|
try { |
|
|
|
const res = await getUserOverviewList(); |
|
|
|
@ -259,14 +265,21 @@ const fetchData = async () => { |
|
|
|
if (res && res.list) { |
|
|
|
overviewData.value = res.list; |
|
|
|
initCharts(); |
|
|
|
isOverviewLoaded.value = true; |
|
|
|
} |
|
|
|
} catch (error) { |
|
|
|
console.error('获取用户概览数据失败:', error); |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
const fetchDetailData = async () => { |
|
|
|
const fetchDetailData = async (forceUpdate = false) => { |
|
|
|
// 决定是否显示加载状态:首次加载或强制更新时显示 |
|
|
|
const shouldShowLoading = !isDetailLoaded.value || forceUpdate; |
|
|
|
|
|
|
|
if (shouldShowLoading) { |
|
|
|
loading.value = true; |
|
|
|
} |
|
|
|
|
|
|
|
let params = {}; |
|
|
|
if (dateRange.value && dateRange.value.length === 2) { |
|
|
|
params.start_time = formatDate(dateRange.value[0]); |
|
|
|
@ -326,21 +339,25 @@ const fetchDetailData = async () => { |
|
|
|
updateBarChart(data.chart, data.new_source || [], data.old_source || []); |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
isDetailLoaded.value = true; |
|
|
|
} |
|
|
|
} catch(e) { |
|
|
|
console.error('获取数据明细失败:', e); |
|
|
|
} finally { |
|
|
|
if (shouldShowLoading) { |
|
|
|
loading.value = false; |
|
|
|
} |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
const handleSearch = () => { |
|
|
|
fetchDetailData(); |
|
|
|
fetchDetailData(true); |
|
|
|
}; |
|
|
|
|
|
|
|
const handleReset = () => { |
|
|
|
dateRange.value = ''; |
|
|
|
fetchDetailData(); |
|
|
|
fetchDetailData(true); |
|
|
|
}; |
|
|
|
|
|
|
|
const handleExport = async () => { |
|
|
|
@ -375,7 +392,11 @@ const initCharts = () => { |
|
|
|
nextTick(() => { |
|
|
|
// Chart 1: 会员/非会员 |
|
|
|
if (chartMemberRef.value) { |
|
|
|
const chart1 = echarts.init(chartMemberRef.value); |
|
|
|
let chart1 = chartMemberInstance.value; |
|
|
|
if (!chart1) { |
|
|
|
chart1 = echarts.init(chartMemberRef.value); |
|
|
|
chartMemberInstance.value = chart1; |
|
|
|
} |
|
|
|
chart1.setOption({ |
|
|
|
tooltip: { |
|
|
|
trigger: 'item', |
|
|
|
@ -399,7 +420,11 @@ const initCharts = () => { |
|
|
|
|
|
|
|
// Chart 2: 三色环形图 |
|
|
|
if (chartNewOldRef.value) { |
|
|
|
const chart2 = echarts.init(chartNewOldRef.value); |
|
|
|
let chart2 = chartNewOldInstance.value; |
|
|
|
if (!chart2) { |
|
|
|
chart2 = echarts.init(chartNewOldRef.value); |
|
|
|
chartNewOldInstance.value = chart2; |
|
|
|
} |
|
|
|
chart2.setOption({ |
|
|
|
tooltip: { |
|
|
|
trigger: 'item', |
|
|
|
|