-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/web-ele/src/views/mall/statistics/trade/modules/trend-card.vue b/apps/web-ele/src/views/mall/statistics/trade/modules/trend-card.vue
new file mode 100644
index 000000000..1c6090858
--- /dev/null
+++ b/apps/web-ele/src/views/mall/statistics/trade/modules/trend-card.vue
@@ -0,0 +1,282 @@
+
+
+
+
+
+
+
交易状况
+
+
+
+
+
+
+
+ 导出
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/web-ele/src/views/mall/statistics/trade/modules/trend-chart-options.ts b/apps/web-ele/src/views/mall/statistics/trade/modules/trend-chart-options.ts
new file mode 100644
index 000000000..5c85460fb
--- /dev/null
+++ b/apps/web-ele/src/views/mall/statistics/trade/modules/trend-chart-options.ts
@@ -0,0 +1,124 @@
+import type { MallTradeStatisticsApi } from '#/api/mall/statistics/trade';
+
+import { fenToYuan } from '@vben/utils';
+
+/** 交易趋势折线图配置 */
+export function getTradeTrendChartOptions(
+ data: MallTradeStatisticsApi.TradeTrendSummary[],
+): any {
+ // 处理数据:将分转换为元
+ const processedData = data.map((item) => ({
+ ...item,
+ turnoverPrice: Number(fenToYuan(item.turnoverPrice)),
+ orderPayPrice: Number(fenToYuan(item.orderPayPrice)),
+ rechargePrice: Number(fenToYuan(item.rechargePrice)),
+ expensePrice: Number(fenToYuan(item.expensePrice)),
+ }));
+
+ return {
+ dataset: {
+ dimensions: [
+ 'date',
+ 'turnoverPrice',
+ 'orderPayPrice',
+ 'rechargePrice',
+ 'expensePrice',
+ ],
+ source: processedData,
+ },
+ grid: {
+ left: 20,
+ right: 20,
+ bottom: 20,
+ top: 80,
+ containLabel: true,
+ },
+ legend: {
+ top: 50,
+ },
+ series: [
+ {
+ name: '营业额',
+ type: 'line',
+ smooth: true,
+ itemStyle: { color: '#1890FF' },
+ },
+ {
+ name: '商品支付金额',
+ type: 'line',
+ smooth: true,
+ itemStyle: { color: '#722ED1' },
+ },
+ {
+ name: '充值金额',
+ type: 'line',
+ smooth: true,
+ itemStyle: { color: '#FAAD14' },
+ },
+ {
+ name: '支出金额',
+ type: 'line',
+ smooth: true,
+ itemStyle: { color: '#52C41A' },
+ },
+ ],
+ toolbox: {
+ feature: {
+ // 数据区域缩放
+ dataZoom: {
+ yAxisIndex: false, // Y轴不缩放
+ },
+ brush: {
+ type: ['lineX', 'clear'], // 区域缩放按钮、还原按钮
+ },
+ saveAsImage: {
+ show: true,
+ name: '交易状况',
+ }, // 保存为图片
+ },
+ },
+ tooltip: {
+ trigger: 'axis',
+ axisPointer: {
+ type: 'cross',
+ },
+ padding: [5, 10],
+ formatter(params: any) {
+ let result = `
${params[0].data.time}
`;
+ params.forEach((item: any) => {
+ result += `
+
+ ${item.seriesName}: ¥${item.data[item.dimensionNames[item.encode.y[0]]]}
+
`;
+ });
+ return result;
+ },
+ },
+ xAxis: {
+ type: 'category',
+ boundaryGap: false,
+ axisTick: {
+ show: false,
+ },
+ },
+ yAxis: {
+ type: 'value',
+ axisLine: {
+ show: false,
+ },
+ axisTick: {
+ show: false,
+ },
+ axisLabel: {
+ formatter: '¥{value}',
+ color: '#7F8B9C',
+ },
+ splitLine: {
+ show: true,
+ lineStyle: {
+ color: '#F5F7F9',
+ },
+ },
+ },
+ };
+}