par-dongguoqing
2026-07-13 60e22e7c96230fc3b32181ac4a6948629c71fb3b
Fix dgq 070901:接驾中,修改目的地不能于起始地一致
2个文件已修改
45 ■■■■■ 已修改文件
src/robotaxi/pages/select-map-site/hooks/use-select-map-site.ts 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/robotaxi/pages/site-search/index.tsx 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/robotaxi/pages/select-map-site/hooks/use-select-map-site.ts
@@ -721,6 +721,26 @@
    }
    reportConfirmMapSiteEvent();
    const modifySession = Taro.getStorageSync(MODIFY_DESTINATION_SESSION_KEY); // 修改目的地会话中将终点写入候选缓存,返回行程页进入预览态
    // 【修改目的地拦截补充】接驾中选点相同或距离过近拦截
    if (modifySession?.active) {
      const isPickupTripStatus = [4, 5].includes(modifySession.tripStatus); // 4: VehicleApproaching, 5: VehicleArrivedPickup
      if (isPickupTripStatus) {
        const isSameSite = isSameModifyDestinationSite(startSiteCache, state.selectedSite);
        const isTooClose = !isWithinStartEndMinDistance({
          startSite: startSiteCache,
          endSite: state.selectedSite,
          minDistance: distanceConfig?.minDistance
        });
        if (isSameSite || isTooClose) {
          state.setTipType(ORDER_DISTANCE_TIP_TYPE_MIN_DISTANCE);
          state.setShowTipPopup(true);
          return;
        }
      }
    }
    if (modifySession?.active && isSameModifyDestinationSite(modifySession?.previousEndSite, state.selectedSite)) {
      Taro.setStorageSync(MODIFY_DESTINATION_PENDING_SAME_SITE_TOAST_KEY, 1);
    }
src/robotaxi/pages/site-search/index.tsx
@@ -64,6 +64,7 @@
} from '../../constants/confirm-ride-report';
import { hasActiveTripOrderInStorage } from '../../utils/order';
import { withRobotaxiWhitelist } from '../../../utils/whitelist';
import { TripStatus } from '../../constants/trip-status';
function SiteSearchPage() {
  const [searchValue, setSearchValue] = useState('') //搜索值
@@ -160,6 +161,30 @@
        return;
      }
    } catch { }
    // 【修改目的地拦截补充】
    // 正常下单流程在上方已由 isWithinStartEndMinDistance 处理。
    // 但在“接驾中修改目的地”时,如果后台距离配置(minDistance)未下发或为 0,底层判断会被放行。
    // 为了防止用户在接驾阶段将目的地改得和原上车点一样(或物理距离极近),此处增加针对 modifySession 活跃状态下的强校验:
    // 1. isSameSite:坐标、ID或名称一致视为同一站点。
    // 2. isTooClose:物理直线距离小于后台配置的 minDistance(如有)。
    // 命中任一条件,即阻断并提示“建议步行前往”。
    if (modifySession?.active) {
      const isPickupTripStatus = [TripStatus.VehicleApproaching, TripStatus.VehicleArrivedPickup].includes(modifySession.tripStatus);
      if (isPickupTripStatus) {
        const isSameSite = isSameModifyDestinationSite(startSiteCache, item);
        const isTooClose = !isWithinStartEndMinDistance({
          startSite: startSiteCache,
          endSite: item,
          minDistance: resolvedDistanceConfig?.minDistance
        });
        if (isSameSite || isTooClose) {
          setTipType(ORDER_DISTANCE_TIP_TYPE_MIN_DISTANCE);
          setShowTipPopup(true);
          return;
        }
      }
    }
    // 检查是否与上一个选择的终点相同
    if (modifySession?.active && isSameModifyDestinationSite(modifySession?.previousEndSite, item)) {
      Taro.setStorageSync(MODIFY_DESTINATION_PENDING_SAME_SITE_TOAST_KEY, 1);