qingyiay
2023-06-29 9579955eecf9584697c546eae6ba90fb33795e40
store/index.js
@@ -1,5 +1,6 @@
import Vue from 'vue'
import Vuex from 'vuex'
import { webSocketUrl } from '@/api/request.js'
Vue.use(Vuex)
// 动态底部tabbar
@@ -71,7 +72,12 @@
         weight: '',
         userId: ''
      },
      globalisconnect: false
      globalisconnect: true,
      globalisUploadimg: false,
      globalisLogin: false,
      socketTask: null,
      websocketData: null, // 存放从后端接收到的websocket数据
      globalIntervalId: null,
   },
   mutations: {
      lengthchange(state, payload) {
@@ -115,8 +121,62 @@
      // 改版全局websocket状态
      changeisconnect(state, payload) {
         state.globalisconnect = payload
      },
      changeisUploadimg(state, payload) {
         state.globalisUploadimg = payload
      },
      changeisLogin(state, payload) {
         state.globalisLogin = payload
         console.log(state.globalisLogin, '全局登录状态改变了')
      },
      setWebsocketData(state, data) {
         state.websocketData = data
      }
   },
   actions: {
      websocketInit({ state, dispatch, commit }) {
         let wsUrl = `${webSocketUrl}?access_token=${uni.getStorageSync('token')}`
         state.socketTast = uni.connectSocket({
            url: wsUrl,
            header: { CLIENT_TOC: 'Y' },
            complete: res => {
               console.log(res, 'socket结果')
               if (res.errMsg === 'connectSocket:ok') {
                  commit('changeisconnect', true)
               }
            }
         })
         state.socketTast.onOpen(() => dispatch('websocketOnOpen'))
         state.socketTast.onMessage(result => dispatch('websocketOnMessage', result.data))
         state.socketTast.onClose(e => dispatch('websocketOnClose', e))
         state.socketTast.onError(e => dispatch('websocketOnError'))
      },
      websocketOnOpen({ state, commit }) {
         console.log('onOpen')
         state.globalIntervalId = setInterval(() => {
            state.socketTast.send({
               data: JSON.stringify({ type: 'ping' }),
               success(e) {
                  console.log(e, '发送心跳成功')
               }
            })
         }, 30000)
      },
      websocketOnClose({ state, commit }) {
         if (!state.socketTast) return
         state.socketTast.close(e => {
            commit('changeisconnect', false)
         })
         console.log('ws关闭')
      },
      websocketOnError(e) {
         console.log('socket报错', e)
      },
      // 接收数据
      websocketOnMessage({ state, commit }, result) {
         commit('setWebsocketData', result)
      }
   }
})
export default store
export default store