diff --git a/vehicle-data-platform/apps/web/src/v2/pages/TrackPage.test.tsx b/vehicle-data-platform/apps/web/src/v2/pages/TrackPage.test.tsx index fbbe0bb4..5f092b3c 100644 --- a/vehicle-data-platform/apps/web/src/v2/pages/TrackPage.test.tsx +++ b/vehicle-data-platform/apps/web/src/v2/pages/TrackPage.test.tsx @@ -172,11 +172,15 @@ test('renders a map-first replay workspace and connects stop, event, and panel i const view = render(); expect((await screen.findAllByText('粤A12345')).length).toBeGreaterThan(0); - expect(view.container.querySelector('.v2-track-query-card.semi-card')).toHaveClass('is-collapsed'); - expect(view.container.querySelector('.v2-track-rail-result.semi-card')).toBeInTheDocument(); + expect(view.container.querySelector('.v2-track-rail-shell.semi-card')).toBeInTheDocument(); + expect(view.container.querySelector('.v2-track-query-panel')).toHaveClass('is-collapsed'); + expect(view.container.querySelector('.v2-track-rail-result')).toBeInTheDocument(); expect(screen.getByRole('button', { name: '修改条件' })).toHaveAttribute('aria-expanded', 'false'); expect(screen.queryByRole('textbox', { name: '搜索轨迹车辆' })).not.toBeInTheDocument(); expect(view.container.querySelector('.v2-track-current-card.semi-card')).toBeInTheDocument(); + expect(view.container.querySelector('.v2-track-current-coverage')).toBeInTheDocument(); + expect(view.container.querySelector('.v2-track-coverage-float')).not.toBeInTheDocument(); + expect(screen.getByRole('toolbar', { name: '地图轨迹工具' })).toBeInTheDocument(); expect(view.container.querySelector('.v2-track-playback-dock.semi-card')).toBeInTheDocument(); expect(screen.getByTestId('track-map')).toHaveAttribute('data-active-index', '0'); expect(screen.getByText('停留 00:05:00 · 1 个点')).toBeInTheDocument(); @@ -198,7 +202,8 @@ test('renders a map-first replay workspace and connects stop, event, and panel i await waitFor(() => expect(client.getQueryCache().findAll({ queryKey: ['track-address'] })).toHaveLength(1)); fireEvent.click(screen.getByRole('tab', { name: '概览' })); - expect(view.container.querySelectorAll('.v2-track-overview-card.semi-card')).toHaveLength(3); + expect(view.container.querySelectorAll('.v2-track-overview-section')).toHaveLength(3); + expect(view.container.querySelectorAll('.v2-track-overview-section.semi-card')).toHaveLength(0); expect(view.container.querySelector('.v2-track-overview-descriptions.semi-descriptions')).toBeInTheDocument(); expect(view.container.querySelector('.v2-track-source-list.semi-list')).toBeInTheDocument(); expect(view.container.querySelectorAll('.v2-track-source-item.semi-list-item')).toHaveLength(1); diff --git a/vehicle-data-platform/apps/web/src/v2/pages/TrackPage.tsx b/vehicle-data-platform/apps/web/src/v2/pages/TrackPage.tsx index 93135ff5..3d4ec856 100644 --- a/vehicle-data-platform/apps/web/src/v2/pages/TrackPage.tsx +++ b/vehicle-data-platform/apps/web/src/v2/pages/TrackPage.tsx @@ -153,7 +153,7 @@ function VehiclePicker({ value, onChange, onSelect }: { value: string; onChange: function OverviewPanel({ track }: { track: TrackPlaybackResponse }) { return
- +
{track.sampled ? '地图已抽稀' : '完整点集'}} />
- - +
+
{track.coverage.totalPoints.toLocaleString('zh-CN')} 个源点} />
{track.sources.map((source) => {source.protocol}{source.pointCount.toLocaleString('zh-CN')} 点{time(source.startTime)}–{time(source.endTime)})}
- - +
+
{track.quality.status === 'good' ? '通过' : '需关注'}} />

{track.quality.evidence}

无效 {track.quality.invalidCoordinatePoints} · 重复 {track.quality.duplicatePoints} · 漂移 {track.quality.driftPoints} · 大间隔 {track.quality.largeGapCount}
- +
; } @@ -193,56 +193,58 @@ const TrackRail = memo(function TrackRail({ draft, track, loading, activeStopInd const activePreset = trackPreset(draft); const choosePreset = (daysBack: number) => onDraft({ ...draft, ...trackWindow(daysBack, daysBack > 0) }); return