chat-pc/src/hooks/useVisibilityChange.ts
2024-12-24 16:14:21 +08:00

45 lines
1.0 KiB
TypeScript

import { onMounted, onUnmounted } from 'vue'
import { useRouter } from 'vue-router'
import { isLoggedIn } from '@/utils/auth'
import { useSettingsStore } from '@/store'
let once = false
const paths = ['/auth/login', '/auth/register', '/auth/forget']
export function useVisibilityChange() {
onMounted(() => {
document.addEventListener('visibilitychange', handle)
})
onUnmounted(() => {
document.removeEventListener('visibilitychange', handle)
})
return {}
}
function handle() {
useSettingsStore().isLeaveWeb = document.visibilityState === 'hidden'
if (document.visibilityState === 'hidden') {
return
}
if (isLoggedIn() || once) return
if (paths.includes(useRouter().currentRoute.value.path)) return
once = true
window['$dialog'].info({
title: '友情提示',
content: '当前登录已失效,请重新登录?',
positiveText: '立即登录?',
maskClosable: false,
onPositiveClick: () => {
once = false
useRouter().push('/auth/login')
}
})
}