|
@@ -1,5 +1,4 @@
|
|
import { effectScope, onScopeDispose, watch } from 'vue'
|
|
import { effectScope, onScopeDispose, watch } from 'vue'
|
|
-import { useIntervalFn } from '@vueuse/core'
|
|
|
|
import uesFetch from '@/hooks/useFetch'
|
|
import uesFetch from '@/hooks/useFetch'
|
|
import useMainStore from '@/store/main'
|
|
import useMainStore from '@/store/main'
|
|
|
|
|
|
@@ -8,14 +7,29 @@ import type { ExtractApiResponse } from '@/api/api'
|
|
|
|
|
|
const useMessageLoop = () => {
|
|
const useMessageLoop = () => {
|
|
const mainStore = useMainStore()
|
|
const mainStore = useMainStore()
|
|
- const { fetch: getUnReadMessage, result: unReadMessage } = uesFetch('getUnReadMessage')
|
|
|
|
|
|
+
|
|
|
|
+ const { fetch: getUnReadMessage, result: unReadMessage, cancel } = uesFetch('getUnReadMessage')
|
|
|
|
+
|
|
|
|
+ let timer: number | null = null
|
|
|
|
+
|
|
|
|
+ const cleanTimer = () => {
|
|
|
|
+ if (timer) {
|
|
|
|
+ clearTimeout(timer)
|
|
|
|
+ timer = null
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ const getUnReadMessageFn = () => {
|
|
|
|
+ getUnReadMessage()
|
|
|
|
+ cleanTimer()
|
|
|
|
+ timer = window.setTimeout(getUnReadMessageFn, 30 * 1000)
|
|
|
|
+ }
|
|
|
|
|
|
watch(
|
|
watch(
|
|
() => mainStore?.myUserInfo?.role,
|
|
() => mainStore?.myUserInfo?.role,
|
|
() => {
|
|
() => {
|
|
if (mainStore?.myUserInfo?.role && mainStore?.myUserInfo?.role !== 'ADMIN') {
|
|
if (mainStore?.myUserInfo?.role && mainStore?.myUserInfo?.role !== 'ADMIN') {
|
|
- getUnReadMessage()
|
|
|
|
- useIntervalFn(getUnReadMessage, 30 * 1000)
|
|
|
|
|
|
+ getUnReadMessageFn()
|
|
}
|
|
}
|
|
},
|
|
},
|
|
{
|
|
{
|
|
@@ -23,6 +37,8 @@ const useMessageLoop = () => {
|
|
}
|
|
}
|
|
)
|
|
)
|
|
|
|
|
|
|
|
+ onScopeDispose(cleanTimer)
|
|
|
|
+
|
|
return unReadMessage
|
|
return unReadMessage
|
|
}
|
|
}
|
|
|
|
|
|
@@ -32,7 +48,6 @@ function createSharedComposable<Fn extends (...args: any[]) => any>(composable:
|
|
let scope: EffectScope | null
|
|
let scope: EffectScope | null
|
|
|
|
|
|
const dispose = () => {
|
|
const dispose = () => {
|
|
- console.log('dispose', scope)
|
|
|
|
if (scope && --subscribers <= 0) {
|
|
if (scope && --subscribers <= 0) {
|
|
scope.stop()
|
|
scope.stop()
|
|
state = scope = null
|
|
state = scope = null
|