diff --git a/apps/web-antd/src/views/mall/statistics/member/index.vue b/apps/web-antd/src/views/mall/statistics/member/index.vue index 3e6a57c00..f25ff3a7f 100644 --- a/apps/web-antd/src/views/mall/statistics/member/index.vue +++ b/apps/web-antd/src/views/mall/statistics/member/index.vue @@ -1,32 +1,116 @@ - - - - 该功能支持 Vue3 + element-plus 版本! - - - - 可参考 - https://github.com/yudaocode/yudao-ui-admin-vue3/blob/master/src/views/mall/statistics/member/index - 代码,pull request 贡献给我们! - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web-antd/src/views/mall/statistics/member/modules/area-card.vue b/apps/web-antd/src/views/mall/statistics/member/modules/area-card.vue new file mode 100644 index 000000000..516e1a149 --- /dev/null +++ b/apps/web-antd/src/views/mall/statistics/member/modules/area-card.vue @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + diff --git a/apps/web-antd/src/views/mall/statistics/member/modules/area-chart-options.ts b/apps/web-antd/src/views/mall/statistics/member/modules/area-chart-options.ts new file mode 100644 index 000000000..551b18a1d --- /dev/null +++ b/apps/web-antd/src/views/mall/statistics/member/modules/area-chart-options.ts @@ -0,0 +1,61 @@ +import type { EChartsOption } from 'echarts'; +import type { MallMemberStatisticsApi } from '#/api/mall/statistics/member'; + +import { fenToYuan } from '@vben/utils'; + +// 地图数据由 @vben/plugins/echarts 自动处理 + +/** 会员地域分布图表配置 */ +export function getAreaChartOptions(data: MallMemberStatisticsApi.AreaStatistics[]): EChartsOption { + let min = 0; + let max = 0; + + const mapData = data.map((item) => { + min = Math.min(min, item.orderPayUserCount || 0); + max = Math.max(max, item.orderPayUserCount || 0); + return { + ...item, + name: item.areaName, + value: item.orderPayUserCount || 0, + }; + }); + + return { + tooltip: { + trigger: 'item', + formatter: (params: any) => { + const data = params?.data; + if (!data) return params?.name || ''; + + return `${data.areaName || params.name} +会员数量:${data.userCount || 0} +订单创建数量:${data.orderCreateUserCount || 0} +订单支付数量:${data.orderPayUserCount || 0} +订单支付金额:¥${Number(fenToYuan(data.orderPayPrice || 0)).toFixed(2)}`; + }, + }, + visualMap: { + text: ['高', '低'], + realtime: false, + calculable: true, + top: 'middle', + min, + max, + inRange: { + color: ['#fff', '#3b82f6'], + }, + }, + series: [ + { + name: '会员地域分布', + type: 'map', + map: 'china', + roam: false, + selectedMode: false, + data: mapData, + }, + ], + }; +} + +// 地图数据已在 @vben/plugins/echarts 中自动注册 diff --git a/apps/web-antd/src/views/mall/statistics/member/modules/sex-card.vue b/apps/web-antd/src/views/mall/statistics/member/modules/sex-card.vue new file mode 100644 index 000000000..fad832e1c --- /dev/null +++ b/apps/web-antd/src/views/mall/statistics/member/modules/sex-card.vue @@ -0,0 +1,63 @@ + + + + + + + diff --git a/apps/web-antd/src/views/mall/statistics/member/modules/sex-chart-options.ts b/apps/web-antd/src/views/mall/statistics/member/modules/sex-chart-options.ts new file mode 100644 index 000000000..685d21a73 --- /dev/null +++ b/apps/web-antd/src/views/mall/statistics/member/modules/sex-chart-options.ts @@ -0,0 +1,35 @@ +import type { EChartsOption } from 'echarts'; + +interface ChartData { + name: string; + value: number; +} + +/** 会员性别比例图表配置 */ +export function getSexChartOptions(data: ChartData[]): EChartsOption { + return { + tooltip: { + trigger: 'item', + confine: true, + formatter: '{a} {b} : {c} ({d}%)', + }, + legend: { + orient: 'vertical', + left: 'right', + }, + series: [ + { + name: '会员性别', + type: 'pie', + roseType: 'area', + label: { + show: false, + }, + labelLine: { + show: false, + }, + data, + }, + ], + }; +}