feat(platform): add map vehicle handoff card

This commit is contained in:
lingniu
2026-07-06 00:41:55 +08:00
parent c00cb0218a
commit b8199dcb5a
3 changed files with 51 additions and 1 deletions

View File

@@ -513,6 +513,29 @@ function mapCustomerPackageText({
].filter(Boolean).join('\n');
}
function selectedMapVehicleHandoffText(row: VehicleRealtimeRow, protocol: string) {
const vin = row.vin || '';
const vehicle = `${row.plate || '-'} / ${vin || '-'} / ${protocol || row.primaryProtocol || '-'}`;
const position = isValidCoordinate(row) ? `${row.longitude},${row.latitude}` : '无有效坐标';
return [
'【地图选中车辆交接卡】',
`车辆:${vehicle}`,
`服务状态:${vehicleServiceStatus(row).label}`,
`在线状态:${row.online ? '在线' : '离线'}`,
`最后上报:${row.lastSeen || '-'}`,
`位置:${position}`,
`速度:${row.speedKmh ?? '-'} km/hSOC${row.socPercent ?? '-'}%;总里程:${row.totalMileageKm ?? '-'} km`,
`问题:${realtimeIssueLabels(row).join('')}`,
`建议动作:${realtimeIssueAction(row)}`,
`车辆服务:${appURL(buildAppHash({ page: 'detail', keyword: vin, protocol }))}`,
`实时地图:${appURL(buildAppHash({ page: 'map', keyword: vin, protocol }))}`,
`轨迹回放:${appURL(buildAppHash({ page: 'history', keyword: vin, protocol }))}`,
`统计查询:${appURL(buildAppHash({ page: 'mileage', keyword: vin, protocol }))}`,
`历史数据:${appURL(buildAppHash({ page: 'history-query', keyword: vin, protocol, filters: { tab: 'raw', includeFields: 'true' } }))}`,
`告警通知:${appURL(buildAppHash({ page: 'alert-events', keyword: vin, protocol }))}`
].join('\n');
}
function mapCustomerDecisionText({
filters,
rows,
@@ -1065,6 +1088,13 @@ export function Realtime({
filters: { tab: 'raw', includeFields: 'true' }
});
};
const copySelectedMapVehicleHandoff = () => {
if (!selectedMapRow || !canOpenVehicle(selectedMapRow.vin)) {
Toast.warning('请先选择可交接的车辆');
return;
}
copyText(selectedMapVehicleHandoffText(selectedMapRow, selectedVehicleProtocol), '选中车辆交接卡');
};
const mapVehicleWorkItems = [
{
title: '车辆服务',
@@ -2213,6 +2243,17 @@ export function Realtime({
<strong></strong>
<span>{selectedMapRow ? selectedVehicleProtocol || selectedMapRow.primaryProtocol || '全部通道' : '等待选择'}</span>
</button>
<button
type="button"
className="vp-map-selected-service-action"
disabled={!selectedMapRow || !canOpenVehicle(selectedMapRow.vin)}
onClick={copySelectedMapVehicleHandoff}
aria-label="地图选中车辆 交接卡 复制交接"
>
<Tag color="blue"></Tag>
<strong></strong>
<span>{selectedMapRow ? realtimeIssueLabels(selectedMapRow)[0] : '等待选择'}</span>
</button>
</div>
</div>