吉安感知网项目-前端
张含笑
2026-02-26 b746c44906eafc73990d456f509284db3150de46
feat:ws连接
4 files modified
49 ■■■■■ changed files
applications/mobile-web-view/src/appPages/voiceCallDetail/index.vue 7 ●●●● patch | view | raw | blame | history
uniapps/work-app/src/hooks/useGlobalWS.js 14 ●●●●● patch | view | raw | blame | history
uniapps/work-app/src/subPackages/voiceCallDetail/index.vue 6 ●●●● patch | view | raw | blame | history
uniapps/work-app/src/utils/websocket.js 22 ●●●● patch | view | raw | blame | history
applications/mobile-web-view/src/appPages/voiceCallDetail/index.vue
@@ -466,7 +466,8 @@
    // 你后端没有 reject,用 busy 表示拒绝/不可接听
    send('busy', incomingFrom, null)
    log('❌ 已拒绝来电,发送 busy 给', incomingFrom)
    const transmitData = { data: { type: 'hangupVoice' } }
uni.postMessage(transmitData)
    // 停止铃声
//     const transmitData = { data: { type: 'stopVoice' } }
// uni.postMessage(transmitData)
@@ -572,6 +573,8 @@
        } else {
            log('❌ uni对象不存在,无法返回上一页')
        }
        const transmitData = { data: { type: 'hangupVoice' } }
        uni.postMessage(transmitData)
    } else {
        // 对方挂断:显示提示,延迟10秒跳转
        callEnded.value = true
@@ -585,6 +588,8 @@
            } else {
                log('❌ uni对象不存在,无法返回上一页')
            }
            const transmitData = { data: { type: 'hangupVoice' } }
            uni.postMessage(transmitData)
            // 重置通话结束状态
            callEnded.value = false
        }, 3000)
uniapps/work-app/src/hooks/useGlobalWS.js
@@ -15,6 +15,18 @@
  // 存储铃声实例
  let ringtoneInstance = null
  // 监听WebView消息事件
  if (typeof uni !== 'undefined' && uni.$on) {
    uni.$on('webViewMessage', (data) => {
      console.log('📨 useGlobalWS 收到 WebView 消息:', data)
      // 处理挂断消息
      if (data?.type === 'hangupVoice') {
        console.log('📞 收到挂断消息')
        initWS()
      }
    });
  }
  // 设置默认用户ID为3
  const defaultUserId = '2021474815063486465';
  // WebSocket基础URL
@@ -165,6 +177,7 @@
      return
    }
    recoverTimer = setInterval(() => {
      // console.log('shouldRecoverWS()',shouldRecoverWS(),'----------',websocketService.getConnected())
      if (shouldRecoverWS() && !websocketService.getConnected()) {
        initWS()
      }
@@ -172,6 +185,7 @@
  }
  function initWS() {
    websocketService.close()
    const userStore = useUserStore()
    accessToken.value =userStore?.userInfo.access_token
    if (!accessToken.value || isVoiceCallDetailActive()) {
uniapps/work-app/src/subPackages/voiceCallDetail/index.vue
@@ -79,9 +79,9 @@
function onPostMessage(data) {
    // 将WebView消息传递给全局WebSocket处理
    // if (typeof uni !== 'undefined' && uni.$emit) {
    //     uni.$emit('webViewMessage', data);
    // }
    if (typeof uni !== 'undefined' && uni.$emit) {
        uni.$emit('webViewMessage', data);
    }
}
</script>
uniapps/work-app/src/utils/websocket.js
@@ -114,8 +114,8 @@
    this.socketTask.send({
      data: JSON.stringify(message),
      success: () => {
        // console.log('WebSocket消息发送成功:', message)
        useGlobalWS();
        console.log('WebSocket消息发送成功:', message)
        // useGlobalWS();
      },
      fail: (error) => {
        // console.error('WebSocket消息发送失败:', error)
@@ -124,15 +124,15 @@
  }
  // 开始心跳检测
  startPing() {
    this.stopPing()
    // 每25秒发送一次心跳
    this.pingTimer = setInterval(() => {
      if (this.connected) {
        this.send('ping', 'system')
      }
    }, 25000)
  }
  // startPing() {
  //   this.stopPing()
  //   // 每25秒发送一次心跳
  //   this.pingTimer = setInterval(() => {
  //     if (this.connected) {
  //       this.send('ping', 'system')
  //     }
  //   }, 25000)
  // }
  // 停止心跳检测
  stopPing() {