hejianhao
2026-05-19 4e9e851c6df128ec47bb0506e4e12c18294f2d62
feat(begin-route): 优化打车起始页样式与修改目的地逻辑

- 为呼叫车辆弹窗根元素添加overflow:hidden,避免内部内容溢出圆角边框
- 为自定义呼叫气泡添加whiteSpace:nowrap样式,防止长地名换行错乱
- 完善修改目的地回调参数,传递旧路线点以快速恢复行程,避免重复拉取
- 调整行程距离时长限制的触发条件,仅在行程服务中生效校验
4个文件已修改
25 ■■■■■ 已修改文件
src/robotaxi/pages/begin-route/components/css-folder/calling-car.less 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/robotaxi/pages/begin-route/hooks/use-modify-destination-flow.ts 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/robotaxi/pages/begin-route/hooks/use-view-delegates.tsx 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/robotaxi/pages/begin-route/index.tsx 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/robotaxi/pages/begin-route/components/css-folder/calling-car.less
@@ -4,6 +4,7 @@
  background: #f2f3f7;
  border-top: 2px solid #fff;
  border-radius: 40px 40px 0 0;
  overflow: hidden;
  &-bg {
    position: absolute;
src/robotaxi/pages/begin-route/hooks/use-modify-destination-flow.ts
@@ -16,7 +16,7 @@
  endSite: any;
  setEndSite: (site: any) => void;
  toSelectSite: (pageType: 'start' | 'end', keyword?: string) => void;
  onModifySuccess?: () => void;
  onModifySuccess?: (restoredRoutePoints?: any[]) => void;
};
type ExitModifyDestinationReviewOptions = {
@@ -230,6 +230,8 @@
      Taro.setStorageSync('endSite', newEndSite);
      deps.setEndSite(newEndSite);
      const oldRoutePoints = [...previousRoutePoints];
      exitModifyDestinationReview({ shouldRestorePreviousEndSite: false });
      Taro.hideLoading();
@@ -239,7 +241,7 @@
      });
      if (typeof deps.onModifySuccess === 'function') {
        deps.onModifySuccess();
        deps.onModifySuccess(oldRoutePoints);
      }
    } catch (e: any) {
      Taro.hideLoading();
src/robotaxi/pages/begin-route/hooks/use-view-delegates.tsx
@@ -199,7 +199,7 @@
        <>
          {(item.name !== '车辆位置' && !(item.id === 2 && [TripStatus.ArrivedDestination].includes(deps.tripStatus)) && !item.hideNameCallout) && (
            <CoverView className={`custom-callout-content ${deps.isAndroid && 'txt-center '}`} style={{ zIndex: 1 }}>
              <CoverView style={{ lineHeight: '22px', display: 'flex', alignItems: 'center' }}>{item.name}</CoverView>
              <CoverView style={{ lineHeight: '22px', whiteSpace: 'nowrap' }}>{item.name}</CoverView>
              {deps.isAndroid && <CoverView style={{ width: '2px' }}></CoverView>}
              {(deps.tripStatus === TripStatus.PublishRoute || deps.showTrip1StyleEndpoint) && <CoverImage className='custom-callout-icon' src={deps.customCalloutIconSrc} />}
            </CoverView>
src/robotaxi/pages/begin-route/index.tsx
@@ -238,18 +238,23 @@
    endSite,
    setEndSite,
    toSelectSite,
    onModifySuccess: () => {
    onModifySuccess: (restoredRoutePoints?: any[]) => {
      // 成功修改后触发路线重新获取
      // 下一次渲染时 isModifyDestinationReviewVisible 变为 false
      // 我们需要强制让选路状态退出,同时获取后端的新行程路线
      setIsRouteSelectExpanded(false);
      setRouteOptions([]);
      setRoutePoints([]);
      setFareEstimate({});
      const shouldSkipOrderRouteSync = [TripStatus.VehicleApproaching, TripStatus.VehicleArrivedPickup].includes(tripStatus); // 接驾阶段不拉取订单路线,避免误渲染行程中路线
      if (shouldSkipOrderRouteSync) {
        if (restoredRoutePoints && restoredRoutePoints.length > 0) {
          routeApplyRoutePoints(restoredRoutePoints);
        } else {
          setRoutePoints([]);
        }
        return;
      }
      setRoutePoints([]);
      routeRequestOrderRoute(orderId, tripStatus);
    }
  });
@@ -856,12 +861,15 @@
    const currentDurationSeconds = Number(orderRouteMetrics?.durationSeconds);
    const distanceLimit = Number(distanceConfig?.xczSyDistance);
    const durationLimitMinutes = Number(distanceConfig?.xczSyTime);
    const isTripInService = tripStatus === TripStatus.InService;
    const hitDistanceLimit = Number.isFinite(distanceLimit)
    const hitDistanceLimit = isTripInService
      && Number.isFinite(distanceLimit)
      && distanceLimit > 0
      && Number.isFinite(currentDistance)
      && currentDistance < distanceLimit;
    const hitDurationLimit = Number.isFinite(durationLimitMinutes)
    const hitDurationLimit = isTripInService
      && Number.isFinite(durationLimitMinutes)
      && durationLimitMinutes > 0
      && Number.isFinite(currentDurationSeconds)
      && (currentDurationSeconds / 60) < durationLimitMinutes;