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