Skip to content

Commit ae2c3f2

Browse files
committed
Merge remote-tracking branch 'origin/dev' into dev
2 parents 90d6f4d + 66ec610 commit ae2c3f2

File tree

24 files changed

+1973
-330
lines changed

24 files changed

+1973
-330
lines changed

src/api/mall/product/spu.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,5 +104,5 @@ export const exportSpu = async (params) => {
104104

105105
// 获得商品 SPU 精简列表
106106
export const getSpuSimpleList = async () => {
107-
return request.get({ url: '/product/spu/get-simple-list' })
107+
return request.get({ url: '/product/spu/list-all-simple' })
108108
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import request from '@/config/axios'
2+
3+
export interface ArticleVO {
4+
id: number
5+
categoryId: number
6+
title: string
7+
author: string
8+
picUrl: string
9+
introduction: string
10+
browseCount: string
11+
sort: number
12+
status: number
13+
spuId: number
14+
recommendHot: boolean
15+
recommendBanner: boolean
16+
content: string
17+
}
18+
19+
// 查询文章管理列表
20+
export const getArticlePage = async (params) => {
21+
return await request.get({ url: `/promotion/article/page`, params })
22+
}
23+
24+
// 查询文章管理详情
25+
export const getArticle = async (id: number) => {
26+
return await request.get({ url: `/promotion/article/get?id=` + id })
27+
}
28+
29+
// 新增文章管理
30+
export const createArticle = async (data: ArticleVO) => {
31+
return await request.post({ url: `/promotion/article/create`, data })
32+
}
33+
34+
// 修改文章管理
35+
export const updateArticle = async (data: ArticleVO) => {
36+
return await request.put({ url: `/promotion/article/update`, data })
37+
}
38+
39+
// 删除文章管理
40+
export const deleteArticle = async (id: number) => {
41+
return await request.delete({ url: `/promotion/article/delete?id=` + id })
42+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import request from '@/config/axios'
2+
3+
export interface ArticleCategoryVO {
4+
id: number
5+
name: string
6+
picUrl: string
7+
status: number
8+
sort: number
9+
}
10+
11+
// 查询文章分类列表
12+
export const getArticleCategoryPage = async (params) => {
13+
return await request.get({ url: `/promotion/article-category/page`, params })
14+
}
15+
16+
// 查询文章分类精简信息列表
17+
export const getSimpleArticleCategoryList = async () => {
18+
return await request.get({ url: `/promotion/article-category/list-all-simple` })
19+
}
20+
21+
// 查询文章分类详情
22+
export const getArticleCategory = async (id: number) => {
23+
return await request.get({ url: `/promotion/article-category/get?id=` + id })
24+
}
25+
26+
// 新增文章分类
27+
export const createArticleCategory = async (data: ArticleCategoryVO) => {
28+
return await request.post({ url: `/promotion/article-category/create`, data })
29+
}
30+
31+
// 修改文章分类
32+
export const updateArticleCategory = async (data: ArticleCategoryVO) => {
33+
return await request.put({ url: `/promotion/article-category/update`, data })
34+
}
35+
36+
// 删除文章分类
37+
export const deleteArticleCategory = async (id: number) => {
38+
return await request.delete({ url: `/promotion/article-category/delete?id=` + id })
39+
}

src/api/mall/statistics/common.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
/** 数据对照 Response VO */
2+
export interface DataComparisonRespVO<T> {
3+
value: T
4+
reference: T
5+
}

src/api/mall/statistics/member.ts

Lines changed: 39 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import request from '@/config/axios'
22
import dayjs from 'dayjs'
3-
import { TradeStatisticsComparisonRespVO } from '@/api/mall/statistics/trade'
3+
import { DataComparisonRespVO } from '@/api/mall/statistics/common'
44
import { formatDate } from '@/utils/formatTime'
55

66
/** 会员分析 Request VO */
@@ -10,17 +10,17 @@ export interface MemberAnalyseReqVO {
1010

1111
/** 会员分析 Response VO */
1212
export interface MemberAnalyseRespVO {
13-
visitorCount: number
13+
visitUserCount: number
1414
orderUserCount: number
1515
payUserCount: number
1616
atv: number
17-
comparison: TradeStatisticsComparisonRespVO<MemberAnalyseComparisonRespVO>
17+
comparison: DataComparisonRespVO<MemberAnalyseComparisonRespVO>
1818
}
1919

2020
/** 会员分析对照数据 Response VO */
2121
export interface MemberAnalyseComparisonRespVO {
22-
userCount: number
23-
activeUserCount: number
22+
registerUserCount: number
23+
visitUserCount: number
2424
rechargeUserCount: number
2525
}
2626

@@ -29,8 +29,8 @@ export interface MemberAreaStatisticsRespVO {
2929
areaId: number
3030
areaName: string
3131
userCount: number
32-
orderCreateCount: number
33-
orderPayCount: number
32+
orderCreateUserCount: number
33+
orderPayUserCount: number
3434
orderPayPrice: number
3535
}
3636

@@ -54,6 +54,20 @@ export interface MemberTerminalStatisticsRespVO {
5454
userCount: number
5555
}
5656

57+
/** 会员数量统计 Response VO */
58+
export interface MemberCountRespVO {
59+
/** 用户访问量 */
60+
visitUserCount: string
61+
/** 新增用户数量 */
62+
createUserCount: number
63+
}
64+
65+
/** 会员注册数量 Response VO */
66+
export interface MemberRegisterCountRespVO {
67+
date: string
68+
count: number
69+
}
70+
5771
// 查询会员统计
5872
export const getMemberSummary = () => {
5973
return request.get<MemberSummaryRespVO>({
@@ -89,3 +103,21 @@ export const getMemberTerminalStatisticsList = () => {
89103
url: '/statistics/member/get-terminal-statistics-list'
90104
})
91105
}
106+
107+
// 获得用户数量量对照
108+
export const getUserCountComparison = () => {
109+
return request.get<DataComparisonRespVO<MemberCountRespVO>>({
110+
url: '/statistics/member/user-count-comparison'
111+
})
112+
}
113+
114+
// 获得会员注册数量列表
115+
export const getMemberRegisterCountList = (
116+
beginTime: dayjs.ConfigType,
117+
endTime: dayjs.ConfigType
118+
) => {
119+
return request.get<MemberRegisterCountRespVO[]>({
120+
url: '/statistics/member/register-count-list',
121+
params: { times: [formatDate(beginTime), formatDate(endTime)] }
122+
})
123+
}

src/api/mall/statistics/pay.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import request from '@/config/axios'
2+
3+
/** 获取钱包充值金额 */
4+
export const getWalletRechargePrice = async () => {
5+
return await request.get<number>({ url: `/statistics/pay/wallet-recharge-price` })
6+
}

src/api/mall/statistics/trade.ts

Lines changed: 63 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,7 @@
11
import request from '@/config/axios'
22
import dayjs from 'dayjs'
33
import { formatDate } from '@/utils/formatTime'
4-
5-
/** 交易统计对照 Response VO */
6-
export interface TradeStatisticsComparisonRespVO<T> {
7-
value: T
8-
reference: T
9-
}
4+
import { DataComparisonRespVO } from '@/api/mall/statistics/common'
105

116
/** 交易统计 Response VO */
127
export interface TradeSummaryRespVO {
@@ -24,46 +19,100 @@ export interface TradeTrendReqVO {
2419
/** 交易状况统计 Response VO */
2520
export interface TradeTrendSummaryRespVO {
2621
time: string
27-
turnover: number
22+
turnoverPrice: number
2823
orderPayPrice: number
2924
rechargePrice: number
3025
expensePrice: number
31-
balancePrice: number
26+
orderWalletPayPrice: number
3227
brokerageSettlementPrice: number
3328
orderRefundPrice: number
3429
}
3530

31+
/** 交易订单数量 Response VO */
32+
export interface TradeOrderCountRespVO {
33+
/** 待发货 */
34+
undelivered?: number
35+
/** 待核销 */
36+
pickUp?: number
37+
/** 退款中 */
38+
afterSaleApply?: number
39+
/** 提现待审核 */
40+
auditingWithdraw?: number
41+
}
42+
43+
/** 交易订单统计 Response VO */
44+
export interface TradeOrderSummaryRespVO {
45+
/** 支付订单商品数 */
46+
orderPayCount?: number
47+
/** 总支付金额,单位:分 */
48+
orderPayPrice?: number
49+
}
50+
51+
/** 订单量趋势统计 Response VO */
52+
export interface TradeOrderTrendRespVO {
53+
/** 日期 */
54+
date: string
55+
/** 订单数量 */
56+
orderPayCount: number
57+
/** 订单支付金额 */
58+
orderPayPrice: number
59+
}
60+
3661
// 查询交易统计
3762
export const getTradeStatisticsSummary = () => {
38-
return request.get<TradeStatisticsComparisonRespVO<TradeSummaryRespVO>>({
63+
return request.get<DataComparisonRespVO<TradeSummaryRespVO>>({
3964
url: '/statistics/trade/summary'
4065
})
4166
}
4267

4368
// 获得交易状况统计
4469
export const getTradeTrendSummary = (params: TradeTrendReqVO) => {
45-
return request.get<TradeStatisticsComparisonRespVO<TradeTrendSummaryRespVO>>({
70+
return request.get<DataComparisonRespVO<TradeTrendSummaryRespVO>>({
4671
url: '/statistics/trade/trend/summary',
4772
params: formatDateParam(params)
4873
})
4974
}
5075

5176
// 获得交易状况明细
52-
export const getTradeTrendList = (params: TradeTrendReqVO) => {
77+
export const getTradeStatisticsList = (params: TradeTrendReqVO) => {
5378
return request.get<TradeTrendSummaryRespVO[]>({
54-
url: '/statistics/trade/trend/list',
79+
url: '/statistics/trade/list',
5580
params: formatDateParam(params)
5681
})
5782
}
5883

5984
// 导出交易状况明细
60-
export const exportTradeTrend = (params: TradeTrendReqVO) => {
85+
export const exportTradeStatisticsExcel = (params: TradeTrendReqVO) => {
6186
return request.download({
62-
url: '/statistics/trade/trend/export-excel',
87+
url: '/statistics/trade/export-excel',
6388
params: formatDateParam(params)
6489
})
6590
}
6691

92+
// 获得交易订单数量
93+
export const getOrderCount = async () => {
94+
return await request.get<TradeOrderCountRespVO>({ url: `/statistics/trade/order-count` })
95+
}
96+
97+
// 获得交易订单数量对照
98+
export const getOrderComparison = async () => {
99+
return await request.get<DataComparisonRespVO<TradeOrderSummaryRespVO>>({
100+
url: `/statistics/trade/order-comparison`
101+
})
102+
}
103+
104+
// 获得订单量趋势统计
105+
export const getOrderCountTrendComparison = (
106+
type: number,
107+
beginTime: dayjs.ConfigType,
108+
endTime: dayjs.ConfigType
109+
) => {
110+
return request.get<DataComparisonRespVO<TradeOrderTrendRespVO>[]>({
111+
url: '/statistics/trade/order-count-trend',
112+
params: { type, beginTime: formatDate(beginTime), endTime: formatDate(endTime) }
113+
})
114+
}
115+
67116
/** 时间参数需要格式化, 确保接口能识别 */
68117
const formatDateParam = (params: TradeTrendReqVO) => {
69118
return { times: [formatDate(params.times[0]), formatDate(params.times[1])] } as TradeTrendReqVO
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
<template>
2+
<div class="flex flex-row items-center gap-2">
3+
<el-radio-group v-model="shortcutDays" @change="handleShortcutDaysChange">
4+
<el-radio-button :label="1">昨天</el-radio-button>
5+
<el-radio-button :label="7">最近7天</el-radio-button>
6+
<el-radio-button :label="30">最近30天</el-radio-button>
7+
</el-radio-group>
8+
<el-date-picker
9+
v-model="times"
10+
value-format="YYYY-MM-DD HH:mm:ss"
11+
type="daterange"
12+
start-placeholder="开始日期"
13+
end-placeholder="结束日期"
14+
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
15+
:shortcuts="shortcuts"
16+
class="!w-240px"
17+
@change="emitDateRangePicker"
18+
/>
19+
<slot></slot>
20+
</div>
21+
</template>
22+
<script lang="ts" setup>
23+
import dayjs from 'dayjs'
24+
import * as DateUtil from '@/utils/formatTime'
25+
26+
/** 快捷日期范围选择组件 */
27+
defineOptions({ name: 'ShortcutDateRangePicker' })
28+
29+
const shortcutDays = ref(7) // 日期快捷天数(单选按钮组), 默认7天
30+
const times = ref<[dayjs.ConfigType, dayjs.ConfigType]>(['', '']) // 时间范围参数
31+
defineExpose({ times }) // 暴露时间范围参数
32+
/** 日期快捷选择 */
33+
const shortcuts = [
34+
{
35+
text: '昨天',
36+
value: () => DateUtil.getDayRange(new Date(), -1)
37+
},
38+
{
39+
text: '最近7天',
40+
value: () => DateUtil.getLast7Days()
41+
},
42+
{
43+
text: '本月',
44+
value: () => [dayjs().startOf('M'), dayjs().subtract(1, 'd')]
45+
},
46+
{
47+
text: '最近30天',
48+
value: () => DateUtil.getLast30Days()
49+
},
50+
{
51+
text: '最近1年',
52+
value: () => DateUtil.getLast1Year()
53+
}
54+
]
55+
56+
/** 设置时间范围 */
57+
function setTimes() {
58+
const beginDate = dayjs().subtract(shortcutDays.value, 'd')
59+
const yesterday = dayjs().subtract(1, 'd')
60+
times.value = DateUtil.getDateRange(beginDate, yesterday)
61+
}
62+
63+
/** 快捷日期单选按钮选中 */
64+
const handleShortcutDaysChange = async () => {
65+
// 设置时间范围
66+
setTimes()
67+
// 发送时间范围选中事件
68+
await emitDateRangePicker()
69+
}
70+
71+
/** 触发事件:时间范围选中 */
72+
const emits = defineEmits<{
73+
(e: 'change', times: [dayjs.ConfigType, dayjs.ConfigType]): void
74+
}>()
75+
/** 触发时间范围选中事件 */
76+
const emitDateRangePicker = async () => {
77+
// 开始与截止在同一天的, 折线图出不来, 需要延长一天
78+
if (DateUtil.isSameDay(times.value[0], times.value[1])) {
79+
// 前天
80+
times.value[0] = DateUtil.formatDate(dayjs(times.value[0]).subtract(1, 'd'))
81+
}
82+
emits('change', times.value)
83+
}
84+
85+
/** 初始化 **/
86+
onMounted(() => {
87+
handleShortcutDaysChange()
88+
})
89+
</script>

0 commit comments

Comments
 (0)