hejianhao
2026-03-13 04fef9c0fa466ea65dcfa87645c3eb9782f6ff6b
feat(robotaxi): 新增订单轨迹查询并优化交互逻辑

- 在 begin-route API 中添加 queryOrderTrajectory 方法,用于查询订单轨迹
- 根据订单状态(7,8,9)智能选择调用 queryOrderTrajectory 或 queryOrderRoute
- 扩展 tripStatus 检查范围,将状态 3 和 9 纳入相关条件判断
- 优化地图浮层入口点击处理,使用 isCheckedEnter ref 防止误触气泡
- 简化首页地图入口的点击事件处理,移除冗余的 stopPropagation 调用
3个文件已修改
34 ■■■■■ 已修改文件
src/pages/robotaxi/home/index.tsx 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/robotaxi/api/begin-route.ts 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/robotaxi/pages/begin-route/index.tsx 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/robotaxi/home/index.tsx
@@ -1111,11 +1111,11 @@
        </View>
        {/* 地图浮层入口 */}
        <View className="map-entry">
          <Image onClick={(e) => { e.stopPropagation(); openService() }} className="map-entry-icon" src={contactService} />
          <Image onClick={openService} className="map-entry-icon" src={contactService} />
          <View className="split-line"></View>
          <Image onClick={(e) => { e.stopPropagation(); toCoupon() }} className="map-entry-icon" src={coupon} />
          <Image onClick={toCoupon} className="map-entry-icon" src={coupon} />
          <View className="split-line"></View>
          <Image onClick={(e) => { e.stopPropagation(); toOrder() }} className="map-entry-icon" src={suggest} />
          <Image onClick={toOrder} className="map-entry-icon" src={suggest} />
        </View>
        {/* 指针 */}
        {
@@ -1209,7 +1209,7 @@
                  </View>
                }
                {
                  [4, 5, 6, 7, 8].includes(tripStatus) &&
                  [3, 4, 5, 6, 7, 8].includes(tripStatus) &&
                  <View className="order-status-left">
                    {
                      orderData.vehiclePictures ?
src/robotaxi/api/begin-route.ts
@@ -140,3 +140,11 @@
        payload
    });
}
export const queryOrderTrajectory = async (payload) => {
    return request({
        url: _ROBOTAXI_HOST + `/order/api/v1/mini-program/order/queryOrderTrajectory`,
        method: 'POST',
        payload
    });
}
src/robotaxi/pages/begin-route/index.tsx
@@ -40,6 +40,7 @@
  getOrderPayment,
  cancelOrder,
  queryOrderRoute,
  queryOrderTrajectory,
  endOrder,
} from '../../../robotaxi/api/begin-route';
import { getOrderActive } from '../../../robotaxi/api/home';
@@ -153,6 +154,7 @@
    }
  }, []);
  const shouldShowWaitingRadar = isAndroid && [2, 3].includes(tripStatus);
  const isCheckedEnter = useRef(false);
  useEffect(() => {
    const wasHold = [6].includes(lastTripStatusRef.current);
@@ -555,7 +557,9 @@
  const requestOrderRoute = (targetOrderId: string, status: number) => {
    const routeType = status <= 5 ? 1 : 2;
    queryOrderRoute({ orderId: targetOrderId, routeType })
    const isTrajectoryStatus = [7, 8, 9].includes(status);
    const requestRoute = isTrajectoryStatus ? queryOrderTrajectory : queryOrderRoute;
    requestRoute({ orderId: targetOrderId, routeType })
      .then((res: any) => {
        const data = res;
        const rawPoints = Array.isArray(data?.polyline) ? data.polyline : [];
@@ -1203,7 +1207,7 @@
        setEndSite(e);
      }
    }
    if (cachedOrderId && [4, 5, 6, 7, 8].includes(cachedTripStatus)) {
    if (cachedOrderId && [4, 5, 6, 7, 8, 9].includes(cachedTripStatus)) {
      requestOrderRoute(cachedOrderId, cachedTripStatus);
    }
@@ -1549,6 +1553,10 @@
  // 点击气泡
  const handleCalloutTap = (e) => {
    if (isCheckedEnter.current) {
      isCheckedEnter.current = false;
      return;
    }
    if (tripStatus === 1) {
      // 仅在发布行程时,点击标记用于选择起点或终点
      const markerId = e.detail.markerId;
@@ -1714,11 +1722,11 @@
        </View>
        {/* 地图浮层入口 */}
        <View className="map-entry">
          <Image onClick={(e) => { e.stopPropagation(); openService() }} className="map-entry-icon" src={contactService} />
          <Image onClick={(e) => { isCheckedEnter.current = true; openService() }} className="map-entry-icon" src={contactService} />
          <View className="split-line"></View>
          <Image onClick={(e) => { e.stopPropagation(); toCoupon() }} className="map-entry-icon" src={coupon} />
          <Image onClick={(e) => { isCheckedEnter.current = true; toCoupon() }} className="map-entry-icon" src={coupon} />
          <View className="split-line"></View>
          <Image onClick={(e) => { e.stopPropagation(); toOrder() }} className="map-entry-icon" src={suggest} />
          <Image onClick={(e) => { isCheckedEnter.current = true; toOrder() }} className="map-entry-icon" src={suggest} />
        </View>
        <View className="container">
          <View className="container-inner">