fix(dashboard): 修复今日统计口径并对齐每日统计日期显示

- 前端请求 /api/dashboard/stats 时传递 timezone 和 tz_offset_minutes
- 后端仪表盘汇总过滤 pending/streaming 和占位 provider,修正今日请求/Token/费用统计
- 今日 Token 卡片增加 K/M 单位显示,并补充写缓存/读缓存 Token 信息
- 修复每日统计 YYYY-MM-DD 被按 UTC 解析导致的“今天/昨天”串天问题
- 补充前后端回归测试,覆盖统计口径和日期解析场景
This commit is contained in:
AAEE86
2026-04-12 11:20:39 +08:00
parent ab82841426
commit 3fcb2b1514
5 changed files with 154 additions and 26 deletions

View File

@@ -819,6 +819,7 @@ import {
DollarSign,
Key,
Hash,
Zap,
Bell,
AlertCircle,
AlertTriangle,
@@ -830,6 +831,7 @@ import {
Shuffle
} from 'lucide-vue-next'
import { formatTokens, formatCurrency } from '@/utils/format'
import { parseDateLike } from '@/utils/date'
import { marked } from 'marked'
import { sanitizeMarkdown } from '@/utils/sanitize'
import type { ChartData, ChartOptions, ChartDataset, TooltipItem } from 'chart.js'
@@ -1000,7 +1002,7 @@ const selectedAnnouncement = ref<Announcement | null>(null)
const detailDialogOpen = ref(false)
const iconMap: Record<string, unknown> = {
Users, Activity, TrendingUp, DollarSign, Key, Hash, Database
Users, Activity, TrendingUp, DollarSign, Key, Hash, Zap, Database
}
// 空状态占位卡片
@@ -1315,7 +1317,10 @@ onBeforeUnmount(() => {
async function loadDashboardData() {
loading.value = true
try {
const statsData = await dashboardApi.getStats()
const statsData = await dashboardApi.getStats({
timezone: dailyTimeRange.value.timezone,
tz_offset_minutes: dailyTimeRange.value.tz_offset_minutes
})
stats.value = statsData.stats.map(stat => ({
...stat,
icon: iconMap[stat.icon] || Activity
@@ -1382,7 +1387,7 @@ function scheduleDailyStatsLoad() {
watch(dailyTimeRange, scheduleDailyStatsLoad, { deep: true })
function formatDate(dateString: string): string {
const date = new Date(dateString)
const date = parseDateLike(dateString)
const today = new Date()
const yesterday = new Date(today)
yesterday.setDate(yesterday.getDate() - 1)
@@ -1392,7 +1397,7 @@ function formatDate(dateString: string): string {
}
function formatDateForChart(dateString: string): string {
const date = new Date(dateString)
const date = parseDateLike(dateString)
const today = new Date()
const yesterday = new Date(today)
yesterday.setDate(yesterday.getDate() - 1)