From 33a51bbf0979b8497226a2d4b546220c1f9d5cdc Mon Sep 17 00:00:00 2001
From: 董国庆 <364620639@qq.com>
Date: 星期三, 15 七月 2026 13:07:21 +0800
Subject: [PATCH] 修改bug:选择目的地时,给出了错误的toast提示。修复缓存未清理导致的新订单误判拦截问题

---
 src/robotaxi/pages/site-search/index.tsx                        |   14 +++++++++-----
 src/robotaxi/pages/select-map-site/hooks/use-select-map-site.ts |   17 ++++++++++-------
 src/utils/Robotaxi-public-method.ts                             |   17 +++++++++++++++++
 3 files changed, 36 insertions(+), 12 deletions(-)

diff --git a/src/robotaxi/pages/select-map-site/hooks/use-select-map-site.ts b/src/robotaxi/pages/select-map-site/hooks/use-select-map-site.ts
index 1345509..f1a4972 100644
--- a/src/robotaxi/pages/select-map-site/hooks/use-select-map-site.ts
+++ b/src/robotaxi/pages/select-map-site/hooks/use-select-map-site.ts
@@ -28,12 +28,13 @@
 import { SELECT_SITE_RANGE_STATUS } from './use-select-map-site-state';
 import useSelectMapSiteWalkingRoute from './use-select-map-site-walking-route';
 import {
-  MODIFY_DESTINATION_CANDIDATE_KEY,
-  MODIFY_DESTINATION_PENDING_SAME_SITE_TOAST_KEY,
-  MODIFY_DESTINATION_SKIP_AC_QUERY_ON_RETURN_KEY,
   MODIFY_DESTINATION_SESSION_KEY,
+  MODIFY_DESTINATION_CANDIDATE_KEY,
+  MODIFY_DESTINATION_SKIP_AC_QUERY_ON_RETURN_KEY,
+  MODIFY_DESTINATION_PENDING_SAME_SITE_TOAST_KEY,
   isSameModifyDestinationSite
 } from '../../../constants/modify-destination';
+import { hasActiveTripOrderInStorage } from '../../../utils/order';
 import {
   CONFIRM_MAP_DROPOFF_BUTTON_EVENT_ID,
   CONFIRM_MAP_PICKUP_BUTTON_EVENT_ID
@@ -721,9 +722,11 @@
     }
     reportConfirmMapSiteEvent();
     const modifySession = Taro.getStorageSync(MODIFY_DESTINATION_SESSION_KEY); // 修改目的地会话中将终点写入候选缓存,返回行程页进入预览态
+    // 增加 hasActiveTripOrderInStorage 联合判断,防止上一单异常终止导致 modifySession 缓存残留,污染新下单流程
+    const isModifyDestinationActive = modifySession?.active && hasActiveTripOrderInStorage();
     
     // 【修改目的地拦截补充】接驾中选点相同或距离过近拦截
