From 4251ea52354d8bc1c4b773cb43bb61b2fe9c21e7 Mon Sep 17 00:00:00 2001 From: lingniu Date: Sat, 4 Jul 2026 07:58:24 +0800 Subject: [PATCH] fix(platform): align topbar missing source status --- vehicle-data-platform/apps/web/src/App.tsx | 11 +++++++++++ .../apps/web/src/test/App.test.tsx | 17 +++++------------ 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/vehicle-data-platform/apps/web/src/App.tsx b/vehicle-data-platform/apps/web/src/App.tsx index a1f8a02f..539a155f 100644 --- a/vehicle-data-platform/apps/web/src/App.tsx +++ b/vehicle-data-platform/apps/web/src/App.tsx @@ -417,6 +417,7 @@ function normalizeHistoryFilterValues(filters: Record = {}): Re function serviceStatusFromOverview(overview: VehicleServiceOverview): VehicleServiceStatus { const sourceCount = overview.sourceCount; const onlineSourceCount = overview.onlineSourceCount; + const missingProtocols = overview.sourceConsistency?.missingProtocols ?? []; if (!overview.vin) { return { status: 'identity_required', @@ -447,6 +448,16 @@ function serviceStatusFromOverview(overview: VehicleServiceOverview): VehicleSer onlineSourceCount }; } + if (missingProtocols.length > 0) { + return { + status: 'degraded', + severity: 'warning', + title: '来源不完整', + detail: `${onlineSourceCount}/${sourceCount} 个来源在线,车辆服务可用但缺少 ${missingProtocols.join('、')} 来源。`, + sourceCount, + onlineSourceCount + }; + } if (onlineSourceCount < sourceCount) { return { status: 'degraded', diff --git a/vehicle-data-platform/apps/web/src/test/App.test.tsx b/vehicle-data-platform/apps/web/src/test/App.test.tsx index 885c0472..d8dc4535 100644 --- a/vehicle-data-platform/apps/web/src/test/App.test.tsx +++ b/vehicle-data-platform/apps/web/src/test/App.test.tsx @@ -619,25 +619,18 @@ test('shows resolved vehicle service status after topbar search', async () => { rawCount: 0, mileageCount: 0, qualityIssueCount: 0, - serviceStatus: { - status: 'degraded', - severity: 'warning', - title: '后端判定部分离线', - detail: '后端统一车辆服务状态', - sourceCount: 2, - onlineSourceCount: 1 - }, sourceConsistency: { sourceCount: 2, onlineSourceCount: 1, locatedSourceCount: 2, + missingProtocols: ['YUTONG_MQTT'], mileageDeltaKm: 0, sourceTimeDeltaSeconds: 0, scope: 'all_sources', status: 'degraded', severity: 'warning', - title: '部分来源离线', - detail: '1/2 个来源在线,车辆服务可用但需要关注离线来源。' + title: '来源不完整', + detail: '1/2 个来源在线,车辆服务可用但缺少 YUTONG_MQTT 来源。' } }, traceId: 'trace-test', @@ -681,9 +674,9 @@ test('shows resolved vehicle service status after topbar search', async () => { fireEvent.change(screen.getByPlaceholderText('搜索 VIN / 车牌 / 手机号'), { target: { value: '粤AG18312' } }); fireEvent.click(screen.getByRole('button', { name: '查询车辆' })); - expect(await screen.findByText('当前车辆:后端判定部分离线')).toBeInTheDocument(); + expect(await screen.findByText('当前车辆:来源不完整')).toBeInTheDocument(); expect(screen.getByText('粤AG18312 / LB9A32A24R0LS1426')).toBeInTheDocument(); - expect(screen.getByText('一致性:部分来源离线')).toBeInTheDocument(); + expect(screen.getByText('一致性:来源不完整')).toBeInTheDocument(); expect(fetchMock).toHaveBeenCalledWith(expect.stringContaining('/api/vehicle-service/overview?keyword=%E7%B2%A4AG18312'), undefined); expect(fetchMock).not.toHaveBeenCalledWith(expect.stringContaining('/api/vehicles/resolve'), undefined); });