fix(websocket): 修复auth_success事件大小写兼容问题并优化订单同步逻辑

修复websocket消息处理的大小写兼容问题,将消息类型转为小写后匹配对应事件
优化begin-route页面的websocket连接逻辑,仅在重连时触发订单状态同步兜底,避免首次连接重复执行
2个文件已修改
27 ■■■■■ 已修改文件
src/robotaxi/pages/begin-route/hooks/use-web-socket-events.ts 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/websocket.ts 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/robotaxi/pages/begin-route/hooks/use-web-socket-events.ts
@@ -160,6 +160,17 @@
    const businessHandlerMapRef = useRef(createBusinessHandlerMap());
    const socketOpenHandlerRef = useRef<(() => void) | null>(null);
    const lastFetchedVehicleOrderIdRef = useRef<string | null>(null);
    const hasSocketOpenedRef = useRef(false);
    /**
     * Socket 就绪后,对当前订单补做一次状态同步兜底。
     * 断网期间若漏掉“到达上车点”等关键推送,这里会通过活跃订单接口把页面拉回最新态。
     */
    const syncCurrentOrderAfterSocketReady = () => {
        if (depsRef.current.orderId && typeof depsRef.current.syncSitesFromActiveOrder === 'function') {
            depsRef.current.syncSitesFromActiveOrder();
        }
    };
    /**
     * 绑定业务事件监听。
@@ -194,17 +205,14 @@
                wsManager.on('message', messageHandlerRef.current);
                messageBound.current = true;
            }
            // 当 Socket 鉴权成功(通常发生在重连后),如果当前存在订单,则触发一次状态同步兜底
            // 以防止在前台弱网断开重连期间漏掉重要的订单状态转换
            if (depsRef.current.orderId && typeof depsRef.current.syncSitesFromActiveOrder === 'function') {
                depsRef.current.syncSitesFromActiveOrder();
            }
            syncCurrentOrderAfterSocketReady();
        };
        messageHandlerRef.current = (data) => {
            console.log('ws message:', data);
        };
        if (wsManager.isConnectedStatus()) {
            bindSocketListeners();
            hasSocketOpenedRef.current = true;
        }
        return () => {
            if (authSuccessBound.current && authSuccessHandlerRef.current) {
@@ -243,6 +251,10 @@
        }
        const handleOpen = () => {
            bindSocketListeners();
            if (hasSocketOpenedRef.current) {
                syncCurrentOrderAfterSocketReady();
            }
            hasSocketOpenedRef.current = true;
        };
        socketOpenHandlerRef.current = handleOpen;
        wsManager.on('open', handleOpen);
src/utils/websocket.ts
@@ -788,6 +788,11 @@
   * 处理传入消息。
   */
  private handleIncomingMessage(data: any, content: any) {
    const rawType = String(data?.type || '');
    const normalizedType = rawType.toLowerCase();
    if (normalizedType === 'auth_success' && rawType !== 'auth_success') {
      this.notifyListeners('auth_success', data);
    }
    if (data?.type === 'ORDER_STATUS') {
      const status = content?.status;
       const orderId = content?.orderId ?? data?.orderId;