This commit is contained in:
wwb 2026-03-16 19:58:06 +08:00
parent 2eb8736140
commit 8b6e783246
1 changed files with 109 additions and 77 deletions

View File

@ -40,42 +40,42 @@ const timeRange = new Map()
.set(TimeRangeTypeEnum.DAY30, {
name: '30天',
series: [
{ name: '订单金额', type: 'bar', smooth: true, data: [] },
{ name: '订单数量', type: 'line', smooth: true, data: [] }
{ name: '订单金额', type: 'bar', smooth: true, data: [], yAxisIndex: 0 },
{ name: '订单数量', type: 'line', smooth: true, data: [], yAxisIndex: 1 }
]
})
.set(TimeRangeTypeEnum.WEEK, {
name: '周',
series: [
{ name: '上周金额', type: 'bar', smooth: true, data: [] },
{ name: '本周金额', type: 'bar', smooth: true, data: [] },
{ name: '上周数量', type: 'line', smooth: true, data: [] },
{ name: '本周数量', type: 'line', smooth: true, data: [] }
{ name: '上周金额', type: 'bar', smooth: true, data: [], yAxisIndex: 0 },
{ name: '本周金额', type: 'bar', smooth: true, data: [], yAxisIndex: 0 },
{ name: '上周数量', type: 'line', smooth: true, data: [], yAxisIndex: 1 },
{ name: '本周数量', type: 'line', smooth: true, data: [], yAxisIndex: 1 }
]
})
.set(TimeRangeTypeEnum.MONTH, {
name: '月',
series: [
{ name: '上月金额', type: 'bar', smooth: true, data: [] },
{ name: '本月金额', type: 'bar', smooth: true, data: [] },
{ name: '上月数量', type: 'line', smooth: true, data: [] },
{ name: '本月数量', type: 'line', smooth: true, data: [] }
{ name: '上月金额', type: 'bar', smooth: true, data: [], yAxisIndex: 0 },
{ name: '本月金额', type: 'bar', smooth: true, data: [], yAxisIndex: 0 },
{ name: '上月数量', type: 'line', smooth: true, data: [], yAxisIndex: 1 },
{ name: '本月数量', type: 'line', smooth: true, data: [], yAxisIndex: 1 }
]
})
.set(TimeRangeTypeEnum.YEAR, {
name: '年',
series: [
{ name: '去年金额', type: 'bar', smooth: true, data: [] },
{ name: '今年金额', type: 'bar', smooth: true, data: [] },
{ name: '去年数量', type: 'line', smooth: true, data: [] },
{ name: '今年数量', type: 'line', smooth: true, data: [] }
{ name: '去年金额', type: 'bar', smooth: true, data: [], yAxisIndex: 0 },
{ name: '今年金额', type: 'bar', smooth: true, data: [], yAxisIndex: 0 },
{ name: '去年数量', type: 'line', smooth: true, data: [], yAxisIndex: 1 },
{ name: '今年数量', type: 'line', smooth: true, data: [], yAxisIndex: 1 }
]
})
/** 图表配置 */
const eChartOptions = reactive<EChartsOption>({
grid: {
left: 20,
right: '10%',
right: 20,
bottom: 20,
top: 50,
containLabel: true
@ -87,67 +87,61 @@ const eChartOptions = reactive<EChartsOption>({
series: [],
toolbox: {
feature: {
//
dataZoom: {
yAxisIndex: false // Y
},
brush: {
type: ['lineX', 'clear'] //
},
saveAsImage: { show: true, name: '订单量趋势' } //
dataZoom: { yAxisIndex: false },
brush: { type: ['lineX', 'clear'] },
saveAsImage: { show: true, name: '订单量趋势' }
}
},
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'cross'
},
axisPointer: { type: 'cross' },
padding: [5, 10]
},
xAxis: {
type: 'category',
inverse: true,
boundaryGap: false,
axisTick: {
show: false
},
inverse: true, //
boundaryGap: true, //
axisTick: { show: false },
data: [],
axisLabel: {
formatter: (date: string) => {
formatter: (date: string | number) => {
if (!date) return ''
const dateStr = String(date)
switch (timeRangeType.value) {
case TimeRangeTypeEnum.DAY30:
return formatDate(date, 'MM-DD')
return formatDate(dateStr, 'MM-DD')
case TimeRangeTypeEnum.WEEK:
let weekDay = formatDate(date, 'ddd')
if (weekDay == 'Sun') weekDay = '日'
if (weekDay == 'Mon') weekDay = '一'
if (weekDay == 'Tue') weekDay = '二'
if (weekDay == 'Wed') weekDay = '三'
if (weekDay == 'Thu') weekDay = '四'
if (weekDay == 'Fri') weekDay = '五'
if (weekDay == 'Sat') weekDay = '六'
//return '' + weekDay
return formatDate(date, 'YYYYMMDD')
return formatDate(dateStr, 'YYYYMMDD')
case TimeRangeTypeEnum.MONTH:
return formatDate(date, 'YYYYMM')
return formatDate(dateStr, 'YYYYMM')
case TimeRangeTypeEnum.YEAR:
return formatDate(date, 'YYYY')
return formatDate(dateStr, 'YYYY')
default:
return date
return dateStr
}
}
}
},
yAxis: {
axisTick: {
show: false
yAxis: [
{
// Y
axisTick: { show: false },
type: 'value',
name: ' '
},
{
// Y
axisTick: { show: false },
type: 'value',
name: ' ',
position: 'right', //
offset: 0
}
}
]
}) as EChartsOption
/** 时间范围类型单选按钮选中 */
const handleTimeRangeTypeChange = async () => {
//
let beginTime: Dayjs
let endTime: Dayjs
switch (timeRangeType.value) {
@ -165,11 +159,11 @@ const handleTimeRangeTypeChange = async () => {
break
case TimeRangeTypeEnum.DAY30:
default:
beginTime = dayjs().subtract(30, 'day').startOf('d')
endTime = dayjs().endOf('d')
// startOf('d') startOf('day')
beginTime = dayjs().subtract(30, 'day').startOf('day')
endTime = dayjs().endOf('day')
break
}
//
await getOrderCountTrendComparison(beginTime, endTime)
}
@ -179,32 +173,70 @@ const getOrderCountTrendComparison = async (
endTime: dayjs.ConfigType
) => {
loading.value = true
//
const list = await TradeStatisticsApi.getOrderCountTrendComparison(
timeRangeType.value,
beginTime,
endTime
)
//
const dates: string[] = []
const series = [...timeRange.get(timeRangeType.value).series]
for (let item of list) {
dates.push(item.value.date)
if (series.length === 2) {
series[0].data.push(item?.value?.orderAmount || 0) //
series[1].data.push(item?.value?.orderCount || 0) //
try {
const list = await TradeStatisticsApi.getOrderCountTrendComparison(
timeRangeType.value,
beginTime,
endTime
)
// 1
const dates: string[] = []
// seriesMap
const seriesTemplate = timeRange.get(timeRangeType.value)?.series || []
const series = JSON.parse(JSON.stringify(seriesTemplate))
series.forEach(item => item.data = []) // series
// 2 +
if (Array.isArray(list) && list.length) {
//
const sortedList = list.sort((a, b) => {
return dayjs(a.value.date).unix() - dayjs(b.value.date).unix()
})
//
sortedList.forEach(item => {
if (!item?.value?.date) return //
dates.push(item.value.date)
if (series.length === 2) {
series[0].data.push(item.value.orderAmount || 0)
series[1].data.push(item.value.orderCount || 0)
} else if (series.length === 4) {
series[0].data.push(item.reference?.orderAmount || 0)
series[1].data.push(item.value?.orderAmount || 0)
series[2].data.push(item.reference?.orderCount || 0)
series[3].data.push(item.value?.orderCount || 0)
}
})
// 3X
if (eChartOptions.xAxis?.inverse) {
eChartOptions.xAxis.data = [...dates].reverse()
series.forEach(item => {
item.data = [...item.data].reverse()
})
} else {
eChartOptions.xAxis.data = [...dates]
}
// 4
eChartOptions.series = [...series]
eChartOptions.legend.data = series.map(item => item.name)
} else {
series[0].data.push(item?.reference?.orderAmount || 0) //
series[1].data.push(item?.value?.orderAmount || 0) //
series[2].data.push(item?.reference?.orderCount || 0) //
series[3].data.push(item?.value?.orderCount || 0) //
//
eChartOptions.xAxis!.data = []
eChartOptions.series = []
eChartOptions.legend.data = []
}
} catch (error) {
console.error('查询订单趋势数据失败:', error)
//
eChartOptions.xAxis!.data = []
eChartOptions.series = []
eChartOptions.legend.data = []
} finally {
loading.value = false
}
eChartOptions.xAxis!['data'] = dates
eChartOptions.series = series
// legend424
eChartOptions.legend['data'] = series.map((item) => item.name)
loading.value = false
}
/** 初始化 **/