zjk
2026-06-12 8c3586f2de4a52ff841f79af25f425f16ad28244
feat(robotaxi/share-trip): 新增静默查询API并适配分享页处理异常
2个文件已修改
78 ■■■■■ 已修改文件
src/robotaxi/api/begin-route.ts 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/robotaxi/pages/share-trip/hooks/use-share-trip-runtime.ts 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/robotaxi/api/begin-route.ts
@@ -322,6 +322,19 @@
    }, true);
}
// 静默查询订单轨迹,供分享页自行处理业务异常,避免默认拦截 toast。
export const queryOrderTrajectorySilently = async (
    payload: QueryOrderRoutePayload
): Promise<any> => {
    return request({
        url: _ROBOTAXI_HOST + `/order/api/v1/mini-program/order/queryOrderTrajectory`,
        method: 'GET',
        payload,
        showToast: false,
        skipException: true
    }, true);
}
// 订单查询队列状态
export const queryOrderQueueStatus = async (
    payload: QueryOrderQueueStatusPayload
@@ -341,6 +354,16 @@
    }, true);
}
// 静默查询分享订单实时路线,供分享页自行处理业务异常,避免默认拦截 toast。
export const shareQueryOrderRouteSilently = async (orderId: OrderId): Promise<any> => {
    return request({
        url: _ROBOTAXI_HOST + `/order/base/v1/mini-program/orderActive/share/queryOrderRoute/${orderId}`,
        method: 'GET',
        showToast: false,
        skipException: true
    }, true);
}
// 分享订单查询订单详情
export const shareQueryOrderInfo = async (
    payload: ShareQueryOrderInfoPayload
@@ -351,3 +374,16 @@
        payload
    }, true);
}
// 静默查询分享订单详情,供分享页自行处理业务异常,避免默认拦截 toast。
export const shareQueryOrderInfoSilently = async (
    payload: ShareQueryOrderInfoPayload
): Promise<any> => {
    return request({
        url: _ROBOTAXI_HOST + '/order/base/v1/mini-program/orderActive/share/orderInfo',
        method: 'GET',
        payload,
        showToast: false,
        skipException: true
    }, true);
}
src/robotaxi/pages/share-trip/hooks/use-share-trip-runtime.ts
@@ -1,13 +1,23 @@
import Taro from '@tarojs/taro';
import { useEffect, useRef } from 'react';
import { mapOrderStatusToTripStatus } from '../../../../utils/Robotaxi-public-method';
import { queryOrderTrajectory, shareQueryOrderInfo, shareQueryOrderRoute } from '../../../api/begin-route';
import {
  queryOrderTrajectorySilently,
  shareQueryOrderInfoSilently,
  shareQueryOrderRouteSilently
} from '../../../api/begin-route';
import { normalizeDistanceKm, normalizeDurationSeconds } from '../../../utils/format';
import { TripStatus } from '../../../constants/trip-status';
type LocationPoint = { latitude: number; longitude: number };
type RouteDistance = { value: number; unit: 'km' | 'm' } | null;
type SilentApiResponse<T> = {
  code?: number;
  status?: number;
  msg?: string;
  data?: T;
};
const SHARE_TRIP_POLL_INTERVAL_MS = 5000; // 分享页轮询间隔
const MAX_SHARE_TRIP_POLL_COUNT = 6000; // 分享页最多轮询 10 分钟
@@ -81,6 +91,18 @@
  const toFiniteNumber = (value: any) => {
    const num = Number(value);
    return Number.isFinite(num) ? num : null;
  };
  /**
   * 分享页静默接口统一解包。
   * 这里不走全局默认异常 toast,由页面自行决定如何处理。
   */
  const unwrapSilentResponse = <T>(response: SilentApiResponse<T>) => {
    const code = Number(response?.code ?? response?.status ?? 200);
    if (code === 200) {
      return response?.data ?? response;
    }
    throw response;
  };
  /**
@@ -329,12 +351,12 @@
   */
  const requestShareRouteByStatus = (targetStatus: TripStatus) => {
    if ([TripStatus.TripFinished, TripStatus.PaymentSuccess].includes(targetStatus)) {
      return queryOrderTrajectory({
      return queryOrderTrajectorySilently({
        orderId: deps.orderId,
        routeType: 2,
      });
    }
    return shareQueryOrderRoute(deps.orderId);
    return shareQueryOrderRouteSilently(deps.orderId);
  };
  useEffect(() => {
@@ -446,7 +468,8 @@
    };
    const fetchInitialShareInfo = async () => {
      const info = await shareQueryOrderInfo({ orderId: deps.orderId });
      const infoResponse = await shareQueryOrderInfoSilently({ orderId: deps.orderId });
      const info = unwrapSilentResponse(infoResponse);
      if (cancelled) return null;
      return applyShareInfo(info || {});
    };
@@ -473,7 +496,9 @@
          stopPolling();
          return false;
        }
        let routeResponse = await requestShareRouteByStatus(tripStatusRef.current);
        let routeResponse = unwrapSilentResponse(
          await requestShareRouteByStatus(tripStatusRef.current)
        );
        if (cancelled) return false;
        const routeStatus = resolveRouteOrderStatus(routeResponse);
        const shouldFetchInfo = routeStatus !== null && routeStatus !== infoStatusRef.current;
@@ -483,7 +508,8 @@
        let nextEndSite = endSiteRef.current;
        if (shouldFetchInfo) {
          const info = await shareQueryOrderInfo({ orderId: deps.orderId });
          const infoResponse = await shareQueryOrderInfoSilently({ orderId: deps.orderId });
          const info = unwrapSilentResponse(infoResponse);
          if (cancelled) return false;
          const infoState = applyShareInfo(info || {});
          mappedStatus = infoState.mappedStatus;
@@ -494,7 +520,9 @@
          // TripFinished 继续走分享实时路线接口,完单态走完整轨迹接口,
          // 这样地图才能基于最新路线按 order_detail 视口完整展示。
          if (mappedStatus >= TripStatus.TripFinished) {
            routeResponse = await requestShareRouteByStatus(mappedStatus);
            routeResponse = unwrapSilentResponse(
              await requestShareRouteByStatus(mappedStatus)
            );
            if (cancelled) return false;
          }
        }