From ad6ba25b3e03f933ddd4768346a556e67de54636 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Sat, 18 Oct 2025 19:47:36 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E3=80=90mall=20=E5=95=86=E5=9F=8E?= =?UTF-8?q?=E3=80=91=E5=95=86=E5=9F=8E=E9=A6=96=E9=A1=B5=E7=9A=84=E8=BF=81?= =?UTF-8?q?=E7=A7=BB=E3=80=90antd=E3=80=9110%=EF=BC=9A=E5=88=9D=E5=A7=8B?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/web-antd/src/views/mall/home/index.vue | 229 +++++++----------- .../mall/home/modules/comparison-card.vue | 82 +++++++ .../mall/home/modules/member-funnel-card.vue | 151 ++++++++++++ .../home/modules/member-statistics-card.vue | 52 ++++ .../member-statistics-chart-options.ts | 59 +++++ .../home/modules/member-terminal-card.vue | 56 +++++ .../modules/member-terminal-chart-options.ts | 31 +++ .../mall/home/modules/operation-data-card.vue | 119 +++++++++ .../views/mall/home/modules/shortcut-card.vue | 95 ++++++++ .../mall/home/modules/trade-trend-card.vue | 203 ++++++++++++++++ .../home/modules/trade-trend-chart-options.ts | 78 ++++++ 11 files changed, 1012 insertions(+), 143 deletions(-) create mode 100644 apps/web-antd/src/views/mall/home/modules/comparison-card.vue create mode 100644 apps/web-antd/src/views/mall/home/modules/member-funnel-card.vue create mode 100644 apps/web-antd/src/views/mall/home/modules/member-statistics-card.vue create mode 100644 apps/web-antd/src/views/mall/home/modules/member-statistics-chart-options.ts create mode 100644 apps/web-antd/src/views/mall/home/modules/member-terminal-card.vue create mode 100644 apps/web-antd/src/views/mall/home/modules/member-terminal-chart-options.ts create mode 100644 apps/web-antd/src/views/mall/home/modules/operation-data-card.vue create mode 100644 apps/web-antd/src/views/mall/home/modules/shortcut-card.vue create mode 100644 apps/web-antd/src/views/mall/home/modules/trade-trend-card.vue create mode 100644 apps/web-antd/src/views/mall/home/modules/trade-trend-chart-options.ts diff --git a/apps/web-antd/src/views/mall/home/index.vue b/apps/web-antd/src/views/mall/home/index.vue index 21b6279b4..e398fd177 100644 --- a/apps/web-antd/src/views/mall/home/index.vue +++ b/apps/web-antd/src/views/mall/home/index.vue @@ -1,159 +1,45 @@ - -
- + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/apps/web-antd/src/views/mall/home/modules/comparison-card.vue b/apps/web-antd/src/views/mall/home/modules/comparison-card.vue new file mode 100644 index 000000000..b746dd7af --- /dev/null +++ b/apps/web-antd/src/views/mall/home/modules/comparison-card.vue @@ -0,0 +1,82 @@ + + + + + + diff --git a/apps/web-antd/src/views/mall/home/modules/member-funnel-card.vue b/apps/web-antd/src/views/mall/home/modules/member-funnel-card.vue new file mode 100644 index 000000000..4543c2ca5 --- /dev/null +++ b/apps/web-antd/src/views/mall/home/modules/member-funnel-card.vue @@ -0,0 +1,151 @@ + + + + + + diff --git a/apps/web-antd/src/views/mall/home/modules/member-statistics-card.vue b/apps/web-antd/src/views/mall/home/modules/member-statistics-card.vue new file mode 100644 index 000000000..1cc40dac2 --- /dev/null +++ b/apps/web-antd/src/views/mall/home/modules/member-statistics-card.vue @@ -0,0 +1,52 @@ + + + + diff --git a/apps/web-antd/src/views/mall/home/modules/member-statistics-chart-options.ts b/apps/web-antd/src/views/mall/home/modules/member-statistics-chart-options.ts new file mode 100644 index 000000000..0d45d5e9c --- /dev/null +++ b/apps/web-antd/src/views/mall/home/modules/member-statistics-chart-options.ts @@ -0,0 +1,59 @@ +import dayjs from 'dayjs'; + +/** + * 会员统计图表配置 + */ +export function getMemberStatisticsChartOptions(list: any[]): any { + return { + dataset: { + dimensions: ['date', 'count'], + source: list, + }, + grid: { + left: 20, + right: 20, + bottom: 20, + top: 80, + containLabel: true, + }, + legend: { + top: 50, + }, + series: [{ name: '注册量', type: 'line', smooth: true, areaStyle: {} }], + toolbox: { + feature: { + // 数据区域缩放 + dataZoom: { + yAxisIndex: false, // Y轴不缩放 + }, + brush: { + type: ['lineX', 'clear'], // 区域缩放按钮、还原按钮 + }, + saveAsImage: { show: true, name: '会员统计' }, // 保存为图片 + }, + }, + tooltip: { + trigger: 'axis', + axisPointer: { + type: 'cross', + }, + padding: [5, 10], + }, + xAxis: { + type: 'category', + boundaryGap: false, + axisTick: { + show: false, + }, + axisLabel: { + formatter: (date: string) => dayjs(date).format('MM-DD'), + }, + }, + yAxis: { + axisTick: { + show: false, + }, + }, + }; +} + diff --git a/apps/web-antd/src/views/mall/home/modules/member-terminal-card.vue b/apps/web-antd/src/views/mall/home/modules/member-terminal-card.vue new file mode 100644 index 000000000..1abef2b48 --- /dev/null +++ b/apps/web-antd/src/views/mall/home/modules/member-terminal-card.vue @@ -0,0 +1,56 @@ + + + + diff --git a/apps/web-antd/src/views/mall/home/modules/member-terminal-chart-options.ts b/apps/web-antd/src/views/mall/home/modules/member-terminal-chart-options.ts new file mode 100644 index 000000000..f6077d743 --- /dev/null +++ b/apps/web-antd/src/views/mall/home/modules/member-terminal-chart-options.ts @@ -0,0 +1,31 @@ +/** + * 会员终端统计图配置 + */ +export function getTerminalChartOptions(data: any[]): any { + return { + tooltip: { + trigger: 'item', + confine: true, + formatter: '{a}
{b} : {c} ({d}%)', + }, + legend: { + orient: 'vertical', + left: 'right', + }, + roseType: 'area', + series: [ + { + name: '会员终端', + type: 'pie', + label: { + show: false, + }, + labelLine: { + show: false, + }, + data, + }, + ], + }; +} + diff --git a/apps/web-antd/src/views/mall/home/modules/operation-data-card.vue b/apps/web-antd/src/views/mall/home/modules/operation-data-card.vue new file mode 100644 index 000000000..16e0238f5 --- /dev/null +++ b/apps/web-antd/src/views/mall/home/modules/operation-data-card.vue @@ -0,0 +1,119 @@ + + + + diff --git a/apps/web-antd/src/views/mall/home/modules/shortcut-card.vue b/apps/web-antd/src/views/mall/home/modules/shortcut-card.vue new file mode 100644 index 000000000..07f20e1a9 --- /dev/null +++ b/apps/web-antd/src/views/mall/home/modules/shortcut-card.vue @@ -0,0 +1,95 @@ + + + + diff --git a/apps/web-antd/src/views/mall/home/modules/trade-trend-card.vue b/apps/web-antd/src/views/mall/home/modules/trade-trend-card.vue new file mode 100644 index 000000000..32a5b680c --- /dev/null +++ b/apps/web-antd/src/views/mall/home/modules/trade-trend-card.vue @@ -0,0 +1,203 @@ + + + + diff --git a/apps/web-antd/src/views/mall/home/modules/trade-trend-chart-options.ts b/apps/web-antd/src/views/mall/home/modules/trade-trend-chart-options.ts new file mode 100644 index 000000000..12455b968 --- /dev/null +++ b/apps/web-antd/src/views/mall/home/modules/trade-trend-chart-options.ts @@ -0,0 +1,78 @@ +import dayjs from 'dayjs'; + +/** + * 交易量趋势图表配置 + */ +export function getTradeTrendChartOptions( + dates: string[], + series: any[], + timeRangeType: number, +): any { + return { + grid: { + left: 20, + right: 20, + bottom: 20, + top: 80, + containLabel: true, + }, + legend: { + top: 50, + data: series.map((item) => item.name), + }, + series, + toolbox: { + feature: { + // 数据区域缩放 + dataZoom: { + yAxisIndex: false, // Y轴不缩放 + }, + brush: { + type: ['lineX', 'clear'], // 区域缩放按钮、还原按钮 + }, + saveAsImage: { show: true, name: '订单量趋势' }, // 保存为图片 + }, + }, + tooltip: { + trigger: 'axis', + axisPointer: { + type: 'cross', + }, + padding: [5, 10], + }, + xAxis: { + type: 'category', + inverse: true, + boundaryGap: false, + axisTick: { + show: false, + }, + data: dates, + axisLabel: { + formatter: (date: string) => { + switch (timeRangeType) { + case 1: // DAY30 + return dayjs(date).format('MM-DD'); + case 7: // WEEK + { + const weekDay = dayjs(date).day(); + return weekDay === 0 ? '周日' : `周${weekDay}`; + } + case 30: // MONTH + return dayjs(date).format('D'); + case 365: // YEAR + return dayjs(date).format('M') + '月'; + default: + return date; + } + }, + }, + }, + yAxis: { + axisTick: { + show: false, + }, + }, + }; +} +