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 2d444961..236d3ed0 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
@@ -348,10 +348,14 @@ test('keeps the mobile track canvas focused when the viewport crosses the respon
test('keeps one clear mobile query entry before a vehicle is selected', async () => {
Object.defineProperty(window, 'matchMedia', { configurable: true, value: vi.fn(() => ({ matches: true, addEventListener: vi.fn(), removeEventListener: vi.fn() })) });
const client = new QueryClient({ defaultOptions: { queries: { retry: false } } });
- render();
+ const view = render();
expect(await screen.findByRole('button', { name: /选择车辆/ })).toBeInTheDocument();
expect(screen.queryByRole('button', { name: '打开轨迹详情' })).not.toBeInTheDocument();
+ expect(screen.queryByRole('toolbar', { name: '地图轨迹工具' })).not.toBeInTheDocument();
+ expect(screen.queryByRole('slider', { name: '轨迹播放进度' })).not.toBeInTheDocument();
+ expect(view.container.querySelector('.v2-track-playback-dock')).not.toBeInTheDocument();
+ expect(view.container.querySelector('.v2-workspace-empty-guide-eyebrow')).not.toBeInTheDocument();
fireEvent.click(screen.getByRole('button', { name: /选择车辆/ }));
expect(await screen.findByRole('dialog', { name: '轨迹查询与明细' })).toBeInTheDocument();
expect(screen.getByRole('list', { name: '轨迹查询与明细摘要' })).toHaveTextContent('查询状态待查询请先选择车辆');
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 e1aa1296..248625ef 100644
--- a/vehicle-data-platform/apps/web/src/v2/pages/TrackPage.tsx
+++ b/vehicle-data-platform/apps/web/src/v2/pages/TrackPage.tsx
@@ -509,11 +509,11 @@ export default function TrackPage() {
{number(track.summary.distanceKm)} km · {track.stops.length} 个停留
: null}
-
+ {track?.points.length ?
} disabled={!points.length} onClick={() => setFollow((value) => !value)}>{follow ? '跟随车辆' : '自由浏览'}
: } disabled={!track?.stops.length} onClick={() => setShowStops((value) => !value)}>停留点
} disabled={!track?.points.length} onClick={() => track && downloadTrackCsv(track)}>导出
-
+
: null}
{track?.points.length ? <>
@@ -533,7 +533,6 @@ export default function TrackPage() {
{playing ? '播放中,暂停地址解析' : addressSettling ? '位置已变化,等待地址解析…' : addressQuery.isFetching ? '地址解析中…' : addressQuery.data?.formattedAddress || `${current?.longitude.toFixed(6)}, ${current?.latitude.toFixed(6)}`}
> : }
title="先选择车辆,再开始轨迹回放"
description="地图会呈现完整路径、停留点、事件点与逐帧播放位置。"
@@ -548,7 +547,7 @@ export default function TrackPage() {
{query.isFetching ? : null}
{query.isError ? query.refetch()} />
: null}
-
+ {track?.points.length ?
{track ?
:
}
selectIndex(Number(value))} disabled={!points.length} showBoundary={false} tipFormatter={(value) => `第 ${Number(value) + 1} / ${points.length} 个数据点`} />
@@ -563,7 +562,7 @@ export default function TrackPage() {
} onClick={() => selectIndex(0)} disabled={!boundedIndex} />
-
+ : null}
;
}