feat(platform): add map situation workspace

This commit is contained in:
lingniu
2026-07-04 17:01:49 +08:00
parent 9ac2b90d12
commit 255afe8a84
6 changed files with 45 additions and 5 deletions

View File

@@ -26,7 +26,7 @@ export default function App() {
initialRoute.page === 'vehicles' ? vehicleFiltersFromRoute(initialRoute) : {}
);
const [realtimeFilters, setRealtimeFilters] = useState<Record<string, string>>(
initialRoute.page === 'realtime' ? realtimeFiltersFromRoute(initialRoute) : {}
initialRoute.page === 'realtime' || initialRoute.page === 'map' ? realtimeFiltersFromRoute(initialRoute) : {}
);
const [historyFilters, setHistoryFilters] = useState<Record<string, string>>(
initialRoute.page === 'history' ? historyFiltersFromRoute(initialRoute) : {}
@@ -111,7 +111,7 @@ export default function App() {
if (route.page === 'vehicles') {
setVehicleFilters(vehicleFiltersFromRoute(route));
}
if (route.page === 'realtime') {
if (route.page === 'realtime' || route.page === 'map') {
setRealtimeFilters(realtimeFiltersFromRoute(route));
}
if (route.page === 'history') {
@@ -167,6 +167,10 @@ export default function App() {
replaceRealtimeHash(realtimeFilters);
return;
}
if (page === 'map') {
replaceMapHash(realtimeFilters);
return;
}
replaceHash(page);
};
@@ -191,11 +195,21 @@ export default function App() {
replaceRealtimeHash(filters);
};
const updateMapFilters = (filters: Record<string, string> = {}) => {
setRealtimeFilters(filters);
replaceMapHash(filters);
};
const replaceRealtimeHash = (filters: Record<string, string> = {}) => {
const { keyword, protocol, ...restFilters } = filters;
replaceHash('realtime', keyword, protocol, restFilters);
};
const replaceMapHash = (filters: Record<string, string> = {}) => {
const { keyword, protocol, ...restFilters } = filters;
replaceHash('map', keyword, protocol, restFilters);
};
const updateHistoryFilters = (filters: Record<string, unknown> = {}, tab = historyTab) => {
const hasKeywordInput = Object.prototype.hasOwnProperty.call(filters, 'keyword');
const nextFilters = normalizeHistoryFilterValues(filters);
@@ -408,6 +422,7 @@ export default function App() {
const pages: Record<PageKey, JSX.Element> = {
dashboard: <Dashboard onOpenVehicle={openVehicle} onOpenQuality={openQuality} onOpenRealtime={openRealtime} onOpenVehicles={openVehicles} onOpenHistory={openHistoryWithFilters} onOpenMileage={openMileageWithFilters} />,
vehicles: <Vehicles onOpenVehicle={openVehicle} onOpenQuality={openQuality} onFiltersChange={updateVehicleFilters} initialFilters={vehicleFilters} />,
map: <Realtime title="地图态势" description="以车辆服务为中心查看实时位置、在线状态、来源一致性和高德地图接入状态" onOpenVehicle={openVehicle} onOpenHistory={openHistoryForVehicle} onOpenQuality={openQuality} onFiltersChange={updateMapFilters} initialFilters={realtimeFilters} />,
realtime: <Realtime onOpenVehicle={openVehicle} onOpenHistory={openHistoryForVehicle} onOpenQuality={openQuality} onFiltersChange={updateRealtimeFilters} initialFilters={realtimeFilters} />,
detail: <VehicleDetail vin={activeVin} protocol={activeProtocol} platformRelease={platformRelease} onOpenRealtime={openRealtimeForVehicle} onOpenHistory={openHistoryForVehicle} onOpenRaw={openRawForVehicle} onOpenMileage={openMileageForVehicle} onOpenVehicles={openVehicles} onOpenQuality={openQuality} onOpenHistoryEvidence={openHistoryWithFilters} onOpenRawEvidence={openRawWithFilters} onQueryChange={updateVehicleDetailQuery} />,
history: <History initialVin={analysisVin} initialProtocol={activeProtocol} initialTab={historyTab} initialFilters={historyFilters} onFiltersChange={updateHistoryFilters} onOpenVehicle={openVehicle} onOpenMileage={openMileageWithFilters} onOpenRaw={openRawWithFilters} />,