From e778472ae76378ed112fa1d64bf5d07a49eec302 Mon Sep 17 00:00:00 2001 From: aaron <> Date: Fri, 28 Mar 2025 09:06:14 +0800 Subject: [PATCH] update --- src/views/dashboard/Dashboard.vue | 153 +++++++++++++++++++++++++++++- 1 file changed, 152 insertions(+), 1 deletion(-) diff --git a/src/views/dashboard/Dashboard.vue b/src/views/dashboard/Dashboard.vue index 62f9321..abfdf2a 100644 --- a/src/views/dashboard/Dashboard.vue +++ b/src/views/dashboard/Dashboard.vue @@ -204,6 +204,36 @@ + +
+
+

+ + + + + + + 每日统计列表 +

+
+ + + +
+
@@ -350,6 +380,54 @@ export default defineComponent({ } ] + const dailyStatsList = ref([]) + const dailyStatsLoading = ref(false) + const dailyStatsPagination = ref({ + current: 1, + pageSize: 10, + total: 0, + showSizeChanger: true, + showTotal: (total) => `共 ${total} 条记录` + }) + + const dailyStatsColumns = [ + { + title: '日期', + dataIndex: 'stats_date', + key: 'stats_date', + width: 120, + align: 'center' + }, + { + title: '订单数', + dataIndex: 'total_order_count', + key: 'total_order_count', + width: 100, + align: 'center' + }, + { + title: '订单金额', + dataIndex: 'total_original_amount', + key: 'total_original_amount', + width: 120, + align: 'right' + }, + { + title: '支付金额', + dataIndex: 'total_final_amount', + key: 'total_final_amount', + width: 120, + align: 'right' + }, + { + title: '小区数', + dataIndex: 'total_communities', + key: 'total_communities', + width: 100, + align: 'center' + } + ] + const greeting = computed(() => { const hour = new Date().getHours() if (hour < 6) return '夜深了,请注意休息' @@ -418,6 +496,26 @@ export default defineComponent({ } } + const fetchDailyStats = async () => { + dailyStatsLoading.value = true + try { + const params = { + skip: (dailyStatsPagination.value.current - 1) * dailyStatsPagination.value.pageSize, + limit: dailyStatsPagination.value.pageSize + } + + const res = await request.get('/api/dashboard/order_stats', { params }) + if (res.code === 200) { + dailyStatsList.value = res.data.items || [] + dailyStatsPagination.value.total = res.data.total || 0 + } + } catch (error) { + console.error('获取每日统计数据失败:', error) + } finally { + dailyStatsLoading.value = false + } + } + const handleCommunityChange = (value) => { if (value === 0) { fetchDeliverymanList() @@ -426,10 +524,17 @@ export default defineComponent({ } } + const handleDailyStatsTableChange = (pagination) => { + dailyStatsPagination.value.current = pagination.current + dailyStatsPagination.value.pageSize = pagination.pageSize + fetchDailyStats() + } + onMounted(() => { fetchDashboardData() fetchDeliverymanList() fetchCommunityList() + fetchDailyStats() }) return { @@ -442,7 +547,12 @@ export default defineComponent({ communityList, selectedCommunity, handleCommunityChange, - paymentRate + paymentRate, + dailyStatsList, + dailyStatsColumns, + dailyStatsPagination, + dailyStatsLoading, + handleDailyStatsTableChange } } }) @@ -658,6 +768,47 @@ export default defineComponent({ } } +.daily-stats-section { + background: white; + border-radius: 8px; + padding: 20px; + box-shadow: 0 2px 12px rgba(0, 0, 0, 0.08); + position: relative; + margin-bottom: 24px; + + &::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + height: 6px; + background-color: #722ed1; + border-top-left-radius: 8px; + border-top-right-radius: 8px; + } +} + +.stats-icon { + background-color: rgba(114, 46, 209, 0.2); + color: #722ed1; +} + +.daily-stats-table { + :deep(.ant-table-thead > tr > th) { + background-color: #f5f5f5; + font-weight: 500; + } + + :deep(.ant-table-tbody > tr:hover > td) { + background-color: #f0e6fa; + } + + :deep(.ant-table-tbody > tr > td) { + transition: background 0.3s; + } +} + .deliveryman-list-section { background: white; border-radius: 8px;