diff --git a/src/routes/apiStats.js b/src/routes/apiStats.js index 21efa7be..271d95df 100644 --- a/src/routes/apiStats.js +++ b/src/routes/apiStats.js @@ -561,7 +561,9 @@ router.post('/api/batch-stats', async (req, res) => { apiId: stats.apiId, name: stats.name, isActive: true, - usage: stats.usage + usage: stats.usage, + dailyUsage: stats.dailyStats, + monthlyUsage: stats.monthlyStats }) } }) diff --git a/web/admin-spa/src/components/apistats/AggregatedStatsCard.vue b/web/admin-spa/src/components/apistats/AggregatedStatsCard.vue index deb6ff04..5b857f8e 100644 --- a/web/admin-spa/src/components/apistats/AggregatedStatsCard.vue +++ b/web/admin-spa/src/components/apistats/AggregatedStatsCard.vue @@ -33,8 +33,8 @@
- {{ formatNumber(stat.usage?.requests || 0) }}次 - {{ stat.usage?.formattedCost || '$0.00' }} + {{ formatNumber(getStatUsage(stat)?.requests || 0) }}次 + {{ getStatUsage(stat)?.formattedCost || '$0.00' }}
@@ -76,12 +76,27 @@ import { useApiStatsStore } from '@/stores/apistats' const apiStatsStore = useApiStatsStore() const { aggregatedStats, individualStats, statsPeriod, multiKeyMode } = storeToRefs(apiStatsStore) +// 获取当前时间段的使用数据 +const getStatUsage = (stat) => { + if (!stat) return null + + if (statsPeriod.value === 'daily') { + return stat.dailyUsage || stat.usage + } else { + return stat.monthlyUsage || stat.usage + } +} + // 获取TOP Keys(最多显示5个) const topKeys = computed(() => { if (!individualStats.value || individualStats.value.length === 0) return [] return [...individualStats.value] - .sort((a, b) => (b.usage?.cost || 0) - (a.usage?.cost || 0)) + .sort((a, b) => { + const aUsage = getStatUsage(a) + const bUsage = getStatUsage(b) + return (bUsage?.cost || 0) - (aUsage?.cost || 0) + }) .slice(0, 5) }) @@ -95,7 +110,10 @@ const otherKeysCount = computed(() => { const otherPercentage = computed(() => { if (!individualStats.value || !aggregatedStats.value) return 0 - const topKeysCost = topKeys.value.reduce((sum, stat) => sum + (stat.usage?.cost || 0), 0) + const topKeysCost = topKeys.value.reduce((sum, stat) => { + const usage = getStatUsage(stat) + return sum + (usage?.cost || 0) + }, 0) const totalCost = statsPeriod.value === 'daily' ? aggregatedStats.value.dailyUsage?.cost || 0 @@ -116,7 +134,8 @@ const calculatePercentage = (stat) => { : aggregatedStats.value.monthlyUsage?.cost || 0 if (totalCost === 0) return 0 - const percentage = ((stat.usage?.cost || 0) / totalCost) * 100 + const usage = getStatUsage(stat) + const percentage = ((usage?.cost || 0) / totalCost) * 100 return Math.round(percentage) }