From 97ab649d16f9f85fc2167bf2deb237596053251f Mon Sep 17 00:00:00 2001 From: yangjianbo Date: Sat, 27 Dec 2025 23:08:38 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E4=BB=AA=E8=A1=A8=E7=9B=98):=20=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E6=9C=80=E8=BF=91=E7=94=A8=E9=87=8F=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E6=97=A5=E6=9C=9F=E5=8F=82=E6=95=B0=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题:仪表盘“最近用量”调用 /usage 时传入完整 ISO 时间戳(含时分秒/时区),后端 start_date/end_date 仅接受 YYYY-MM-DD,导致请求参数校验失败,页面无法正常展示最近用量。 解决: - loadRecentUsage 改为传入 YYYY-MM-DD(从 toISOString() 取日期部分),与后端参数格式约定保持一致 - 补充注释说明:后端会将 end_date 扩展到当日结束时间,以及 toISOString() 为 UTC 可能带来的统计口径差异 - 同步修正 usageAPI.getByDateRange 的参数注释,避免后续误用 验证:npm -C frontend run build --- frontend/src/api/usage.ts | 4 ++-- frontend/src/views/user/DashboardView.vue | 9 +++++++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/frontend/src/api/usage.ts b/frontend/src/api/usage.ts index 20581603..caf763de 100644 --- a/frontend/src/api/usage.ts +++ b/frontend/src/api/usage.ts @@ -148,8 +148,8 @@ export async function getStatsByDateRange( /** * Get usage by date range - * @param startDate - Start date (ISO format) - * @param endDate - End date (ISO format) + * @param startDate - Start date (YYYY-MM-DD format) + * @param endDate - End date (YYYY-MM-DD format) * @param apiKeyId - Optional API key ID filter * @returns Usage logs within date range */ diff --git a/frontend/src/views/user/DashboardView.vue b/frontend/src/views/user/DashboardView.vue index f214c98a..199a0efc 100644 --- a/frontend/src/views/user/DashboardView.vue +++ b/frontend/src/views/user/DashboardView.vue @@ -987,8 +987,13 @@ const loadChartData = async () => { const loadRecentUsage = async () => { loadingUsage.value = true try { - const endDate = new Date().toISOString() - const startDate = new Date(Date.now() - 7 * 24 * 60 * 60 * 1000).toISOString() + // 后端 /usage 查询参数 start_date/end_date 仅接受 YYYY-MM-DD(见 backend usage handler 的校验逻辑)。 + // 同时后端会将 end_date 自动扩展到当天 23:59:59.999...,因此前端只需要传「日期」即可。 + // 注意:toISOString() 生成的是 UTC 日期字符串;如果需要按本地/服务端时区对齐统计口径, + // 请改用时区感知的日期格式化方法(例如 Intl.DateTimeFormat 指定 timeZone)。 + const now = new Date() + const endDate = now.toISOString().split('T')[0] + const startDate = new Date(Date.now() - 7 * 24 * 60 * 60 * 1000).toISOString().split('T')[0] const usageResponse = await usageAPI.getByDateRange(startDate, endDate) recentUsage.value = usageResponse.items.slice(0, 5) } catch (error) {