feat(platform-web): resolve vehicle context from detail hash

This commit is contained in:
lingniu
2026-07-04 02:39:31 +08:00
parent 80bd726455
commit d67540c457
2 changed files with 97 additions and 6 deletions

View File

@@ -23,6 +23,18 @@ export default function App() {
const [currentVehicleStatus, setCurrentVehicleStatus] = useState<VehicleServiceStatus | undefined>();
const [currentVehicleLabel, setCurrentVehicleLabel] = useState('');
const loadVehicleContext = useCallback(async (keyword: string) => {
const lookupKey = keyword.trim();
if (!lookupKey) {
return undefined;
}
const resolved = await api.vehicleResolve(new URLSearchParams({ keyword: lookupKey }));
const nextKey = resolved.resolved && resolved.vin ? resolved.vin : lookupKey;
setCurrentVehicleStatus(resolved.serviceStatus);
setCurrentVehicleLabel(resolved.resolved ? [resolved.plate, resolved.vin || nextKey].filter(Boolean).join(' / ') : lookupKey);
return { resolved, nextKey };
}, []);
const refreshOpsHealth = useCallback((showError = true) => {
return api.opsHealth()
.then((health) => {
@@ -34,7 +46,16 @@ export default function App() {
Toast.error(error.message);
}
});
}, []);
}, [loadVehicleContext]);
useEffect(() => {
if (initialRoute.page !== 'detail' || !initialRoute.keyword) {
return;
}
loadVehicleContext(initialRoute.keyword).catch((error) => {
Toast.error(error instanceof Error ? error.message : '车辆查询失败');
});
}, [initialRoute.keyword, initialRoute.page, loadVehicleContext]);
useEffect(() => {
refreshOpsHealth();
@@ -92,15 +113,14 @@ export default function App() {
return;
}
try {
const resolved = await api.vehicleResolve(new URLSearchParams({ keyword: lookupKey }));
const nextKey = resolved.resolved && resolved.vin ? resolved.vin : lookupKey;
setCurrentVehicleStatus(resolved.serviceStatus);
setCurrentVehicleLabel(resolved.resolved ? [resolved.plate, resolved.vin || nextKey].filter(Boolean).join(' / ') : lookupKey);
const context = await loadVehicleContext(lookupKey);
const resolved = context?.resolved;
const nextKey = context?.nextKey ?? lookupKey;
setActiveVin(nextKey);
setActiveProtocol(nextProtocol);
setActivePage('detail');
replaceHash('detail', nextKey, nextProtocol);
if (!resolved.resolved) {
if (!resolved?.resolved) {
Toast.warning('未匹配到车辆身份,已打开问题排查视图');
}
} catch (error) {