feat:【mall 商城】会员统计【antd】45% area-card.vue 优化代码风格

This commit is contained in:
YunaiV
2025-10-19 19:29:45 +08:00
parent f84a296416
commit b2b43f2d19
5 changed files with 10 additions and 14 deletions

View File

@@ -86,20 +86,15 @@ async function getMemberAreaStatisticsList() {
loading.value = true; loading.value = true;
try { try {
const list = await MemberStatisticsApi.getMemberAreaStatisticsList(); const list = await MemberStatisticsApi.getMemberAreaStatisticsList();
areaStatisticsList.value = list.map( areaStatisticsList.value = list.map(
(item: MallMemberStatisticsApi.AreaStatistics) => ({ (item: MallMemberStatisticsApi.AreaStatistics) => ({
...item, ...item,
areaName: areaReplace(item.areaName), areaName: areaReplace(item.areaName),
}), }),
); );
// 渲染图表 // 渲染图表
const chartOptions = getAreaChartOptions(areaStatisticsList.value); const chartOptions = getAreaChartOptions(areaStatisticsList.value);
await renderEcharts(chartOptions); await renderEcharts(chartOptions);
} catch (error) {
console.error('地域分布数据获取失败:', error);
} finally { } finally {
loading.value = false; loading.value = false;
} }
@@ -116,7 +111,7 @@ onMounted(() => {
<Spin :spinning="loading"> <Spin :spinning="loading">
<div class="flex gap-4"> <div class="flex gap-4">
<div class="w-2/5"> <div class="w-2/5">
<EchartsUI ref="chartRef" class="h-[300px] w-full" /> <EchartsUI ref="chartRef" />
</div> </div>
<div class="w-3/5"> <div class="w-3/5">
<Table <Table

View File

@@ -5,7 +5,7 @@ import { fenToYuan } from '@vben/utils';
/** 会员地域分布图表配置 */ /** 会员地域分布图表配置 */
export function getAreaChartOptions( export function getAreaChartOptions(
data: MallMemberStatisticsApi.AreaStatistics[], data: MallMemberStatisticsApi.AreaStatistics[],
) { ): any {
if (!data || data.length === 0) { if (!data || data.length === 0) {
return { return {
title: { title: {
@@ -20,9 +20,9 @@ export function getAreaChartOptions(
}; };
} }
// 计算 min 和 max 值
let min = Number.POSITIVE_INFINITY; let min = Number.POSITIVE_INFINITY;
let max = Number.NEGATIVE_INFINITY; let max = Number.NEGATIVE_INFINITY;
const mapData = data.map((item) => { const mapData = data.map((item) => {
const payUserCount = item.orderPayUserCount || 0; const payUserCount = item.orderPayUserCount || 0;
min = Math.min(min, payUserCount); min = Math.min(min, payUserCount);
@@ -33,13 +33,13 @@ export function getAreaChartOptions(
value: payUserCount, value: payUserCount,
}; };
}); });
// 如果所有值都为 0设置合理的 min 和 max 值
// 如果所有值都为0设置合理的最小最大值
if (min === max && min === 0) { if (min === max && min === 0) {
min = 0; min = 0;
max = 10; max = 10;
} }
// 返回图表配置
return { return {
tooltip: { tooltip: {
trigger: 'item', trigger: 'item',
@@ -48,7 +48,6 @@ export function getAreaChartOptions(
if (!itemData) { if (!itemData) {
return `${params?.name || ''}<br/>暂无数据`; return `${params?.name || ''}<br/>暂无数据`;
} }
return `${itemData.areaName || params.name}<br/> return `${itemData.areaName || params.name}<br/>
会员数量:${itemData.userCount || 0}<br/> 会员数量:${itemData.userCount || 0}<br/>
订单创建数量:${itemData.orderCreateUserCount || 0}<br/> 订单创建数量:${itemData.orderCreateUserCount || 0}<br/>

View File

@@ -39,6 +39,7 @@ async function getMemberSexStatisticsList() {
value: userCount || 0, value: userCount || 0,
}; };
}); });
// 更新 Echarts 数据
await renderEcharts(getSexChartOptions(chartData)); await renderEcharts(getSexChartOptions(chartData));
} finally { } finally {
loading.value = false; loading.value = false;

View File

@@ -34,6 +34,7 @@ const getMemberTerminalStatisticsList = async () => {
value: userCount || 0, value: userCount || 0,
}; };
}); });
// 更新 Echarts 数据
await renderEcharts(getTerminalChartOptions(chartData)); await renderEcharts(getTerminalChartOptions(chartData));
} finally { } finally {
loading.value = false; loading.value = false;

View File

@@ -8,9 +8,9 @@ import { DocAlert, Page } from '@vben/common-ui';
import { fenToYuan } from '@vben/utils'; import { fenToYuan } from '@vben/utils';
import * as MemberStatisticsApi from '#/api/mall/statistics/member'; // 会员统计数据 import * as MemberStatisticsApi from '#/api/mall/statistics/member'; // 会员统计数据
import AnalysisOverviewIcon from '#/views/mall/home/components/analysis-overview-icon.vue'; // import AnalysisOverviewIcon from '#/views/mall/home/components/analysis-overview-icon.vue';
import MemberFunnelCard from '#/views/mall/home/components/member-funnel-card.vue'; // import MemberFunnelCard from '#/views/mall/home/components/member-funnel-card.vue';
import MemberTerminalCard from '#/views/mall/home/components/member-terminal-card.vue'; // import MemberTerminalCard from '#/views/mall/home/components/member-terminal-card.vue';
import MemberRegionCard from './components/member-region-card.vue'; import MemberRegionCard from './components/member-region-card.vue';
import MemberSexCard from './components/member-sex-card.vue'; import MemberSexCard from './components/member-sex-card.vue';