feat(platform): align vehicle center with statistics query

This commit is contained in:
lingniu
2026-07-05 15:10:40 +08:00
parent dab46d2595
commit d6ae2688a8
2 changed files with 14 additions and 14 deletions

View File

@@ -298,13 +298,13 @@ function vehicleCustomerLookupText({
`在线车辆:${(summary?.onlineVehicles ?? 0).toLocaleString()};待绑定:${(summary?.unboundVehicles ?? 0).toLocaleString()};暂无来源:${(summary?.noDataVehicles ?? 0).toLocaleString()};档案不完整:${(summary?.archiveIncompleteVehicles ?? 0).toLocaleString()}`,
'',
serviceMode === '单车服务'
? '推荐路径:先看车辆档案和实时监控,再按需要进入轨迹回放、里程统计、历史数据导出。'
? '推荐路径:先看车辆档案和实时监控,再按需要进入轨迹回放、统计查询、历史数据导出。'
: '推荐路径:先筛在线/离线/无来源/待绑定车辆,再进入地图态势或导出处置清单。',
`车辆服务:${appURL(scopeHash)}`,
`实时监控:${appURL(buildAppHash({ page: 'realtime', ...singleVehicleFilters }))}`,
`车辆地图:${appURL(buildAppHash({ page: 'map', keyword: filters.keyword, protocol: filters.protocol, filters: mapFilters }))}`,
`轨迹回放:${appURL(buildAppHash({ page: 'history', ...singleVehicleFilters, filters: { tab: 'location' } }))}`,
`里程统计:${appURL(buildAppHash({ page: 'mileage', ...singleVehicleFilters }))}`,
`统计查询${appURL(buildAppHash({ page: 'mileage', ...singleVehicleFilters }))}`,
`历史数据:${appURL(buildAppHash({ page: 'history', ...singleVehicleFilters, filters: { tab: 'raw', includeFields: 'true' } }))}`
];
return lines.join('\n');
@@ -347,13 +347,13 @@ function vehicleCustomerServicePackageText({
`车辆地图:${appURL(buildAppHash({ page: 'map', keyword: filters.keyword, protocol: filters.protocol, filters: mapFilters }))}`,
`实时监控:${appURL(buildAppHash({ page: 'realtime', ...singleVehicleFilters, filters: filters.keyword?.trim() ? undefined : { ...filters, online: filters.online || 'online' } }))}`,
`轨迹回放:${appURL(buildAppHash({ page: 'history', ...singleVehicleFilters, filters: { tab: 'location' } }))}`,
`里程统计:${appURL(buildAppHash({ page: 'mileage', ...singleVehicleFilters }))}`,
`统计查询${appURL(buildAppHash({ page: 'mileage', ...singleVehicleFilters }))}`,
`告警通知:${appURL(buildAppHash({ page: 'alert-events', ...singleVehicleFilters, filters }))}`,
`历史数据导出:${appURL(buildAppHash({ page: 'history', ...singleVehicleFilters, filters: { tab: 'raw', includeFields: 'true' } }))}`,
'',
'交付口径:',
'1. 客户先看地图与实时状态,判断车辆是否在线和位置是否可信',
'2. 单车问题进入轨迹回放和里程统计,确认时间窗内发生了什么',
'2. 单车问题进入轨迹回放和统计查询,确认时间窗内发生了什么',
'3. 异常车辆进入告警通知,带上原始记录和历史数据作为证据',
'4. 对外交付时优先使用车辆口径,协议来源只作为证据说明'
].join('\n');
@@ -697,9 +697,9 @@ export function Vehicles({
onClick: () => onOpenHistory?.({ ...serviceScopeFilters, tab: 'location' })
},
{
label: '里程统计',
label: '统计查询',
value: filters.keyword?.trim() ? '区间核对' : '车辆口径',
detail: filters.keyword?.trim() ? '按当前车辆核对区间里程日里程。' : '输入车辆后查看里程闭合统计。',
detail: filters.keyword?.trim() ? '按当前车辆核对区间里程日里程和统计结果。' : '输入车辆后查看时间窗统计结果。',
color: filters.keyword?.trim() ? 'green' as const : 'grey' as const,
disabled: !onOpenMileage || !filters.keyword?.trim(),
onClick: () => onOpenMileage?.(serviceScopeFilters)
@@ -780,11 +780,11 @@ export function Vehicles({
onClick: () => onOpenHistory?.({ ...serviceScopeFilters, tab: 'location' })
},
{
label: '里程统计',
label: '统计查询',
value: filters.keyword?.trim() ? '区间复核' : '单车后可用',
detail: '核对时间窗里程、日里程和累计口径,支撑 BI 与客户问询。',
color: filters.keyword?.trim() ? 'orange' as const : 'grey' as const,
action: '查看里程',
action: '统计查询',
disabled: !onOpenMileage || !filters.keyword?.trim(),
onClick: () => onOpenMileage?.(serviceScopeFilters)
},
@@ -914,7 +914,7 @@ export function Vehicles({
return (
<div className="vp-page">
<PageHeader title="车辆服务" description="围绕车辆完成实时监控、地图查看、轨迹回放、里程统计和数据导出,协议来源只作为证据过滤条件" />
<PageHeader title="车辆服务" description="围绕车辆完成实时监控、地图查看、轨迹回放、统计查询和数据导出,协议来源只作为证据过滤条件" />
<Card bordered title="车辆服务台">
<div className="vp-vehicle-service-desk">
<div className="vp-vehicle-service-summary">
@@ -1022,7 +1022,7 @@ export function Vehicles({
</Space>
<strong>{filters.keyword?.trim() || `${(summary?.totalVehicles ?? pagination.total).toLocaleString()} 辆车`}</strong>
<span>
GB32960808 MQTT
GB32960808 MQTT
</span>
<Space wrap>
<Button size="small" theme="solid" type="primary" icon={<IconCopy />} onClick={copyCustomerServicePackage}></Button>

View File

@@ -2073,14 +2073,14 @@ test('shows vehicle service result summary on vehicle list filters', async () =>
expect(screen.getByText('客户车辆服务交付包')).toBeInTheDocument();
expect(screen.getByText('客户交付')).toBeInTheDocument();
expect(screen.getByText('车辆池包')).toBeInTheDocument();
expect(screen.getByText('把车辆地图、实时监控、轨迹回放、里程统计、告警通知和历史导出放在同一份服务包里,客户不用理解 GB32960、808 或 MQTT 的差异。')).toBeInTheDocument();
expect(screen.getByText('把车辆地图、实时监控、轨迹回放、统计查询、告警通知和历史导出放在同一份服务包里,客户不用理解 GB32960、808 或 MQTT 的差异。')).toBeInTheDocument();
expect(screen.getByRole('button', { name: '客户车辆服务交付 车辆地图 打开地图' })).toBeInTheDocument();
expect(screen.getByRole('button', { name: '客户车辆服务交付 轨迹回放 回放轨迹' })).toBeInTheDocument();
expect(screen.getByRole('button', { name: '客户车辆服务交付 里程统计 查看里程' })).toBeInTheDocument();
expect(screen.getByRole('button', { name: '客户车辆服务交付 统计查询 统计查询' })).toBeInTheDocument();
expect(screen.getByRole('button', { name: '客户车辆服务交付 告警通知 查看告警' })).toBeInTheDocument();
expect(screen.getByRole('button', { name: '客户车辆服务交付 历史导出 导出清单' })).toBeInTheDocument();
expect(screen.getAllByText('车辆地图').length).toBeGreaterThanOrEqual(1);
expect(screen.getAllByText('里程统计').length).toBeGreaterThanOrEqual(1);
expect(screen.getAllByText('统计查询').length).toBeGreaterThanOrEqual(1);
expect(screen.getAllByText('数据导出').length).toBeGreaterThanOrEqual(1);
expect(screen.getByText('当前页服务判读')).toBeInTheDocument();
expect(screen.getByText('建议下一步')).toBeInTheDocument();
@@ -2127,7 +2127,7 @@ test('shows vehicle service result summary on vehicle list filters', async () =>
expect(writeText).toHaveBeenCalledWith(expect.stringContaining('服务范围:当前车辆池'));
expect(writeText).toHaveBeenCalledWith(expect.stringContaining('车辆地图http://localhost:3000/#/map?'));
expect(writeText).toHaveBeenCalledWith(expect.stringContaining('轨迹回放http://localhost:3000/#/history?tab=location'));
expect(writeText).toHaveBeenCalledWith(expect.stringContaining('里程统计http://localhost:3000/#/mileage'));
expect(writeText).toHaveBeenCalledWith(expect.stringContaining('统计查询http://localhost:3000/#/mileage'));
expect(writeText).toHaveBeenCalledWith(expect.stringContaining('告警通知http://localhost:3000/#/alert-events?coverage=multi'));
expect(writeText).toHaveBeenCalledWith(expect.stringContaining('历史数据导出http://localhost:3000/#/history?tab=raw&includeFields=true'));
});