修改bug:选择目的地时,给出了错误的toast提示。修复缓存未清理导致的新订单误判拦截问题
3个文件已修改
48 ■■■■■ 已修改文件
src/robotaxi/pages/select-map-site/hooks/use-select-map-site.ts 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/robotaxi/pages/site-search/index.tsx 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/Robotaxi-public-method.ts 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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({
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({
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);
};
/**