hejianhao
2026-04-14 129e78a73c38c98826ee9a3ef91e228339b2d645
fix(robotaxi): 修复行程状态同步和车门解锁异常处理

- 在解锁车辆API调用中增加showToast和skipException参数,确保错误正确提示
- 修复页面恢复时行程状态未同步到状态管理的问题
- 修正WebSocket事件中行程状态比较逻辑,使用当前状态引用而非本地存储
- 添加行程状态变化时同步更新引用和本地存储的useEffect
- 在车门控制组件中增加调试日志输出
5个文件已修改
18 ■■■■■ 已修改文件
src/robotaxi/api/begin-route.ts 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/robotaxi/pages/begin-route/components/calling-car-modules/door-trunk-control.tsx 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/robotaxi/pages/begin-route/hooks/use-page-restore.ts 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/robotaxi/pages/begin-route/hooks/use-web-socket-events.ts 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/robotaxi/pages/begin-route/index.tsx 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/robotaxi/api/begin-route.ts
@@ -51,7 +51,9 @@
    return request({
        url: _ROBOTAXI_HOST + '/vehicleConvoy/api/v1/mini-program/order/vehicle/unlock',
        method: 'POST',
        payload
        payload,
        showToast: true,
        skipException: true
    }, true);
}
src/robotaxi/pages/begin-route/components/calling-car-modules/door-trunk-control.tsx
@@ -67,6 +67,8 @@
            doorType,
            ...locationPayload
        }).then((res: any) => {
            console.log(res,'***********');
            if (!res) {
                Taro.showToast({ title: '解锁失败,请重试或联系客服', icon: 'none' });
                return;
@@ -130,6 +132,8 @@
                }
            }
        }).catch(() => {
            console.log(res,'***********');
            Taro.showToast({ title: '解锁失败,请重试或联系客服', icon: 'none' });
        });
    };
src/robotaxi/pages/begin-route/hooks/use-page-restore.ts
@@ -120,6 +120,7 @@
    const cachedOrderId = Taro.getStorageSync('orderId');
    const cachedTripStatusStorage = Taro.getStorageSync('tripStatus');
    const cachedTripStatus = Number(cachedTripStatusStorage) || deps.getCurrentTripStatus();
    deps.setTripStatus(cachedTripStatus);
    syncCachedOrderVehicle(cachedOrderId);
    syncSitesFromActiveOrder(cachedTripStatusStorage, s, e);
    if (cachedOrderId && [4, 5, 6, 7, 8, 9].includes(cachedTripStatus)) {
src/robotaxi/pages/begin-route/hooks/use-web-socket-events.ts
@@ -66,8 +66,8 @@
    if (typeof mappedTripStatus !== 'number') {
        return null;
    }
    const currentLocalStatus = Number(Taro.getStorageSync('tripStatus'));
    if (currentLocalStatus > mappedTripStatus && currentLocalStatus !== 10) {
    const currentTripStatus = Number(deps.tripStatusRef.current);
    if (currentTripStatus > mappedTripStatus && currentTripStatus !== 10) {
        return null;
    }
    deps.setTripStatus(mappedTripStatus);
src/robotaxi/pages/begin-route/index.tsx
@@ -97,6 +97,11 @@
  const tripStatusRef = useRef(tripStatus); // 行程状态引用
  const lastTripStatusRef = useRef(tripStatus); // 上一次行程状态,用于检测状态变化
  const tripStatusForMapSyncRef = useRef(tripStatus); // 用于地图同步的行程状态引用
  useEffect(() => {
    tripStatusRef.current = tripStatus;
    tripStatusForMapSyncRef.current = tripStatus;
    Taro.setStorageSync('tripStatus', tripStatus);
  }, [tripStatus]);
  // 行程状态显示规则配置:showPickup-显示上车点,showDropoff-显示下车点,showCar-显示车辆,showRoute-显示路线,showWalking-显示步行路线,viewport-视口类型,translateCar-车辆是否平移
  const STATUS_RULES: Record<number, any> = {
    1: { showPickup: true, showDropoff: true, showCar: false, showRoute: true, showWalking: true, viewport: 'route_walking', translateCar: false },