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 @@
-
-
-
-
-
-
-
-
-
-
-
- {{ item.title }}
-
-
-
-
-
-
-
-
-
- {{ Math.abs(Number(item.percent)) }}%
-
-
-
-
-
-
-
-
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 @@
-
-
-
-
-
-
-
-
-
-
-
{{ item.title }}
-
-
-
-
- !
-
-
-
- {{ item.tooltip }}
-
-
-
-
-
今日
-
-
-
-
-
-
-
-
-
-
-
- {{ item.prefix }}
-
-
-
-
-
-
-
-
-
-
- {{
- calculateGrowthRate(item.value, item.totalValue).isPositive
- ? '+'
- : '-'
- }}{{
- formatGrowthRate(
- calculateGrowthRate(item.value, item.totalValue).rate,
- )
- }}%
-
-
-
-
-
-
- {{ item.totalTitle }}
-
-
-
-
-
-
-
-
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 @@
-
-
-
-
-
-
-
- {{ item.title }}
-
-
-
-
-
-
-
-
- 环比
-
- {{ Math.abs(Number(item.percent)) }}%
-
-
-
-
-
-
-
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 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
- 注册用户数量:{{
- analyseData?.comparison?.value?.registerUserCount || 0
- }}
-
-
- 环比增长率:{{
- calculateRelativeRate(
- analyseData?.comparison?.value?.registerUserCount,
- analyseData?.comparison?.reference?.registerUserCount,
- )
- }}%
-
-
-
-
- {{
- analyseData?.visitUserCount || 0
- }}
- 访客
-
-
-
-
-
-
- 活跃用户数量:{{
- analyseData?.comparison?.value?.visitUserCount || 0
- }}
-
-
- 环比增长率:{{
- calculateRelativeRate(
- analyseData?.comparison?.value?.visitUserCount,
- analyseData?.comparison?.reference?.visitUserCount,
- )
- }}%
-
-
-
-
- {{
- analyseData?.orderUserCount || 0
- }}
- 下单
-
-
-
-
-
-
-
- 充值用户数量:{{
- analyseData?.comparison?.value?.rechargeUserCount || 0
- }}
-
-
- 环比增长率:{{
- calculateRelativeRate(
- analyseData?.comparison?.value?.rechargeUserCount,
- analyseData?.comparison?.reference?.rechargeUserCount,
- )
- }}%
-
-
-
-
- 客单价:{{ fenToYuan(analyseData?.atv || 0) }}
-
-
-
-
-
- {{
- analyseData?.payUserCount || 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 @@
-
-
-
-
- 昨天
- 最近7天
- 最近30天
-
-
-
-
-
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 @@
-
-
-
-
-
-
-
-
-
- {{ value.name }}
-
-
-
-
-
-
-
-
-
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 @@
-
-
-
-
-
-
- {{ title }}
-
-
-
-
-
-
-
-
{{ item.name }}
-
-
-
-
-
-
-
-
-
-
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 @@
@@ -284,35 +56,69 @@ function navTo(nav: WorkbenchProjectItem | WorkbenchQuickNavItem) {
url="https://doc.iocoder.cn/mall/build/"
/>
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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 @@
+
+
+
+
+
+
+ {{ title }}
+ {{ tag }}
+
+
+
{{ prefix }}{{ formattedValue }}
+
+ {{ Math.abs(percent).toFixed(2) }}%
+
+
+
+
+
+ 昨日数据
+ {{ prefix }}{{ formattedReference }}
+
+
+
+
+
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 @@
+
+
+
+
+
+
+ 用户统计
+
+
+ {{ value.name }}
+
+
+
+
+
+
+
+
+
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 @@
+
+
+
+
+
+ 运营数据
+
+
+
+
+ {{ item.name }}
+
+
+
+
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 @@
+
+
+
+
+
+ 快捷入口
+
+
+
+
+
+
+
{{ menu.name }}
+
+
+
+
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 @@
+
+
+
+
+
+
+ 交易量趋势
+
+
+ {{ value.name }}
+
+
+
+
+
+
+
+
+
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 @@
+
+
+
+
+
+
+ 会员概览
+
+
+
+
+
+
+
+
+ 注册用户数量:
+ {{ analyseData?.comparison?.value?.registerUserCount || 0 }}
+
+
+ 环比增长率:
+ {{
+ calculateRelativeRate(
+ analyseData?.comparison?.value?.registerUserCount,
+ analyseData?.comparison?.reference?.registerUserCount,
+ ).toFixed(2)
+ }}%
+
+
+
+
+
+ {{ analyseData?.visitUserCount || 0 }}
+
+ 访客
+
+
+
+
+
+
+ 活跃用户数量:
+ {{ analyseData?.comparison?.value?.visitUserCount || 0 }}
+
+
+ 环比增长率:
+ {{
+ calculateRelativeRate(
+ analyseData?.comparison?.value?.visitUserCount,
+ analyseData?.comparison?.reference?.visitUserCount,
+ ).toFixed(2)
+ }}%
+
+
+
+
+
+ {{ analyseData?.orderUserCount || 0 }}
+
+ 下单
+
+
+
+
+
+
+
+ 充值用户数量:
+ {{ analyseData?.comparison?.value?.rechargeUserCount || 0 }}
+
+
+ 环比增长率:
+ {{
+ calculateRelativeRate(
+ analyseData?.comparison?.value?.rechargeUserCount,
+ analyseData?.comparison?.reference?.rechargeUserCount,
+ ).toFixed(2)
+ }}%
+
+
+
+
+ 客单价:{{ fenToYuan(analyseData?.atv || 0) }}
+
+
+
+
+
+
+ {{ analyseData?.payUserCount || 0 }}
+
+ 成交用户
+
+
+
+
+
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,
+ },
+ ],
+ };
+}