hejianhao
2026-06-16 a5340bcefa1b5880c6e37cb30134f27b87994ca7
Merge branch 'feature_v1.0' into xw_v1.0
3个文件已修改
65 ■■■■■ 已修改文件
src/robotaxi/pages/share-trip/components/share-trip-view.tsx 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/robotaxi/pages/share-trip/hooks/use-share-trip-runtime.ts 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/robotaxi/pages/share-trip/index.tsx 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/robotaxi/pages/share-trip/components/share-trip-view.tsx
@@ -43,6 +43,7 @@
  const hasRouteDuration = typeof routeDuration === 'number' && Number.isFinite(routeDuration);
  const durationDisplay = hasRouteDuration ? formatDurationDisplay(routeDuration) : null; // 预计耗时展示文案
  const shouldShowEndPointRow = tripData?.tripStatus !== TripStatus.VehicleArrivedPickup; // 到达上车点阶段与 begin-route 对齐,隐藏终点信息
  const isCanceledTrip = tripData?.tripStatus === TripStatus.CancelOnlyPickup || Number(tripData?.rawOrderStatus) === 0;
  if (isExpired) {
    return (
@@ -117,8 +118,11 @@
                    乘客已上车,正在前往目的地
                  </View>
                )}
                {isCanceledTrip && (
                  <View className='calling-car-head-title'>乘客已取消行程</View>
                )}
                {tripData?.tripStatus >= TripStatus.ArrivedDestination && (
                  <View className='calling-car-head-title'>已到达目的地</View>
                  !isCanceledTrip && <View className='calling-car-head-title'>已到达目的地</View>
                )}
              </View>
              <View className='car-card'>
@@ -151,7 +155,7 @@
                        <View
                          className={`car-card-temp-title ${
                            tripData?.tripStatus === TripStatus.InService
                            || tripData?.tripStatus >= TripStatus.ArrivedDestination
                            || (tripData?.tripStatus >= TripStatus.ArrivedDestination && !isCanceledTrip)
                              ? 'disabled-text'
                              : ''
                          }`}
