From 73208aa304faa18e7cde2187dfd17641700b7e7a Mon Sep 17 00:00:00 2001 From: YunaiV Date: Sun, 19 Oct 2025 16:41:58 +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=90ele=E3=80=9160%=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 --- .../home/components/analysis-chart-card.vue | 25 -- .../components/analysis-overview-icon.vue | 100 ----- .../home/components/analysis-overview.vue | 174 --------- .../components/analysis-trade-overview.vue | 87 ----- .../src/views/mall/home/components/data.ts | 39 -- .../home/components/member-funnel-card.vue | 162 -------- .../components/member-statistics-card.vue | 101 ----- .../home/components/member-terminal-card.vue | 81 ---- .../components/shortcut-date-range-picker.vue | 93 ----- .../mall/home/components/trade-trend-card.vue | 225 ----------- .../components/workbench-quick-data-show.vue | 72 ---- apps/web-ele/src/views/mall/home/index.vue | 368 +++++------------- .../mall/home/modules/comparison-card.vue | 78 ++++ .../home/modules/member-statistics-card.vue | 120 ++++++ .../member-statistics-chart-options.ts | 64 +++ .../mall/home/modules/operation-data-card.vue | 127 ++++++ .../views/mall/home/modules/shortcut-card.vue | 94 +++++ .../mall/home/modules/trade-trend-card.vue | 207 ++++++++++ .../home/modules/trade-trend-chart-options.ts | 86 ++++ .../statistics/member/modules/funnel-card.vue | 173 ++++++++ .../member/modules/terminal-card.vue | 58 +++ .../member/modules/terminal-chart-options.ts | 27 ++ 22 files changed, 1121 insertions(+), 1440 deletions(-) delete mode 100644 apps/web-ele/src/views/mall/home/components/analysis-chart-card.vue delete mode 100644 apps/web-ele/src/views/mall/home/components/analysis-overview-icon.vue delete mode 100644 apps/web-ele/src/views/mall/home/components/analysis-overview.vue delete mode 100644 apps/web-ele/src/views/mall/home/components/analysis-trade-overview.vue delete mode 100644 apps/web-ele/src/views/mall/home/components/data.ts delete mode 100644 apps/web-ele/src/views/mall/home/components/member-funnel-card.vue delete mode 100644 apps/web-ele/src/views/mall/home/components/member-statistics-card.vue delete mode 100644 apps/web-ele/src/views/mall/home/components/member-terminal-card.vue delete mode 100644 apps/web-ele/src/views/mall/home/components/shortcut-date-range-picker.vue delete mode 100644 apps/web-ele/src/views/mall/home/components/trade-trend-card.vue delete mode 100644 apps/web-ele/src/views/mall/home/components/workbench-quick-data-show.vue create mode 100644 apps/web-ele/src/views/mall/home/modules/comparison-card.vue create mode 100644 apps/web-ele/src/views/mall/home/modules/member-statistics-card.vue create mode 100644 apps/web-ele/src/views/mall/home/modules/member-statistics-chart-options.ts create mode 100644 apps/web-ele/src/views/mall/home/modules/operation-data-card.vue create mode 100644 apps/web-ele/src/views/mall/home/modules/shortcut-card.vue create mode 100644 apps/web-ele/src/views/mall/home/modules/trade-trend-card.vue create mode 100644 apps/web-ele/src/views/mall/home/modules/trade-trend-chart-options.ts create mode 100644 apps/web-ele/src/views/mall/statistics/member/modules/funnel-card.vue create mode 100644 apps/web-ele/src/views/mall/statistics/member/modules/terminal-card.vue create mode 100644 apps/web-ele/src/views/mall/statistics/member/modules/terminal-chart-options.ts diff --git a/apps/web-ele/src/views/mall/home/components/analysis-chart-card.vue b/apps/web-ele/src/views/mall/home/components/analysis-chart-card.vue deleted file mode 100644 index 807b6bad0..000000000 --- a/apps/web-ele/src/views/mall/home/components/analysis-chart-card.vue +++ /dev/null @@ -1,25 +0,0 @@ - - - diff --git a/apps/web-ele/src/views/mall/home/components/analysis-overview-icon.vue b/apps/web-ele/src/views/mall/home/components/analysis-overview-icon.vue deleted file mode 100644 index 80ebbbd80..000000000 --- a/apps/web-ele/src/views/mall/home/components/analysis-overview-icon.vue +++ /dev/null @@ -1,100 +0,0 @@ - - - diff --git a/apps/web-ele/src/views/mall/home/components/analysis-overview.vue b/apps/web-ele/src/views/mall/home/components/analysis-overview.vue deleted file mode 100644 index 6e1aa439f..000000000 --- a/apps/web-ele/src/views/mall/home/components/analysis-overview.vue +++ /dev/null @@ -1,174 +0,0 @@ - - - - diff --git a/apps/web-ele/src/views/mall/home/components/analysis-trade-overview.vue b/apps/web-ele/src/views/mall/home/components/analysis-trade-overview.vue deleted file mode 100644 index b188a9d2c..000000000 --- a/apps/web-ele/src/views/mall/home/components/analysis-trade-overview.vue +++ /dev/null @@ -1,87 +0,0 @@ - - - diff --git a/apps/web-ele/src/views/mall/home/components/data.ts b/apps/web-ele/src/views/mall/home/components/data.ts deleted file mode 100644 index 021a20e5f..000000000 --- a/apps/web-ele/src/views/mall/home/components/data.ts +++ /dev/null @@ -1,39 +0,0 @@ -export interface WorkbenchQuickDataShowItem { - name: string; - value: number; - prefix: string; - decimals: number; - routerName: string; -} - -export interface AnalysisOverviewItem { - title: string; - totalTitle?: string; - totalValue?: number; - value: number; - prefix?: string; - tooltip?: string; - // 环比增长相关字段 - showGrowthRate?: boolean; // 是否显示环比增长率,默认为false -} - -export interface AnalysisOverviewIconItem { - icon: string; - title: string; - value: number; - prefix?: string; - iconBgColor: string; - iconColor: string; - tooltip?: string; - decimals?: number; - percent?: number; -} - -export interface AnalysisOverviewTradeItem { - title: string; - value: number; - prefix?: string; - decimals?: number; - percent?: number; - tooltip?: string; -} diff --git a/apps/web-ele/src/views/mall/home/components/member-funnel-card.vue b/apps/web-ele/src/views/mall/home/components/member-funnel-card.vue deleted file mode 100644 index 089e507ad..000000000 --- a/apps/web-ele/src/views/mall/home/components/member-funnel-card.vue +++ /dev/null @@ -1,162 +0,0 @@ - - - diff --git a/apps/web-ele/src/views/mall/home/components/member-statistics-card.vue b/apps/web-ele/src/views/mall/home/components/member-statistics-card.vue deleted file mode 100644 index 603e9bbcf..000000000 --- a/apps/web-ele/src/views/mall/home/components/member-statistics-card.vue +++ /dev/null @@ -1,101 +0,0 @@ - - diff --git a/apps/web-ele/src/views/mall/home/components/member-terminal-card.vue b/apps/web-ele/src/views/mall/home/components/member-terminal-card.vue deleted file mode 100644 index 65f644801..000000000 --- a/apps/web-ele/src/views/mall/home/components/member-terminal-card.vue +++ /dev/null @@ -1,81 +0,0 @@ - - diff --git a/apps/web-ele/src/views/mall/home/components/shortcut-date-range-picker.vue b/apps/web-ele/src/views/mall/home/components/shortcut-date-range-picker.vue deleted file mode 100644 index c4b72cc17..000000000 --- a/apps/web-ele/src/views/mall/home/components/shortcut-date-range-picker.vue +++ /dev/null @@ -1,93 +0,0 @@ - - diff --git a/apps/web-ele/src/views/mall/home/components/trade-trend-card.vue b/apps/web-ele/src/views/mall/home/components/trade-trend-card.vue deleted file mode 100644 index 62f93772b..000000000 --- a/apps/web-ele/src/views/mall/home/components/trade-trend-card.vue +++ /dev/null @@ -1,225 +0,0 @@ - - diff --git a/apps/web-ele/src/views/mall/home/components/workbench-quick-data-show.vue b/apps/web-ele/src/views/mall/home/components/workbench-quick-data-show.vue deleted file mode 100644 index 3d55ccb8b..000000000 --- a/apps/web-ele/src/views/mall/home/components/workbench-quick-data-show.vue +++ /dev/null @@ -1,72 +0,0 @@ - - - diff --git a/apps/web-ele/src/views/mall/home/index.vue b/apps/web-ele/src/views/mall/home/index.vue index 3ebbe281a..ef7a53fed 100644 --- a/apps/web-ele/src/views/mall/home/index.vue +++ b/apps/web-ele/src/views/mall/home/index.vue @@ -1,279 +1,51 @@ -
- -
-
- - -
-
- - -
-
- -
-
- + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/apps/web-ele/src/views/mall/home/modules/comparison-card.vue b/apps/web-ele/src/views/mall/home/modules/comparison-card.vue new file mode 100644 index 000000000..83e4fb578 --- /dev/null +++ b/apps/web-ele/src/views/mall/home/modules/comparison-card.vue @@ -0,0 +1,78 @@ + + + diff --git a/apps/web-ele/src/views/mall/home/modules/member-statistics-card.vue b/apps/web-ele/src/views/mall/home/modules/member-statistics-card.vue new file mode 100644 index 000000000..e9e83c86e --- /dev/null +++ b/apps/web-ele/src/views/mall/home/modules/member-statistics-card.vue @@ -0,0 +1,120 @@ + + + diff --git a/apps/web-ele/src/views/mall/home/modules/member-statistics-chart-options.ts b/apps/web-ele/src/views/mall/home/modules/member-statistics-chart-options.ts new file mode 100644 index 000000000..d1e8bf08c --- /dev/null +++ b/apps/web-ele/src/views/mall/home/modules/member-statistics-chart-options.ts @@ -0,0 +1,64 @@ +import dayjs from 'dayjs'; + +/** 时间范围类型枚举 */ +export enum TimeRangeTypeEnum { + DAY30 = 1, + MONTH = 30, + WEEK = 7, + YEAR = 365, +} + +/** 会员统计图表配置 */ +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-ele/src/views/mall/home/modules/operation-data-card.vue b/apps/web-ele/src/views/mall/home/modules/operation-data-card.vue new file mode 100644 index 000000000..c9d0ad078 --- /dev/null +++ b/apps/web-ele/src/views/mall/home/modules/operation-data-card.vue @@ -0,0 +1,127 @@ + + + diff --git a/apps/web-ele/src/views/mall/home/modules/shortcut-card.vue b/apps/web-ele/src/views/mall/home/modules/shortcut-card.vue new file mode 100644 index 000000000..8a44c3ea6 --- /dev/null +++ b/apps/web-ele/src/views/mall/home/modules/shortcut-card.vue @@ -0,0 +1,94 @@ + + + diff --git a/apps/web-ele/src/views/mall/home/modules/trade-trend-card.vue b/apps/web-ele/src/views/mall/home/modules/trade-trend-card.vue new file mode 100644 index 000000000..5a584cb21 --- /dev/null +++ b/apps/web-ele/src/views/mall/home/modules/trade-trend-card.vue @@ -0,0 +1,207 @@ + + + diff --git a/apps/web-ele/src/views/mall/home/modules/trade-trend-chart-options.ts b/apps/web-ele/src/views/mall/home/modules/trade-trend-chart-options.ts new file mode 100644 index 000000000..3d5ffa0c1 --- /dev/null +++ b/apps/web-ele/src/views/mall/home/modules/trade-trend-chart-options.ts @@ -0,0 +1,86 @@ +import dayjs from 'dayjs'; + +/** 时间范围类型枚举 */ +export enum TimeRangeTypeEnum { + DAY30 = 1, + MONTH = 30, + WEEK = 7, + YEAR = 365, +} + +/** 交易量趋势图表配置 */ +export function getTradeTrendChartOptions( + dates: string[], + series: any[], + timeRangeType: TimeRangeTypeEnum, +): 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 TimeRangeTypeEnum.DAY30: { + return dayjs(date).format('MM-DD'); + } + case TimeRangeTypeEnum.MONTH: { + return dayjs(date).format('D'); + } + case TimeRangeTypeEnum.WEEK: { + const weekDay = dayjs(date).day(); + return weekDay === 0 ? '周日' : `周${weekDay}`; + } + case TimeRangeTypeEnum.YEAR: { + return `${dayjs(date).format('M')}月`; + } + default: { + return date; + } + } + }, + }, + }, + yAxis: { + axisTick: { + show: false, + }, + }, + }; +} diff --git a/apps/web-ele/src/views/mall/statistics/member/modules/funnel-card.vue b/apps/web-ele/src/views/mall/statistics/member/modules/funnel-card.vue new file mode 100644 index 000000000..340510bec --- /dev/null +++ b/apps/web-ele/src/views/mall/statistics/member/modules/funnel-card.vue @@ -0,0 +1,173 @@ + + + diff --git a/apps/web-ele/src/views/mall/statistics/member/modules/terminal-card.vue b/apps/web-ele/src/views/mall/statistics/member/modules/terminal-card.vue new file mode 100644 index 000000000..4ff172296 --- /dev/null +++ b/apps/web-ele/src/views/mall/statistics/member/modules/terminal-card.vue @@ -0,0 +1,58 @@ + + + diff --git a/apps/web-ele/src/views/mall/statistics/member/modules/terminal-chart-options.ts b/apps/web-ele/src/views/mall/statistics/member/modules/terminal-chart-options.ts new file mode 100644 index 000000000..c3233bdd1 --- /dev/null +++ b/apps/web-ele/src/views/mall/statistics/member/modules/terminal-chart-options.ts @@ -0,0 +1,27 @@ +/** 会员终端统计图配置 */ +export function getTerminalChartOptions(data: any[]): any { + return { + tooltip: { + trigger: 'item', + confine: true, + formatter: '{a}
{b} : {c} ({d}%)', + }, + legend: { + orient: 'vertical', + left: 'right', + }, + series: [ + { + name: '会员终端', + type: 'pie', + label: { + show: false, + }, + labelLine: { + show: false, + }, + data, + }, + ], + }; +}