From bd9d8376c2caa4c0e1f32604d55a3ca36738538f Mon Sep 17 00:00:00 2001 From: YunaiV Date: Sun, 19 Oct 2025 16:59:47 +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=91100%=EF=BC=9A=E8=AF=84=E5=AE=A1?= =?UTF-8?q?=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web-ele/src/api/mall/statistics/common.ts | 2 +- .../web-ele/src/api/mall/statistics/member.ts | 78 +++++++------ .../src/api/mall/statistics/product.ts | 50 ++------ apps/web-ele/src/api/mall/statistics/trade.ts | 27 ++--- .../shortcut-date-range-picker/index.ts | 1 + .../shortcut-date-range-picker.vue | 110 ++++++++++++++++++ .../statistics/member/modules/funnel-card.vue | 44 ++----- 7 files changed, 181 insertions(+), 131 deletions(-) create mode 100644 apps/web-ele/src/components/shortcut-date-range-picker/index.ts create mode 100644 apps/web-ele/src/components/shortcut-date-range-picker/shortcut-date-range-picker.vue diff --git a/apps/web-ele/src/api/mall/statistics/common.ts b/apps/web-ele/src/api/mall/statistics/common.ts index bb474b5cc..3b1fad6d7 100644 --- a/apps/web-ele/src/api/mall/statistics/common.ts +++ b/apps/web-ele/src/api/mall/statistics/common.ts @@ -1,5 +1,5 @@ /** 数据对照 Response */ -export interface MallDataComparisonResp { +export interface DataComparisonRespVO { value: T; reference: T; } diff --git a/apps/web-ele/src/api/mall/statistics/member.ts b/apps/web-ele/src/api/mall/statistics/member.ts index bcc993047..71423b131 100644 --- a/apps/web-ele/src/api/mall/statistics/member.ts +++ b/apps/web-ele/src/api/mall/statistics/member.ts @@ -1,73 +1,73 @@ -import type { MallDataComparisonResp } from './common'; +import type { Dayjs } from 'dayjs'; -import { formatDate2 } from '@vben/utils'; +import type { DataComparisonRespVO } from './common'; + +import { formatDateTime } from '@vben/utils'; import { requestClient } from '#/api/request'; export namespace MallMemberStatisticsApi { /** 会员分析 Request */ - export interface AnalyseReq { - times: Date[]; + export interface MemberAnalyseReqVO { + times: Date[] | Dayjs[]; // 时间范围 } /** 会员分析对照数据 Response */ export interface AnalyseComparison { - registerUserCount: number; - visitUserCount: number; - rechargeUserCount: number; + registerUserCount: number; // 注册用户数 + visitUserCount: number; // 访问用户数 + rechargeUserCount: number; // 充值用户数 } /** 会员分析 Response */ export interface Analyse { - visitUserCount: number; - orderUserCount: number; - payUserCount: number; - atv: number; - comparison: MallDataComparisonResp; + visitUserCount: number; // 访问用户数 + orderUserCount: number; // 下单用户数 + payUserCount: number; // 支付用户数 + atv: number; // 平均客单价 + comparison: DataComparisonRespVO; // 对照数据 } /** 会员地区统计 Response */ export interface AreaStatistics { - areaId: number; - areaName: string; - userCount: number; - orderCreateUserCount: number; - orderPayUserCount: number; - orderPayPrice: number; + areaId: number; // 地区ID + areaName: string; // 地区名称 + userCount: number; // 用户数 + orderCreateUserCount: number; // 下单用户数 + orderPayUserCount: number; // 支付用户数 + orderPayPrice: number; // 支付金额 } /** 会员性别统计 Response */ export interface SexStatistics { - sex: number; - userCount: number; + sex: number; // 性别 + userCount: number; // 用户数 } /** 会员统计 Response */ export interface Summary { - userCount: number; - rechargeUserCount: number; - rechargePrice: number; - expensePrice: number; + userCount: number; // 用户数 + rechargeUserCount: number; // 充值用户数 + rechargePrice: number; // 充值金额 + expensePrice: number; // 消费金额 } /** 会员终端统计 Response */ export interface TerminalStatistics { - terminal: number; - userCount: number; + terminal: number; // 终端 + userCount: number; // 用户数 } /** 会员数量统计 Response */ - export interface Count { - /** 用户访问量 */ - visitUserCount: string; - /** 注册用户数量 */ - registerUserCount: number; + export interface MemberCountRespVO { + visitUserCount: string; // 用户访问量 + registerUserCount: number; // 注册用户数量 } /** 会员注册数量 Response */ export interface RegisterCount { - date: string; - count: number; + date: string; // 日期 + count: number; // 数量 } } @@ -79,14 +79,16 @@ export function getMemberSummary() { } /** 查询会员分析数据 */ -export function getMemberAnalyse(params: MallMemberStatisticsApi.AnalyseReq) { +export function getMemberAnalyse( + params: MallMemberStatisticsApi.MemberAnalyseReqVO, +) { return requestClient.get( '/statistics/member/analyse', { params: { times: [ - formatDate2(params.times[0] || new Date()), - formatDate2(params.times[1] || new Date()), + formatDateTime(params.times[0]), + formatDateTime(params.times[1]), ], }, }, @@ -117,7 +119,7 @@ export function getMemberTerminalStatisticsList() { /** 获得用户数量量对照 */ export function getUserCountComparison() { return requestClient.get< - MallDataComparisonResp + DataComparisonRespVO >('/statistics/member/user-count-comparison'); } @@ -127,7 +129,7 @@ export function getMemberRegisterCountList(beginTime: Date, endTime: Date) { '/statistics/member/register-count-list', { params: { - times: [formatDate2(beginTime), formatDate2(endTime)], + times: [formatDateTime(beginTime), formatDateTime(endTime)], }, }, ); diff --git a/apps/web-ele/src/api/mall/statistics/product.ts b/apps/web-ele/src/api/mall/statistics/product.ts index 089da4af7..834ae27d1 100644 --- a/apps/web-ele/src/api/mall/statistics/product.ts +++ b/apps/web-ele/src/api/mall/statistics/product.ts @@ -1,8 +1,6 @@ import type { PageParam, PageResult } from '@vben/request'; -import type { MallDataComparisonResp } from './common'; - -import { formatDate2 } from '@vben/utils'; +import type { DataComparisonRespVO } from './common'; import { requestClient } from '#/api/request'; @@ -40,58 +38,26 @@ export namespace MallProductStatisticsApi { /** 浏览转化率 */ browseConvertPercent: number; } - - /** 会员分析 Request */ - export interface ProductStatisticsReq { - times: Date[]; - } } /** 获得商品统计分析 */ -export function getProductStatisticsAnalyse( - params: MallProductStatisticsApi.ProductStatisticsReq, -) { +export function getProductStatisticsAnalyse(params: PageParam) { return requestClient.get< - MallDataComparisonResp - >('/statistics/product/analyse', { - params: { - times: [ - formatDate2(params.times[0] || new Date()), - formatDate2(params.times[1] || new Date()), - ], - }, - }); + DataComparisonRespVO + >('/statistics/product/analyse', { params }); } /** 获得商品状况明细 */ -export function getProductStatisticsList( - params: MallProductStatisticsApi.ProductStatisticsReq, -) { +export function getProductStatisticsList(params: PageParam) { return requestClient.get( '/statistics/product/list', - { - params: { - times: [ - formatDate2(params.times[0] || new Date()), - formatDate2(params.times[1] || new Date()), - ], - }, - }, + { params }, ); } /** 导出获得商品状况明细 Excel */ -export function exportProductStatisticsExcel( - params: MallProductStatisticsApi.ProductStatisticsReq, -) { - return requestClient.download('/statistics/product/export-excel', { - params: { - times: [ - formatDate2(params.times[0] || new Date()), - formatDate2(params.times[1] || new Date()), - ], - }, - }); +export function exportProductStatisticsExcel(params: PageParam) { + return requestClient.download('/statistics/product/export-excel', { params }); } /** 获得商品排行榜分页 */ diff --git a/apps/web-ele/src/api/mall/statistics/trade.ts b/apps/web-ele/src/api/mall/statistics/trade.ts index 0b52be510..3f8d1cb82 100644 --- a/apps/web-ele/src/api/mall/statistics/trade.ts +++ b/apps/web-ele/src/api/mall/statistics/trade.ts @@ -1,6 +1,6 @@ -import type { MallDataComparisonResp } from './common'; +import type { DataComparisonRespVO } from './common'; -import { formatDate2 } from '@vben/utils'; +import { formatDate, formatDateTime } from '@vben/utils'; import { requestClient } from '#/api/request'; @@ -15,7 +15,7 @@ export namespace MallTradeStatisticsApi { /** 交易状况 Request */ export interface TradeTrendReq { - times: Date[]; + times: [Date, Date]; } /** 交易状况统计 Response */ @@ -43,7 +43,7 @@ export namespace MallTradeStatisticsApi { } /** 交易订单统计 Response */ - export interface TradeOrderSummary { + export interface TradeOrderSummaryRespVO { /** 支付订单商品数 */ orderPayCount?: number; /** 总支付金额,单位:分 */ @@ -64,17 +64,14 @@ export namespace MallTradeStatisticsApi { /** 时间参数需要格式化, 确保接口能识别 */ const formatDateParam = (params: MallTradeStatisticsApi.TradeTrendReq) => { return { - times: [ - formatDate2(params.times[0] || new Date()), - formatDate2(params.times[1] || new Date()), - ], - }; + times: [formatDate(params.times[0]), formatDate(params.times[1])], + } as MallTradeStatisticsApi.TradeTrendReq; }; /** 查询交易统计 */ export function getTradeStatisticsSummary() { return requestClient.get< - MallDataComparisonResp + DataComparisonRespVO >('/statistics/trade/summary'); } @@ -83,7 +80,7 @@ export function getTradeStatisticsAnalyse( params: MallTradeStatisticsApi.TradeTrendReq, ) { return requestClient.get< - MallDataComparisonResp + DataComparisonRespVO >('/statistics/trade/analyse', { params: formatDateParam(params) }); } @@ -116,7 +113,7 @@ export function getOrderCount() { /** 获得交易订单数量对照 */ export function getOrderComparison() { return requestClient.get< - MallDataComparisonResp + DataComparisonRespVO >('/statistics/trade/order-comparison'); } @@ -127,12 +124,12 @@ export function getOrderCountTrendComparison( endTime: Date, ) { return requestClient.get< - MallDataComparisonResp[] + DataComparisonRespVO[] >('/statistics/trade/order-count-trend', { params: { type, - beginTime: formatDate2(beginTime), - endTime: formatDate2(endTime), + beginTime: formatDateTime(beginTime), + endTime: formatDateTime(endTime), }, }); } diff --git a/apps/web-ele/src/components/shortcut-date-range-picker/index.ts b/apps/web-ele/src/components/shortcut-date-range-picker/index.ts new file mode 100644 index 000000000..a3ee51539 --- /dev/null +++ b/apps/web-ele/src/components/shortcut-date-range-picker/index.ts @@ -0,0 +1 @@ +export { default as ShortcutDateRangePicker } from './shortcut-date-range-picker.vue'; diff --git a/apps/web-ele/src/components/shortcut-date-range-picker/shortcut-date-range-picker.vue b/apps/web-ele/src/components/shortcut-date-range-picker/shortcut-date-range-picker.vue new file mode 100644 index 000000000..9cf485483 --- /dev/null +++ b/apps/web-ele/src/components/shortcut-date-range-picker/shortcut-date-range-picker.vue @@ -0,0 +1,110 @@ + + + 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 index 340510bec..1ac8b2cc3 100644 --- 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 @@ -1,38 +1,30 @@