feat(platform): add mileage delivery navigation

This commit is contained in:
lingniu
2026-07-05 16:47:03 +08:00
parent 89ab43a2dd
commit bc1fb71944
4 changed files with 151 additions and 5 deletions

View File

@@ -7695,7 +7695,7 @@ test('opens vehicle service from mileage row with row source evidence', async ()
render(<App />);
expect(await screen.findByText('VIN-MILEAGE-ROW')).toBeInTheDocument();
expect((await screen.findAllByText('VIN-MILEAGE-ROW')).length).toBeGreaterThan(0);
const serviceButtons = screen.getAllByRole('button', { name: '车辆服务' });
fireEvent.click(serviceButtons[serviceButtons.length - 1]);
@@ -7764,7 +7764,7 @@ test('opens same-day trajectory playback from mileage row for evidence review',
render(<App />);
expect(await screen.findByText('VIN-MILEAGE-TRACK')).toBeInTheDocument();
expect((await screen.findAllByText('VIN-MILEAGE-TRACK')).length).toBeGreaterThan(0);
fireEvent.click(screen.getByRole('button', { name: '核对轨迹' }));
await waitFor(() => {
@@ -7842,7 +7842,7 @@ test('opens same-day raw frame evidence from mileage row', async () => {
render(<App />);
expect(await screen.findByText('VIN-MILEAGE-RAW')).toBeInTheDocument();
expect((await screen.findAllByText('VIN-MILEAGE-RAW')).length).toBeGreaterThan(0);
fireEvent.click(screen.getByRole('button', { name: '核对原始' }));
await waitFor(() => {
@@ -7922,7 +7922,7 @@ test('shows mileage anomaly action guidance', async () => {
render(<App />);
expect(await screen.findByText('VIN-MILEAGE-ANOMALY')).toBeInTheDocument();
expect((await screen.findAllByText('VIN-MILEAGE-ANOMALY')).length).toBeGreaterThan(0);
expect(screen.getByText('核对里程来源')).toBeInTheDocument();
expect(screen.getByText('日里程异常,优先核对当天首末总里程、来源断链和补传数据。')).toBeInTheDocument();
fireEvent.click(screen.getAllByRole('button', { name: '复制证据' })[0]);
@@ -8156,6 +8156,12 @@ test('shows vehicle-first statistics domains for one vehicle service', async ()
expect(screen.getByRole('button', { name: '客户统计查询 发布判断 发布审计' })).toBeInTheDocument();
expect(screen.getByRole('button', { name: '客户统计查询 复核证据 轨迹复核' })).toBeInTheDocument();
expect(screen.getByRole('button', { name: '客户统计查询 明细导出 导出明细' })).toBeInTheDocument();
expect(screen.getByText('客户里程交付导航')).toBeInTheDocument();
expect(screen.getByText('把里程统计变成客户能看懂的交付路径:先确认口径,再回放轨迹,最后导出明细和结论。')).toBeInTheDocument();
expect(screen.getByRole('button', { name: '客户里程交付导航 确认统计口径 复制统计摘要' })).toBeInTheDocument();
expect(screen.getByRole('button', { name: '客户里程交付导航 回放里程轨迹 轨迹复核' })).toBeInTheDocument();
expect(screen.getByRole('button', { name: '客户里程交付导航 导出明细证据 导出CSV' })).toBeInTheDocument();
expect(screen.getByRole('button', { name: '客户里程交付导航 发送交付结论 复制交付包' })).toBeInTheDocument();
expect(await screen.findByText('车辆统计服务总览')).toBeInTheDocument();
expect(screen.getAllByText('里程统计').length).toBeGreaterThanOrEqual(1);
expect(screen.getByText('在线率与离线时长')).toBeInTheDocument();
@@ -8407,7 +8413,7 @@ test('exports current mileage page as CSV', async () => {
render(<App />);
expect(await screen.findByText('VIN-MILEAGE-EXPORT')).toBeInTheDocument();
expect((await screen.findAllByText('VIN-MILEAGE-EXPORT')).length).toBeGreaterThan(0);
fireEvent.click(screen.getByRole('button', { name: '导出里程当前页 CSV' }));
expect(createObjectURL).toHaveBeenCalled();