hejianhao
2026-03-05 959fc00e745ed05439bbea2e90cdeb2ec2b3a9b5
refactor(robotaxi): 移除本地存储的路线数据并重构路线获取逻辑

- 删除 orderRoute* 相关本地存储操作,改为实时从接口获取路线数据
- 新增 requestOrderRoute 函数统一处理订单路线查询
- 移除 getStoredRoutePoints 函数及相关调用
- 重命名 webview 页面为 webpage 以保持命名一致性
2 文件已重命名
5个文件已修改
177 ■■■■■ 已修改文件
src/app.config.ts 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/robotaxi/home/index.tsx 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/webpage/index.config.ts 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/webpage/index.tsx 补丁 | 查看 | 原始文档 | blame | 历史
src/robotaxi/pages/begin-route/components/calling-car.tsx 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/robotaxi/pages/begin-route/index.tsx 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/Robotaxi-public-method.ts 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/app.config.ts
@@ -14,7 +14,7 @@
    'pages/user/index',
    'pages/user/login',
    'pages/map/index',
    'pages/webview/index',
    'pages/webpage/index',
  ];
  subPackages = [
src/pages/robotaxi/home/index.tsx
@@ -141,10 +141,6 @@
        })
        getOrderActive().then(res => {
          if (!res) {
            Taro.removeStorageSync('orderRouteDuration');
            Taro.removeStorageSync('orderRouteDistance');
            Taro.removeStorageSync('orderRoutePoints');
            Taro.removeStorageSync('orderRouteLatestType');
            Taro.removeStorageSync('orderId');
            Taro.removeStorageSync('tripStatus');
            Taro.removeStorageSync('endSite');
src/pages/webpage/index.config.ts
src/pages/webpage/index.tsx
src/robotaxi/pages/begin-route/components/calling-car.tsx
@@ -180,12 +180,6 @@
            }).catch(() => { });
        } else if (tripStatus === 4) {
            // 即将到达:加载路线时间、限停时间与当前车内温度
            const durationUnit = Taro.getStorageSync('orderRouteDurationUnit');
            const duration = Number(Taro.getStorageSync('orderRouteDuration'));
            const durationSeconds = durationUnit === 's' ? duration : duration * 60;
            if (!Number.isNaN(durationSeconds)) {
                setRouteDuration(durationSeconds);
            }
            const s = Taro.getStorageSync('startSite');
            const time = Number(s?.time);
            if (!Number.isNaN(time)) {
@@ -206,12 +200,6 @@
            }
        } else if (tripStatus === 5) {
            // 已到达上车点:根据限停时间启动倒计时并处理超时
            const durationUnit = Taro.getStorageSync('orderRouteDurationUnit');
            const duration = Number(Taro.getStorageSync('orderRouteDuration'));
            const durationSeconds = durationUnit === 's' ? duration : duration * 60;
            if (!Number.isNaN(durationSeconds)) {
                setRouteDuration(durationSeconds);
            }
            const s = Taro.getStorageSync('startSite');
            const time = Number(s?.time);
            if (!Number.isNaN(time) && time > 0) {
src/robotaxi/pages/begin-route/index.tsx
@@ -19,7 +19,7 @@
import suggest from '../../../robotaxi/assets/suggest.png'
import originIcon from '../../../robotaxi/assets/origin-icon.png'
import wsManager from '../../../utils/websocket';
import { getWalkingRoute, formatDurationToClock, formatDateTime, getStoredRoutePoints, clearOrderTripStorage } from '../../../utils/Robotaxi-public-method';
import { getWalkingRoute, formatDurationToClock, formatDateTime, clearOrderTripStorage } from '../../../utils/Robotaxi-public-method';
import {
  saveOrder,
  queryRouteAndFare,
@@ -272,14 +272,10 @@
      const distanceKm = normalizeDistanceKm(distance);
      if (distanceKm !== null) {
        setRouteDistance(distanceKm);
        Taro.setStorageSync('orderRouteDistance', distanceKm.value);
        Taro.setStorageSync('orderRouteDistanceUnit', distanceKm.unit);
      }
      const durationSeconds = normalizeDurationSeconds(duration);
      if (durationSeconds !== null) {
        setRouteDuration(durationSeconds);
        Taro.setStorageSync('orderRouteDuration', durationSeconds);
        Taro.setStorageSync('orderRouteDurationUnit', 's');
      }
      if (Array.isArray(points) && points.length > 0) {
        applyRoutePoints(points);
@@ -289,6 +285,43 @@
    }).catch(() => {
    });
  };
  const requestOrderRoute = (targetOrderId: string, status: number) => {
    const routeType = status <= 5 ? 1 : 2;
    queryOrderRoute({ orderId: targetOrderId, routeType })
      .then((res: any) => {
        const data = res;
        const rawPoints = Array.isArray(data?.polyline) ? data.polyline : [];
        const points = rawPoints
          .map((item: any) => ({
            longitude: Number(item?.longitude),
            latitude: Number(item?.latitude),
          }))
          .filter((item: any) => Number.isFinite(item.longitude) && Number.isFinite(item.latitude));
        if (points.length > 0) {
          if (status === 5) {
            const last = points[points.length - 1];
            setVehicleLocation({ latitude: last.latitude, longitude: last.longitude });
          } else {
            applyRoutePoints(points);
            const first = points[0];
            setVehicleLocation({ latitude: first.latitude, longitude: first.longitude });
          }
        }
        const distance = Number(data?.distance);
        const distanceKm = normalizeDistanceKm(distance);
        if (distanceKm !== null) {
          setRouteDistance(distanceKm);
        }
        const duration = Number(data?.duration);
        const durationSeconds = normalizeDurationSeconds(duration);
        if (durationSeconds !== null) {
          setRouteDuration(durationSeconds);
        }
        setVehicleDirection(data?.direction);
      })
      .catch(() => { });
  };
  // 计算“当前位置→上车点”的步行路径
@@ -395,14 +428,10 @@
      const distanceKm = normalizeDistanceKm(distance);
      if (distanceKm !== null) {
        setRouteDistance(distanceKm);
        Taro.setStorageSync('orderRouteDistance', distanceKm.value);
        Taro.setStorageSync('orderRouteDistanceUnit', distanceKm.unit);
      }
      const durationSeconds = normalizeDurationSeconds(duration);
      if (durationSeconds !== null) {
        setRouteDuration(durationSeconds);
        Taro.setStorageSync('orderRouteDuration', durationSeconds);
        Taro.setStorageSync('orderRouteDurationUnit', 's');
      }
      const isHoldMapStatus = [5, 6].includes(tripStatusRef.current);
      // 仅在呼叫及后续阶段允许展示路线
@@ -583,17 +612,6 @@
    }
  });
  // 监听tripStatus变化,应用存储的路线点
  useEffect(() => {
    if (tripStatus === 4 || tripStatus === 5) {
      setRoutePoints([]);
      setPolyline([]);
      return;
    }
    const storedPoints = getStoredRoutePoints(tripStatus);
    applyRoutePoints(storedPoints);
  }, [tripStatus]);
  // 在tripStatus=1时也绘制预估路线与步行路线
  useEffect(() => {
    const s = Taro.getStorageSync('startSite');
@@ -753,49 +771,7 @@
        .catch(() => { });
    }
    if (cachedOrderId && [4, 5, 6, 7, 8].includes(cachedTripStatus)) {
      const routeType = cachedTripStatus <= 5 ? 1 : 2;
      queryOrderRoute({ orderId: cachedOrderId, routeType })
        .then((res: any) => {
          const data = res;
          const rawPoints = Array.isArray(data?.polyline) ? data.polyline : [];
          const points = rawPoints
            .map((item: any) => ({
              longitude: Number(item?.longitude),
              latitude: Number(item?.latitude),
            }))
            .filter((item: any) => Number.isFinite(item.longitude) && Number.isFinite(item.latitude));
          if (points.length > 0) {
            if (cachedTripStatus === 5) {
              const last = points[points.length - 1];
              setVehicleLocation({ latitude: last.latitude, longitude: last.longitude });
            } else {
              applyRoutePoints(points);
              const first = points[0];
              setVehicleLocation({ latitude: first.latitude, longitude: first.longitude });
            }
            const cached = Taro.getStorageSync('orderRoutePoints') || {};
            cached[String(routeType)] = points;
            cached.latest = points;
            Taro.setStorageSync('orderRoutePoints', cached);
            Taro.setStorageSync('orderRouteLatestType', routeType);
          }
          const distance = Number(data?.distance);
          const distanceKm = normalizeDistanceKm(distance);
          if (distanceKm !== null) {
            setRouteDistance(distanceKm);
            Taro.setStorageSync('orderRouteDistance', distanceKm.value);
            Taro.setStorageSync('orderRouteDistanceUnit', distanceKm.unit);
          }
          const duration = Number(data?.duration);
          const durationSeconds = normalizeDurationSeconds(duration);
          if (durationSeconds !== null) {
            setRouteDuration(durationSeconds);
            Taro.setStorageSync('orderRouteDuration', durationSeconds);
            Taro.setStorageSync('orderRouteDurationUnit', 's');
          }
          setVehicleDirection(data?.direction);
        })
        .catch(() => { });
      requestOrderRoute(cachedOrderId, cachedTripStatus);
    }
    if (s && s.latitude && s.longitude) {
@@ -803,30 +779,6 @@
      setLongitude(s.longitude);
    } else {
      getLocationInfo();
    }
    const storedPoints = getStoredRoutePoints(tripStatus);
    if (cachedTripStatus === 4 || cachedTripStatus === 5) {
      applyRoutePoints([]);
    } else {
      applyRoutePoints(storedPoints);
    }
    const storedDistance = Number(Taro.getStorageSync('orderRouteDistance'));
    const storedDistanceUnit = Taro.getStorageSync('orderRouteDistanceUnit');
    if (storedDistanceUnit === 'km' || storedDistanceUnit === 'm') {
      if (!Number.isNaN(storedDistance)) {
        setRouteDistance({ value: storedDistance, unit: storedDistanceUnit });
      }
    } else {
      const normalizedStoredDistance = normalizeDistanceKm(storedDistance);
      if (normalizedStoredDistance !== null) {
        setRouteDistance(normalizedStoredDistance);
      }
    }
    const storedDuration = Number(Taro.getStorageSync('orderRouteDuration'));
    const storedDurationUnit = Taro.getStorageSync('orderRouteDurationUnit');
    const normalizedStoredDuration = storedDurationUnit === 's' ? storedDuration : Math.round(storedDuration * 60);
    if (!Number.isNaN(normalizedStoredDuration)) {
      setRouteDuration(normalizedStoredDuration);
    }
    const originLng = s?.longitude || longitude;
    const originLat = s?.latitude || latitude;
src/utils/Robotaxi-public-method.ts
@@ -169,7 +169,7 @@
  } else if (jumpType === 3) {
    if (jumpUrl) {
      Taro.navigateTo({
        url: `/pages/webview/index?url=${encodeURIComponent(jumpUrl)}`
        url: `/pages/webpage/index?url=${encodeURIComponent(jumpUrl)}`
      });
    }
  }
