import { computed, onBeforeUnmount, onMounted } from 'vue';
|
import { getWebsocketUrl } from '@/utils/websocket/config'
|
import { useConnectWebSocket } from '@/utils/websocket/connect-websocket'
|
import { useStore } from 'vuex'
|
import dayjs from 'dayjs'
|
import { aLinkDownloadUtil } from '@/utils/util'
|
import EventBus from '@/utils/eventBus'
|
import { getStore, setStore } from '@/utils/store'
|
|
export const useGlobalWS = () => {
|
const store = useStore()
|
const loginUserInfo = computed(() => store.state.user.userInfo)
|
const downloadProgress = computed(() => store.state.common.downloadProgress)
|
let currentWebSocket = null
|
|
// 下载进度处理
|
function downloadProcessing(payload) {
|
const {type,status,progress,download_url} = payload?.data || {}
|
let setProgress = 0
|
if (status === 'PENDING'){
|
setProgress = 1
|
}else if(status === 'CANCELLED'){
|
setProgress = 100
|
}else if(status !== 'COMPLETED' && progress === 100){
|
setProgress = 99
|
}else{
|
setProgress = progress
|
}
|
store.commit('setDownloadProgress', {
|
...downloadProgress.value,
|
[type]: setProgress,
|
})
|
if (status === 'COMPLETED' && ['htsjzx','htlsrwxq'].includes(type)) {
|
const name = `数据中心-${dayjs().format('YYYYMMDDHHmmss')}.zip`
|
const currentUrl = getStore({name: 'downloadUrl'})
|
if (currentUrl === download_url && download_url!== undefined) return
|
aLinkDownloadUtil(download_url, name)
|
setStore({ name: 'downloadUrl', content: download_url })
|
}
|
}
|
|
const logOut = () => {
|
store.commit('SET_THEME_NAME', '')
|
store.dispatch('LogOut').then(() => {
|
router.push({ path: '/login' })
|
setTimeout(() => location.reload())
|
})
|
}
|
function messageHandler(payload) {
|
switch (payload.biz_code) {
|
case 'JOB_ISREFRESH':
|
store.commit('jobUpdateKeyAdd')
|
break
|
case 'DEVICE_ISREFRESH':
|
store.commit('deviceUpdateKeyAdd')
|
break
|
case 'DOWNLOAD_PROGRESS':
|
downloadProcessing(payload)
|
break
|
case 'LOGOUT_USER':
|
logOut()
|
break
|
}
|
}
|
|
onMounted(() => {
|
let webSocketUrl = getWebsocketUrl() + `&model_type=3&workspace-id=${loginUserInfo.value.user_id}`
|
currentWebSocket = useConnectWebSocket((result)=>{
|
const payload = JSON.parse(result)
|
messageHandler(payload)
|
}, webSocketUrl)
|
EventBus.on('useGlobalWS-messageHandler',messageHandler)
|
})
|
|
onBeforeUnmount(() => {
|
currentWebSocket?.close()
|
EventBus.off('useGlobalWS-messageHandler',messageHandler)
|
})
|
return {}
|
}
|