feat(platform): position mileage as statistics query
This commit is contained in:
@@ -41,10 +41,10 @@ const navGroups = [
|
|||||||
{
|
{
|
||||||
title: '轨迹里程',
|
title: '轨迹里程',
|
||||||
audience: '客户',
|
audience: '客户',
|
||||||
description: '回放轨迹、核对里程、导出数据',
|
description: '回放轨迹、统计查询、导出数据',
|
||||||
items: [
|
items: [
|
||||||
{ itemKey: 'history', text: '轨迹回放', icon: <IconMapPin /> },
|
{ itemKey: 'history', text: '轨迹回放', icon: <IconMapPin /> },
|
||||||
{ itemKey: 'mileage', text: '里程统计', icon: <IconBarChartHStroked /> },
|
{ itemKey: 'mileage', text: '统计查询', icon: <IconBarChartHStroked /> },
|
||||||
{ itemKey: 'history-query', text: '数据导出', icon: <IconHistogram /> }
|
{ itemKey: 'history-query', text: '数据导出', icon: <IconHistogram /> }
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1239,8 +1239,8 @@ export function Mileage({
|
|||||||
return (
|
return (
|
||||||
<div className="vp-page">
|
<div className="vp-page">
|
||||||
<PageHeader
|
<PageHeader
|
||||||
title="里程统计"
|
title="统计查询"
|
||||||
description="按车辆汇总每日里程、区间里程和异常差值分析"
|
description="按车辆查询里程、在线影响、区间闭合、异常复核和数据交付"
|
||||||
actions={(
|
actions={(
|
||||||
<Button disabled={!currentVehicleKeyword} onClick={() => onOpenVehicle(currentVehicleKeyword, currentProtocol)}>
|
<Button disabled={!currentVehicleKeyword} onClick={() => onOpenVehicle(currentVehicleKeyword, currentProtocol)}>
|
||||||
当前车辆服务
|
当前车辆服务
|
||||||
@@ -1250,7 +1250,7 @@ export function Mileage({
|
|||||||
<div className="vp-scope-bar">
|
<div className="vp-scope-bar">
|
||||||
<span className="vp-scope-label">当前车辆:{currentVehicleKeyword || '-'}</span>
|
<span className="vp-scope-label">当前车辆:{currentVehicleKeyword || '-'}</span>
|
||||||
<Tag color={currentProtocol ? 'blue' : 'green'}>数据通道:{currentProtocol || '全部数据通道'}</Tag>
|
<Tag color={currentProtocol ? 'blue' : 'green'}>数据通道:{currentProtocol || '全部数据通道'}</Tag>
|
||||||
<Typography.Text type="tertiary">里程统计按当前车辆与数据通道范围汇总。</Typography.Text>
|
<Typography.Text type="tertiary">统计查询以车辆为对象,当前先覆盖里程、在线影响、闭合审计和异常复核。</Typography.Text>
|
||||||
</div>
|
</div>
|
||||||
<Card bordered className="vp-mileage-customer-query-board" bodyStyle={{ padding: 0 }}>
|
<Card bordered className="vp-mileage-customer-query-board" bodyStyle={{ padding: 0 }}>
|
||||||
<div className="vp-mileage-customer-query-summary">
|
<div className="vp-mileage-customer-query-summary">
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ test('renders vehicle platform shell', () => {
|
|||||||
expect(screen.getAllByText('车辆服务').length).toBeGreaterThanOrEqual(1);
|
expect(screen.getAllByText('车辆服务').length).toBeGreaterThanOrEqual(1);
|
||||||
expect(screen.getByText('按 VIN、车牌、手机号管理车辆')).toBeInTheDocument();
|
expect(screen.getByText('按 VIN、车牌、手机号管理车辆')).toBeInTheDocument();
|
||||||
expect(screen.getByText('轨迹里程')).toBeInTheDocument();
|
expect(screen.getByText('轨迹里程')).toBeInTheDocument();
|
||||||
expect(screen.getByText('回放轨迹、核对里程、导出数据')).toBeInTheDocument();
|
expect(screen.getByText('回放轨迹、统计查询、导出数据')).toBeInTheDocument();
|
||||||
expect(screen.getAllByText('告警通知').length).toBeGreaterThanOrEqual(1);
|
expect(screen.getAllByText('告警通知').length).toBeGreaterThanOrEqual(1);
|
||||||
expect(screen.getByText('接入运维')).toBeInTheDocument();
|
expect(screen.getByText('接入运维')).toBeInTheDocument();
|
||||||
expect(screen.getAllByText('客户').length).toBeGreaterThanOrEqual(3);
|
expect(screen.getAllByText('客户').length).toBeGreaterThanOrEqual(3);
|
||||||
@@ -7471,7 +7471,7 @@ test('updates mileage hash when mileage filters are submitted', async () => {
|
|||||||
|
|
||||||
render(<App />);
|
render(<App />);
|
||||||
|
|
||||||
await screen.findByRole('heading', { name: '里程统计' });
|
await screen.findByRole('heading', { name: '统计查询' });
|
||||||
fireEvent.change(screen.getByPlaceholderText('VIN / 车牌 / 手机号 / OEM'), { target: { value: '粤AG18312' } });
|
fireEvent.change(screen.getByPlaceholderText('VIN / 车牌 / 手机号 / OEM'), { target: { value: '粤AG18312' } });
|
||||||
fireEvent.click(screen.getByText('全部数据通道'));
|
fireEvent.click(screen.getByText('全部数据通道'));
|
||||||
fireEvent.click(await screen.findByText('JT808'));
|
fireEvent.click(await screen.findByText('JT808'));
|
||||||
@@ -8816,7 +8816,7 @@ test('opens same-day mileage statistics from raw history row', async () => {
|
|||||||
await waitFor(() => {
|
await waitFor(() => {
|
||||||
expect(window.location.hash).toBe('#/mileage?keyword=VIN-RAW-MILEAGE&protocol=JT808&dateFrom=2026-07-03&dateTo=2026-07-04');
|
expect(window.location.hash).toBe('#/mileage?keyword=VIN-RAW-MILEAGE&protocol=JT808&dateFrom=2026-07-03&dateTo=2026-07-04');
|
||||||
});
|
});
|
||||||
expect(await screen.findByRole('heading', { name: '里程统计' })).toBeInTheDocument();
|
expect(await screen.findByRole('heading', { name: '统计查询' })).toBeInTheDocument();
|
||||||
});
|
});
|
||||||
|
|
||||||
test('opens current vehicle service from history header with current source evidence', async () => {
|
test('opens current vehicle service from history header with current source evidence', async () => {
|
||||||
|
|||||||
Reference in New Issue
Block a user