吉安感知网项目-前端
张含笑
2026-01-17 fc4c0f0e236baa2736442dec879a3c607dac73e3
feat:调整
2 files modified
123 ■■■■■ changed files
uniapps/work-app/src/hooks/useGlobalWS.js 118 ●●●●● patch | view | raw | blame | history
uniapps/work-app/src/utils/websocket.js 5 ●●●●● patch | view | raw | blame | history
uniapps/work-app/src/hooks/useGlobalWS.js
@@ -5,6 +5,7 @@
export function useGlobalWS() {
    const userStore = useUserStore();
  const appStore = useAppStore();
  const callStatus = ref(null)
  // 设置默认用户ID为3
  const defaultUserId = '3';
@@ -16,10 +17,10 @@
    console.log('🌐 全局WebSocket收到消息111111111111111111111:', payload)
    // 先尝试直接处理消息(适用于mobile-web-view的voiceCallDetail页面的消息格式)
    const t = (payload.type || '').toString()
    const bizCode = payload.biz_code || ''
    console.log('📋 消息分析:type=' + t + ', biz_code=' + bizCode)
    // const bizCode = payload.biz_code || ''
    callStatus.value = t
    console.log('📋 消息分析:type=' + t )
    console.log('222222222222222222',t,'----------------',callStatus.value,'----------------')
    // 处理语音通话请求
    if (t === 'call') {
      console.log('📞 全局收到来电 call,来自', payload.from)
@@ -36,15 +37,8 @@
      try {
        // 优先使用uni-app的导航API(适用于同应用内跳转)
        if (typeof uni !== 'undefined' && uni.navigateTo) {
          console.log('使用uni-app导航API跳转到语音通话页面');
          uni.navigateTo({
            url: `/subPackages/voiceCallDetail/index?voiceparams=${encodedParams}`,
            success: () => {
              console.log('✅ 应用内导航成功!');
            },
            fail: (err) => {
              console.error('❌ 应用内导航失败:', err);
            }
          });
        } else {
          console.error('无法跳转到语音通话页面:当前环境不支持导航');
@@ -56,64 +50,82 @@
    }
    // 然后处理biz_code格式的消息
    switch (bizCode) {
      case 'JOB_ISREFRESH':
        appStore.setJobUpdateKeyAdd()
        break
      case 'DEVICE_ISREFRESH':
        appStore.setDeviceUpdateKeyAdd()
        break
      case 'DOWNLOAD_PROGRESS':
        break
      case 'LOGOUT_USER':
        userStore.setUserInfo(null)
        uni.reLaunch({
          url: '/pages/login/index'
        })
        break
      case 'VoiceCall':
        // enterRoom(payload, userId.value)
        break
      default:
        // 记录未处理的消息
        console.log('未处理的WebSocket消息:', payload)
        break;
    }
    // switch (bizCode) {
    //   case 'JOB_ISREFRESH':
    //     appStore.setJobUpdateKeyAdd()
    //     break
    //   case 'DEVICE_ISREFRESH':
    //     appStore.setDeviceUpdateKeyAdd()
    //     break
    //   case 'DOWNLOAD_PROGRESS':
    //     break
    //   case 'LOGOUT_USER':
    //     userStore.setUserInfo(null)
    //     uni.reLaunch({
    //       url: '/pages/login/index'
    //     })
    //     break
    //   case 'VoiceCall':
    //     // enterRoom(payload, userId.value)
    //     break
    //   default:
    //     // 记录未处理的消息
    //     console.log('未处理的WebSocket消息:', payload)
    //     break;
    // }
  }
  // 初始化WebSocket连接
  function initWS() {
    try {
      // 检查是否已经有活跃的WebSocket连接
      if (!websocketService.getConnected()) {
        // 使用默认用户ID初始化WebSocket连接
        websocketService.init(defaultUserId, WS_BASE);
        console.log('🌐 全局WebSocket初始化成功,默认用户ID:', defaultUserId);
      } else {
        console.log('🌐 WebSocket已存在活跃连接,无需重新初始化');
      if (callStatus.value === 'accept') {
        console.log('📞 通话中,跳过WebSocket初始化');
        return;
      }
      websocketService.setOnMessageCallback(messageHandler);
      // 只设置一次全局消息处理回调
      // 检查是否已经设置了回调
      if (typeof websocketService.getOnMessageCallback() !== 'function') {
        // 设置全局消息处理回调
        websocketService.setOnMessageCallback(messageHandler);
        console.log('✅ 全局WebSocket消息处理器已设置');
      // 获取当前用户ID,优先使用store中的用户信息
      const userId = userStore.userInfo?.id || defaultUserId;
      // 检查是否已经有活跃的WebSocket连接
      if (!websocketService.getConnected() || websocketService.userId !== userId) {
        // 使用用户ID初始化WebSocket连接
        websocketService.init(userId, WS_BASE);
        // console.log('🌐 全局WebSocket初始化成功,用户ID:', userId);
      } else {
        console.log('✅ WebSocket消息处理器已存在,无需重新设置');
        // websocketService.connect();
      }
    } catch (error) {
      console.error('❌ 全局WebSocket初始化失败:', error);
      // console.error('❌ 全局WebSocket初始化失败:', error);
    }
  }
  // 监听用户信息变化,初始化WebSocket
  watch(
    () => userStore.userInfo,
    (newUserInfo) => {
      console.log('👤 用户信息变化,尝试初始化WebSocket');
    () => [userStore.userInfo, callStatus.value],
    ([newUserInfo,newValue]) => {
      if (newValue === 'accept') {
        console.log('📞 通话中,跳过WebSocket初始化');
        return;
      }
      // 不管是否有连接,都调用initWS来确保连接和消息处理器正常
      initWS();
    },
    { immediate: true }
    { immediate: true, deep: true }
  )
  watch(
    () => callStatus.value,
    (newValue) => {
      console.log('监听callStatus.value',newValue);
      if (newValue === 'accept') {
        console.log('📞 通话中,跳过WebSocket初始化');
        return;
      }
      websocketService.connect();
    }
  )
}
uniapps/work-app/src/utils/websocket.js
@@ -1,4 +1,4 @@
// WebSocket服务管理
import { useGlobalWS } from "@/hooks/useGlobalWS.js";// WebSocket服务管理
class WebSocketService {
  constructor() {
    this.socketTask = null
@@ -113,6 +113,7 @@
      data: JSON.stringify(message),
      success: () => {
        console.log('WebSocket消息发送成功:', message)
        useGlobalWS();
      },
      fail: (error) => {
        console.error('WebSocket消息发送失败:', error)
@@ -163,7 +164,7 @@
    console.log('🔔 WebSocket消息回调已设置')
    this.onMessageCallback = callback
  }
  // 获取当前消息回调(用于检查是否已设置)
  getOnMessageCallback() {
    return this.onMessageCallback