feat(web): unify vehicle source navigation

This commit is contained in:
lingniu
2026-07-20 05:26:08 +08:00
parent c150e45f11
commit 843690cc71
6 changed files with 52 additions and 19 deletions

View File

@@ -100,6 +100,8 @@ test('polls lightweight single-vehicle realtime data and passes its report inter
expect(screen.getByRole('heading', { name: '实时遥测', level: 5 })).toBeInTheDocument();
expect(screen.getByRole('heading', { name: '车辆主档', level: 5 })).toBeInTheDocument();
expect(screen.getByRole('navigation', { name: '单车详情导航' })).toBeInTheDocument();
expect(view.container.querySelector('.v2-vehicle-record-page > .v2-source-evidence')).not.toBeInTheDocument();
expect(screen.getByRole('button', { name: '来源证据' })).toBeInTheDocument();
const telemetryPanel = view.container.querySelector<HTMLElement>('#vehicle-telemetry-panel')!;
const scrollIntoView = vi.fn();
Object.defineProperty(telemetryPanel, 'scrollIntoView', { configurable: true, value: scrollIntoView });
@@ -116,7 +118,7 @@ test('polls lightweight single-vehicle realtime data and passes its report inter
expect(totalMileageSource).toHaveClass('semi-button', 'v2-workspace-metric-action');
expect(totalMileageSource.closest('.semi-card')).toHaveClass('v2-vehicle-live-metric-rail');
expect(totalMileageSource.closest('.v2-live-overview')).toBe(commandCard);
fireEvent.click(locationSource);
fireEvent.click(screen.getByRole('button', { name: '来源证据' }));
await waitFor(() => expect(sourceEvidence).toHaveBeenCalledTimes(1));
});
@@ -278,7 +280,7 @@ test('keeps the mobile vehicle directory primary and applies search from a Semi
expect(view.container.querySelector('.v2-vehicle-directory-table')).not.toBeInTheDocument();
expect(view.container.querySelector('.v2-vehicle-query-panel')).not.toBeInTheDocument();
expect(screen.queryByLabelText('查车操作')).not.toBeInTheDocument();
const toggle = screen.getByRole('button', { name: '修改车辆范围10 辆授权车辆' });
const toggle = screen.getByRole('button', { name: '打开车辆搜索10 辆授权车辆' });
expect(toggle).toHaveAttribute('aria-expanded', 'false');
fireEvent.click(toggle);
const input = screen.getByRole('textbox', { name: '搜索车辆' });
@@ -291,20 +293,20 @@ test('keeps the mobile vehicle directory primary and applies search from a Semi
expect(screen.getByRole('list', { name: '车辆搜索摘要' })).toHaveTextContent(`当前条件${items[0].plate}车牌 / VIN / 终端`);
expect(screen.getAllByRole('button', { name: /打开 .* 车辆档案/ })).toHaveLength(8);
fireEvent.click(screen.getByRole('button', { name: '应用搜索' }));
await waitFor(() => expect(screen.getByRole('button', { name: `修改车辆范围${items[0].plate} · 10 辆匹配` })).toHaveAttribute('aria-expanded', 'false'));
await waitFor(() => expect(screen.getByRole('button', { name: `打开车辆搜索${items[0].plate} · 10 辆匹配` })).toHaveAttribute('aria-expanded', 'false'));
expect(screen.getByRole('heading', { name: '匹配车辆', level: 5 })).toBeInTheDocument();
fireEvent.click(screen.getByRole('button', { name: `修改车辆范围${items[0].plate} · 10 辆匹配` }));
fireEvent.click(screen.getByRole('button', { name: `打开车辆搜索${items[0].plate} · 10 辆匹配` }));
fireEvent.change(screen.getByRole('textbox', { name: '搜索车辆' }), { target: { value: items[1].plate } });
fireEvent.click(screen.getByRole('button', { name: '关闭车辆搜索' }));
await waitFor(() => expect(screen.getByRole('button', { name: `修改车辆范围${items[0].plate} · 10 辆匹配` })).toBeInTheDocument());
await waitFor(() => expect(screen.getByRole('button', { name: `打开车辆搜索${items[0].plate} · 10 辆匹配` })).toBeInTheDocument());
fireEvent.click(screen.getByRole('button', { name: `修改车辆范围${items[0].plate} · 10 辆匹配` }));
fireEvent.click(screen.getByRole('button', { name: `打开车辆搜索${items[0].plate} · 10 辆匹配` }));
fireEvent.click(screen.getByRole('button', { name: '重置范围' }));
expect(screen.getByRole('dialog', { name: '车辆搜索' })).toBeInTheDocument();
expect(screen.getByRole('button', { name: `关闭车辆范围${items[0].plate} · 10 辆匹配` })).toHaveAttribute('aria-expanded', 'true');
expect(screen.getByRole('button', { name: `关闭车辆搜索${items[0].plate} · 10 辆匹配` })).toHaveAttribute('aria-expanded', 'true');
fireEvent.click(screen.getByRole('button', { name: '应用搜索' }));
await waitFor(() => expect(screen.getByRole('button', { name: '修改车辆范围10 辆授权车辆' })).toBeInTheDocument());
await waitFor(() => expect(screen.getByRole('button', { name: '打开车辆搜索10 辆授权车辆' })).toBeInTheDocument());
expect(screen.getByRole('heading', { name: '授权车辆', level: 5 })).toBeInTheDocument();
});