From 345ed4726fbbb5a113a3fe22ff7dfb6a8ea243c7 Mon Sep 17 00:00:00 2001
From: yeg <1347747024@qq.com>
Date: 星期三, 09 九月 2026 01:25:44 +0800
Subject: [PATCH] 统一首页香港时区统计与错误状态

---
 src/views/Dashboard.vue |   17 +++++++++++++----
 1 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/src/views/Dashboard.vue b/src/views/Dashboard.vue
index 510bc46..49f556f 100644
--- a/src/views/Dashboard.vue
+++ b/src/views/Dashboard.vue
@@ -20,6 +20,12 @@
 const { records } = useTests()
 const { records: todoRecords } = useTodos()
 const currentOwner = computed(() => getCurrentUser()?.displayName || getCurrentUser()?.username || 'Admin')
+const dashboardError = ref('')
+const hongKongKey = (date: Date) => {
+  const parts = new Intl.DateTimeFormat('zh-CN', { timeZone: 'Asia/Hong_Kong', year: 'numeric', month: '2-digit', day: '2-digit' }).formatToParts(date)
+  const value = (type: string) => parts.find(item => item.type === type)?.value || ''
+  return `${value('year')}-${value('month')}-${value('day')}`
+}
 onMounted(async () => {
   try {
     const [tests, groups] = await Promise.all([
@@ -30,7 +36,9 @@
     // 首页的电池组总数来自后端列表,避免用页面种子推断业务事实。
     batteryGroupCount.value = groups.total
   } catch {
-    // 页面保留当前已加载数据,错误提示由全局请求层处理。
+    dashboardError.value = '首页数据加载失败,请刷新后重试'
+    records.value = []
+    batteryGroupCount.value = 0
   }
 })
 const batteryGroupCount = ref(0)
@@ -81,7 +89,7 @@
 
 const periodData = computed(() => {
   const now = new Date()
-  const dayKey = (date: Date) => `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`
+  const dayKey = (date: Date) => hongKongKey(date)
   const count = (key: string) => records.value.filter(item => item.createdAt.slice(0, key.length) === key).length
   const weekLabels: string[] = []; const weekValues: number[] = []
   for (let index = 6; index >= 0; index -= 1) { const date = new Date(now); date.setDate(now.getDate() - index); const key = dayKey(date); weekLabels.push(`${date.getMonth() + 1}/${date.getDate()}`); weekValues.push(count(key)) }
@@ -128,6 +136,7 @@
 
 <template>
   <div class="dashboard">
+    <el-alert v-if="dashboardError" :title="dashboardError" type="error" :closable="false" show-icon />
     <section class="welcome-row">
       <div>
         <h2>欢迎回来,Admin</h2>
@@ -178,8 +187,8 @@
         <div class="metrics">
           <article><span>总测试数</span><strong>{{ records.length }}</strong></article>
           <article><span>总电池组数</span><strong>{{ batteryGroupCount }}</strong></article>
-          <article><span>日新增测试</span><strong>{{ records.filter(item => item.createdAt.slice(0, 10) === new Date().toISOString().slice(0, 10)).length }}</strong></article>
-          <article><span>月新增测试</span><strong>{{ records.filter(item => item.createdAt.slice(0, 7) === new Date().toISOString().slice(0, 7)).length }}</strong></article>
+          <article><span>日新增测试</span><strong>{{ records.filter(item => item.createdAt.slice(0, 10) === hongKongKey(new Date())).length }}</strong></article>
+          <article><span>月新增测试</span><strong>{{ records.filter(item => item.createdAt.slice(0, 7) === hongKongKey(new Date()).slice(0, 7)).length }}</strong></article>
         </div>
 
         <section class="panel chart-panel">

--
Gitblit v1.7.1