From 13c960a2b6bb54797bdbd03aa3184af507d94a9b Mon Sep 17 00:00:00 2001
From: 卢春龙 <lucl@xiaopeng.com>
Date: 星期一, 20 四月 2026 10:42:28 +0800
Subject: [PATCH] Merge branch 'feature_pr_fix' into 'develop'
---
src/robotaxi/pages/begin-route/hooks/use-map-viewport.ts | 70 ++++++++++++++++++++++++++++++++++-
1 files changed, 68 insertions(+), 2 deletions(-)
diff --git a/src/robotaxi/pages/begin-route/hooks/use-map-viewport.ts b/src/robotaxi/pages/begin-route/hooks/use-map-viewport.ts
index 315d301..b278b54 100644
--- a/src/robotaxi/pages/begin-route/hooks/use-map-viewport.ts
+++ b/src/robotaxi/pages/begin-route/hooks/use-map-viewport.ts
@@ -49,7 +49,10 @@
const mapRectRef = useRef<any>(null);
const viewportKeyRef = useRef<string>('');
+ const orderDetailViewportLockedRef = useRef(false);
const tripStatus6ViewportLockedRef = useRef(false);
+ const orderDetailEnterSignatureRef = useRef('');
+ const orderDetailRouteUpdatedAfterEnterRef = useRef(false);
const isAndroid = useMemo(() => {
try {
@@ -183,6 +186,22 @@
return { points, keyParts };
};
+ const buildOrderDetailRouteSignature = (pickupSite: any, dropoffSite: any) => {
+ const firstPoint = deps.routePoints[0];
+ const lastPoint = deps.routePoints[deps.routePoints.length - 1];
+ return [
+ deps.routePoints.length,
+ firstPoint?.latitude ?? '',
+ firstPoint?.longitude ?? '',
+ lastPoint?.latitude ?? '',
+ lastPoint?.longitude ?? '',
+ pickupSite?.latitude ?? '',
+ pickupSite?.longitude ?? '',
+ dropoffSite?.latitude ?? '',
+ dropoffSite?.longitude ?? '',
+ ].join('|');
+ };
+
const updateViewportByPayload = (viewportType: string, points: any[]) => {
const mapCtx = Taro.createMapContext('map');
const bottomPadding = computeBottomPadding(points, viewportType);
@@ -263,10 +282,44 @@
const { points, keyParts } = buildViewportPayload(viewportType, pickupSite, dropoffSite);
if (points.length === 0) return;
const nextKey = keyParts.join('|');
- if (nextKey === viewportKeyRef.current) return;
+ if (nextKey === viewportKeyRef.current) {
+ if (mapScale < DROPOFF_MAX_SCALE) {
+ setMapScale(DROPOFF_MAX_SCALE);
+ }
+ return;
+ }
viewportKeyRef.current = nextKey;
updateViewportByPayload(viewportType, points);
- }, [deps.tripStatus, deps.statusRule?.viewport, deps.endSite?.latitude, deps.endSite?.longitude]);
+ }, [deps.tripStatus, deps.statusRule?.viewport, deps.endSite?.latitude, deps.endSite?.longitude, mapScale]);
+
+ useEffect(() => {
+ if (![8, 9].includes(deps.tripStatus)) {
+ orderDetailViewportLockedRef.current = false;
+ orderDetailRouteUpdatedAfterEnterRef.current = false;
+ orderDetailEnterSignatureRef.current = '';
+ return;
+ }
+ const { pickupSite, dropoffSite } = resolveViewportSites();
+ orderDetailEnterSignatureRef.current = buildOrderDetailRouteSignature(pickupSite, dropoffSite);
+ orderDetailRouteUpdatedAfterEnterRef.current = false;
+ orderDetailViewportLockedRef.current = false;
+ viewportKeyRef.current = '';
+ setMapScale(14);
+ }, [deps.tripStatus]);
+
+ useEffect(() => {
+ if (![8, 9].includes(deps.tripStatus)) return;
+ const { pickupSite, dropoffSite } = resolveViewportSites();
+ const currentSignature = buildOrderDetailRouteSignature(pickupSite, dropoffSite);
+ if (!orderDetailEnterSignatureRef.current) {
+ orderDetailEnterSignatureRef.current = currentSignature;
+ return;
+ }
+ if (currentSignature === orderDetailEnterSignatureRef.current) return;
+ orderDetailRouteUpdatedAfterEnterRef.current = true;
+ orderDetailViewportLockedRef.current = false;
+ viewportKeyRef.current = '';
+ }, [deps.tripStatus, deps.routePoints, deps.startSite?.latitude, deps.startSite?.longitude, deps.endSite?.latitude, deps.endSite?.longitude]);
useEffect(() => {
const { pickupSite, dropoffSite } = resolveViewportSites();
@@ -274,6 +327,14 @@
if (viewportType === 'dropoff') return;
const { points, keyParts } = buildViewportPayload(viewportType, pickupSite, dropoffSite);
if (points.length === 0) return;
+ if (
+ [8, 9].includes(deps.tripStatus) &&
+ viewportType === 'order_detail' &&
+ orderDetailViewportLockedRef.current &&
+ orderDetailRouteUpdatedAfterEnterRef.current
+ ) {
+ return;
+ }
if (deps.tripStatus === 6 && viewportType === 'route' && tripStatus6ViewportLockedRef.current) return;
const nextKey = keyParts.join('|');
if (nextKey === viewportKeyRef.current) return;
@@ -281,6 +342,10 @@
updateViewportByPayload(viewportType, points);
if (deps.tripStatus === 6 && viewportType === 'route') {
tripStatus6ViewportLockedRef.current = true;
+ }
+ if ([8, 9].includes(deps.tripStatus) && viewportType === 'order_detail') {
+ const hasOrderDetailRouteAfterEnter = orderDetailRouteUpdatedAfterEnterRef.current && deps.routePoints.length > 0;
+ orderDetailViewportLockedRef.current = hasOrderDetailRouteAfterEnter;
}
}, [deps.tripStatus, deps.statusRule, deps.routePoints, deps.walkingPoints, deps.startSite?.latitude, deps.startSite?.longitude, deps.endSite?.latitude, deps.endSite?.longitude, deps.vehicleLocation, deps.longitude, deps.latitude, mapBottomPadding]);
@@ -309,6 +374,7 @@
setShowLocationFlag,
mapRectRef,
viewportKeyRef,
+ orderDetailViewportLockedRef,
tripStatus6ViewportLockedRef,
isAndroid,
resolveSafeBottomInset,
--
Gitblit v1.7.1