@@ -333,39 +333,8 @@
  return `${y}-${mo}-${d} ${h}:${mi}:${s}`;
};
// 获取存储的路线点
export const getStoredRoutePoints = (status?: number) => {
  const cached = Taro.getStorageSync('orderRoutePoints') || {};
  const preferredType = typeof status === 'number' && status >= 6 ? 2 : 1;
  const preferred = cached[String(preferredType)];
  if (Array.isArray(preferred) && preferred.length > 0) {
    return preferred;
  }
  const latestType = Taro.getStorageSync('orderRouteLatestType');
  const latest = cached[String(latestType)];
  if (Array.isArray(latest) && latest.length > 0) {
    return latest;
  }
  if (Array.isArray(cached.latest) && cached.latest.length > 0) {
    return cached.latest;
  }
  const keys = Object.keys(cached);
  for (const key of keys) {
    if (Array.isArray(cached[key]) && cached[key].length > 0) {
      return cached[key];
    }
  }
  return [];
};
// 清除订单行程存储
export const clearOrderTripStorage = () => {
  Taro.removeStorageSync('orderRouteDuration');
  Taro.removeStorageSync('orderRouteDurationUnit');
  Taro.removeStorageSync('orderRouteDistance');
  Taro.removeStorageSync('orderRouteDistanceUnit');
  Taro.removeStorageSync('orderRoutePoints');
  Taro.removeStorageSync('orderRouteLatestType');
  Taro.removeStorageSync('orderId');
  Taro.removeStorageSync('tripStatus');
};