@@ -160,7 +164,7 @@
                        </View>
                      </View>
                      {(tripData?.tripStatus === TripStatus.InService
                        || tripData?.tripStatus >= TripStatus.ArrivedDestination)
                        || (tripData?.tripStatus >= TripStatus.ArrivedDestination && !isCanceledTrip))
                      && tripData?.boardingTime && (
                        <View className='car-card-temp-time disabled-text'>
                          {tripData.boardingTime} 上车
@@ -173,7 +177,7 @@
                          <View className='dot end'></View>
                          <View
                            className={`car-card-temp-title ${
                              tripData?.tripStatus >= TripStatus.ArrivedDestination
                              tripData?.tripStatus >= TripStatus.ArrivedDestination && !isCanceledTrip
                                ? 'disabled-text'
                                : ''
                            }`}
@@ -182,6 +186,7 @@
                          </View>
                        </View>
                        {tripData?.tripStatus >= TripStatus.ArrivedDestination
                          && !isCanceledTrip
                          && tripData?.getoffTime && (
                          <View className='car-card-temp-time disabled-text'>
                            {tripData.getoffTime} 到达
src/robotaxi/pages/share-trip/hooks/use-share-trip-runtime.ts
@@ -60,6 +60,16 @@
  const applySmoothRouteSnapshotRef = useRef(deps.applySmoothRouteSnapshot); // 平滑快照消费函数引用
  /**
   * 分享页把后端订单状态 0 单独识别为取消态,避免复用发布态导致误展示路线。
   */
  const resolveShareTripStatus = (status: any) => {
    if (Number(status) === 0) {
      return TripStatus.CancelOnlyPickup;
    }
    return mapOrderStatusToTripStatus(status) as TripStatus;
  };
  /**
   * 识别“行程结束超过24小时”的接口异常。
   */
  const isOver24HoursExpiredError = (error: any) => {
@@ -349,6 +359,25 @@
  };
  /**
   * 取消态只保留起终点 marker,并清空路线/车辆运行态。
   */
  const applyCanceledTripState = (nextStartSite: any, nextEndSite: any) => {
    deps.applyRoutePoints([]);
    deps.erasePassedRouteSegments([]);
    deps.setRouteDistance(null);
    deps.setRouteDuration(null);
    deps.setVehicleMoveAlongPoints([]);
    const center = getCenterPoint([
      ...(nextStartSite ? [nextStartSite] : []),
      ...(nextEndSite ? [nextEndSite] : []),
    ]);
    if (center) {
      deps.setLongitude(center.longitude);
      deps.setLatitude(center.latitude);
    }
  };
  /**
   * 完单后切换为订单轨迹接口,确保能拿到完整行程轨迹。
   * 已到达目的地仍优先走分享实时路线接口,否则该状态下可能拿不到可绘制 polyline。
   */
@@ -419,7 +448,7 @@
    };
    const applyShareInfo = (info: any) => {
      const mappedStatus = mapOrderStatusToTripStatus(info?.status) as TripStatus;
      const mappedStatus = resolveShareTripStatus(info?.status);
      const nextStartSite = buildSite(info, 'start');
      const nextEndSite = buildSite(info, 'end');
      const etaMinutes = Math.max(
@@ -434,6 +463,7 @@
        vehicleColor: info?.vehicleColor || '',
        vehicleCode: info?.vehicleCode || '',
        vehiclePictures: info?.vehiclePictures || info?.vehicleImage || '',
        rawOrderStatus: Number(info?.status),
        startPointName: info?.startPointName || nextStartSite?.name || '上车点',
        endPointName: info?.endPointName || nextEndSite?.name || '终点',
        boardingTime: formatTimeText(info?.boardingTime || info?.pickupTime),
@@ -453,6 +483,11 @@
      deps.setIsExpired(resolveExpiredState(info, mappedStatus));
      // deps.setShowReminder(Boolean(info?.showReminder));
      if (mappedStatus === TripStatus.CancelOnlyPickup) {
        // 取消态不展示路线,地图只保留起终点并停止后续动态联动。
        applyCanceledTripState(nextStartSite, nextEndSite);
      }
      return {
        mappedStatus,
        nextStartSite,
@@ -466,7 +501,7 @@
        getFieldValue(routeResponse, ['tripStatus', 'orderStatus']);
      const parsedStatus = Number(statusValue);
      return Number.isFinite(parsedStatus)
        ? (mapOrderStatusToTripStatus(parsedStatus) as TripStatus)
        ? resolveShareTripStatus(parsedStatus)
        : null;
    };
@@ -530,6 +565,13 @@
          }
        }
        if (mappedStatus === TripStatus.CancelOnlyPickup) {
          applyCanceledTripState(nextStartSite, nextEndSite);
          stopPolling();
          errorToastShownRef.current = false;
          return false;
        }
        syncShareRoute(routeResponse, mappedStatus, nextStartSite, nextEndSite);
        if (mappedStatus >= TripStatus.ArrivedDestination) {
          stopPolling();
@@ -547,6 +589,10 @@
    fetchInitialShareInfo()
      .then(async (infoState) => {
        if (!infoState || cancelled) return;
        if (infoState.mappedStatus === TripStatus.CancelOnlyPickup) {
          stopPolling();
          return;
        }
        const shouldContinuePolling = await fetchShareTripData();
        if (cancelled) return;
        if (shouldContinuePolling) {
src/robotaxi/pages/share-trip/index.tsx
@@ -74,7 +74,7 @@
    [TripStatus.ArrivedDestination]: { showPickup: false, showDropoff: true, showCar: false, showRoute: true, showWalking: false, viewport: 'order_detail', translateCar: false },
    [TripStatus.TripFinished]: { showPickup: true, showDropoff: true, showCar: false, showRoute: true, showWalking: false, viewport: 'order_detail', translateCar: false },
    [TripStatus.PaymentSuccess]: { showPickup: true, showDropoff: true, showCar: false, showRoute: true, showWalking: false, viewport: 'order_detail', translateCar: false },
    [TripStatus.CancelOnlyPickup]: { showPickup: true, showDropoff: false, showCar: false, showRoute: false, showWalking: false, viewport: 'pickup', translateCar: false },
    [TripStatus.CancelOnlyPickup]: { showPickup: true, showDropoff: true, showCar: false, showRoute: false, showWalking: false, viewport: 'order_detail', translateCar: false },
  }; // 行程状态显示规则
  const statusRule = useMemo(