-    if (modifySession?.active) {
+    if (isModifyDestinationActive) {
       const isPickupTripStatus = [4, 5].includes(modifySession.tripStatus); // 4: VehicleApproaching, 5: VehicleArrivedPickup
       if (isPickupTripStatus) {
         const isSameSite = isSameModifyDestinationSite(startSiteCache, state.selectedSite);
@@ -741,10 +744,10 @@
       }
     }
 
-    if (modifySession?.active && isSameModifyDestinationSite(modifySession?.previousEndSite, state.selectedSite)) {
+    if (isModifyDestinationActive && isSameModifyDestinationSite(modifySession?.previousEndSite, state.selectedSite)) {
       Taro.setStorageSync(MODIFY_DESTINATION_PENDING_SAME_SITE_TOAST_KEY, 1);
     }
-    if (modifySession?.active) {
+    if (isModifyDestinationActive) {
       Taro.setStorageSync(MODIFY_DESTINATION_CANDIDATE_KEY, state.selectedSite);
       Taro.setStorageSync(MODIFY_DESTINATION_SKIP_AC_QUERY_ON_RETURN_KEY, 1); // 修改目的地返回行程页时跳过一次空调/温度状态查询
     } else {
@@ -752,7 +755,7 @@
     }
     writeConfirmRideSiteSourceType('end', MAP_CONFIRM_RIDE_SOURCE_TYPE);
     completeConfirmRideSelectionSession(startSiteCache, state.selectedSite);
-    const returnToBeginRouteUrl = modifySession?.active
+    const returnToBeginRouteUrl = isModifyDestinationActive
       ? '/robotaxi/pages/begin-route/index?skipPageFlag=1&fromModifyDestination=1'
       : (Taro.getStorageSync('orderId') ? '/robotaxi/pages/begin-route/index?skipPageFlag=1' : '/robotaxi/pages/begin-route/index');
     Taro.reLaunch({
diff --git a/src/robotaxi/pages/site-search/index.tsx b/src/robotaxi/pages/site-search/index.tsx
index b5c920f..41edab7 100644
--- a/src/robotaxi/pages/site-search/index.tsx
+++ b/src/robotaxi/pages/site-search/index.tsx
@@ -134,7 +134,11 @@
   ) => {
     // 检查是否有行程订单
     const modifySession = Taro.getStorageSync(MODIFY_DESTINATION_SESSION_KEY);
-    if (!modifySession?.active && hasActiveTripOrderInStorage()) {
+    const hasActiveTrip = hasActiveTripOrderInStorage();
+    // 增加 hasActiveTrip 联合判断,防止上一单异常终止导致 modifySession 缓存残留,污染新下单流程
+    const isModifyDestinationActive = modifySession?.active && hasActiveTrip;
+
+    if (!isModifyDestinationActive && hasActiveTrip) {
       Taro.reLaunch({
         url: '/robotaxi/pages/begin-route/index?skipPageFlag=1',
       });
@@ -168,7 +172,7 @@
     // 1. isSameSite:坐标、ID或名称一致视为同一站点。
     // 2. isTooClose:物理直线距离小于后台配置的 minDistance(如有)。
     // 命中任一条件,即阻断并提示“建议步行前往”。
-    if (modifySession?.active) {
+    if (isModifyDestinationActive) {
       const isPickupTripStatus = [TripStatus.VehicleApproaching, TripStatus.VehicleArrivedPickup].includes(modifySession.tripStatus);
       if (isPickupTripStatus) {
         const isSameSite = isSameModifyDestinationSite(startSiteCache, item);
@@ -186,10 +190,10 @@
       }
     }
     // 检查是否与上一个选择的终点相同
-    if (modifySession?.active && isSameModifyDestinationSite(modifySession?.previousEndSite, item)) {
+    if (isModifyDestinationActive && isSameModifyDestinationSite(modifySession?.previousEndSite, item)) {
       Taro.setStorageSync(MODIFY_DESTINATION_PENDING_SAME_SITE_TOAST_KEY, 1);
     }
-    if (modifySession?.active) {
+    if (isModifyDestinationActive) {
       Taro.setStorageSync(MODIFY_DESTINATION_CANDIDATE_KEY, item);
       Taro.setStorageSync(MODIFY_DESTINATION_SKIP_AC_QUERY_ON_RETURN_KEY, 1); // 修改目的地返回行程页时跳过一次空调/温度状态查询
     } else {
@@ -197,7 +201,7 @@
     }
     writeConfirmRideSiteSourceType('end', sourceType);
     completeConfirmRideSelectionSession(startSiteCache, item);
-    const returnToBeginRouteUrl = modifySession?.active
+    const returnToBeginRouteUrl = isModifyDestinationActive
       ? '/robotaxi/pages/begin-route/index?skipPageFlag=1&fromModifyDestination=1'
       : (Taro.getStorageSync('orderId') ? '/robotaxi/pages/begin-route/index?skipPageFlag=1' : '/robotaxi/pages/begin-route/index');
     Taro.reLaunch({
diff --git a/src/utils/Robotaxi-public-method.ts b/src/utils/Robotaxi-public-method.ts
index d38997e..c57615f 100644
--- a/src/utils/Robotaxi-public-method.ts
+++ b/src/utils/Robotaxi-public-method.ts
@@ -12,6 +12,15 @@
   GEOFENCE_TYPE_STATION
 } from '../robotaxi/constants/geofence';
 import { APPID } from '../constants/app'
+import {
+  MODIFY_DESTINATION_SESSION_KEY,
+  MODIFY_DESTINATION_CANDIDATE_KEY,
+  MODIFY_DESTINATION_OVERRIDE_KEY,
+  MODIFY_DESTINATION_ROUTE_POINTS_KEY,
+  MODIFY_DESTINATION_SKIP_AC_QUERY_ON_RETURN_KEY,
+  MODIFY_DESTINATION_SOCKET_STATUS_KEY,
+  MODIFY_DESTINATION_PENDING_SAME_SITE_TOAST_KEY
+} from '../robotaxi/constants/modify-destination';
 
 /**
  * 安全的 JSON 解析函数
@@ -1024,6 +1033,14 @@
 export const clearOrderTripStorage = () => {
   Taro.removeStorageSync('orderId');
   Taro.removeStorageSync('tripStatus');
+  // 一并清空修改目的地的全部会话缓存,防止脏数据残留污染后续的新订单
+  Taro.removeStorageSync(MODIFY_DESTINATION_SESSION_KEY);
+  Taro.removeStorageSync(MODIFY_DESTINATION_CANDIDATE_KEY);
+  Taro.removeStorageSync(MODIFY_DESTINATION_OVERRIDE_KEY);
+  Taro.removeStorageSync(MODIFY_DESTINATION_ROUTE_POINTS_KEY);
+  Taro.removeStorageSync(MODIFY_DESTINATION_SKIP_AC_QUERY_ON_RETURN_KEY);
+  Taro.removeStorageSync(MODIFY_DESTINATION_SOCKET_STATUS_KEY);
+  Taro.removeStorageSync(MODIFY_DESTINATION_PENDING_SAME_SITE_TOAST_KEY);
 };
 
 /**

--
Gitblit v1.7.1