diff --git a/backend/internal/services/stock_sync.go b/backend/internal/services/stock_sync.go index 7e9ad23..b522922 100644 --- a/backend/internal/services/stock_sync.go +++ b/backend/internal/services/stock_sync.go @@ -147,7 +147,10 @@ func (s *StockSyncService) doSync(ctx context.Context) (int, error) { func (s *StockSyncService) LatestJob(ctx context.Context) (*models.StockSyncJob, error) { var job models.StockSyncJob - if err := s.db.WithContext(ctx).Order("started_at DESC").First(&job).Error; err != nil { + if err := s.db.WithContext(ctx). + Where("started_at > ?", time.Time{}). + Order("started_at DESC"). + First(&job).Error; err != nil { if err == gorm.ErrRecordNotFound { return nil, nil } diff --git a/frontend/src/components/StockOverview.tsx b/frontend/src/components/StockOverview.tsx index b2c6561..c1dde35 100644 --- a/frontend/src/components/StockOverview.tsx +++ b/frontend/src/components/StockOverview.tsx @@ -233,9 +233,14 @@ function StockList({ function formatSyncStatus(job: SyncJob): string { if (job.status === 'running') return '同步中…' - const timeStr = job.finished_at - ? new Date(job.finished_at).toLocaleString() - : new Date(job.started_at).toLocaleString() + const ts = job.finished_at || job.started_at + let timeStr = '时间未知' + if (ts && ts !== '0001-01-01T00:00:00Z') { + const d = new Date(ts) + if (!isNaN(d.getTime())) { + timeStr = d.toLocaleString() + } + } const statusText = job.status === 'success' ? '成功' : '失败' return `${statusText} · ${timeStr}` }