mirror of
https://github.com/jxxghp/MoviePilot-Frontend.git
synced 2026-07-12 16:01:35 +08:00
优化未读消息弹窗的打开逻辑
This commit is contained in:
@@ -72,16 +72,31 @@ async function checkUnreadMessages() {
|
|||||||
const unreadCount = await checkUnreadOnStartup()
|
const unreadCount = await checkUnreadOnStartup()
|
||||||
|
|
||||||
if (unreadCount > 0) {
|
if (unreadCount > 0) {
|
||||||
// 延迟2秒打开消息弹窗,确保页面和组件都已完全加载
|
// 等待组件完全加载并重试打开消息弹窗
|
||||||
setTimeout(() => {
|
await waitAndOpenMessageDialog()
|
||||||
shortcutBarRef.value?.openMessageDialog()
|
|
||||||
}, 2000)
|
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
// 静默处理错误
|
// 静默处理错误
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 等待组件准备好并打开消息弹窗
|
||||||
|
async function waitAndOpenMessageDialog() {
|
||||||
|
const maxRetries = 5
|
||||||
|
const retryDelay = 1000 // 1秒
|
||||||
|
|
||||||
|
for (let i = 0; i < maxRetries; i++) {
|
||||||
|
// 等待一段时间确保组件加载完成
|
||||||
|
await new Promise(resolve => setTimeout(resolve, retryDelay * (i + 1)))
|
||||||
|
|
||||||
|
// 检查ShortcutBar组件是否已经准备好
|
||||||
|
if (shortcutBarRef.value && typeof shortcutBarRef.value.openMessageDialog === 'function') {
|
||||||
|
shortcutBarRef.value.openMessageDialog()
|
||||||
|
return // 成功打开,退出重试循环
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
// 获取菜单列表
|
// 获取菜单列表
|
||||||
startMenus.value = getMenuList(t('menu.start'))
|
startMenus.value = getMenuList(t('menu.start'))
|
||||||
@@ -90,8 +105,12 @@ onMounted(() => {
|
|||||||
organizeMenus.value = getMenuList(t('menu.organize'))
|
organizeMenus.value = getMenuList(t('menu.organize'))
|
||||||
systemMenus.value = getMenuList(t('menu.system'))
|
systemMenus.value = getMenuList(t('menu.system'))
|
||||||
|
|
||||||
// 检查未读消息
|
// 延迟检查未读消息,确保所有组件都已加载完成
|
||||||
checkUnreadMessages()
|
nextTick(() => {
|
||||||
|
setTimeout(() => {
|
||||||
|
checkUnreadMessages()
|
||||||
|
}, 500)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@@ -13,21 +13,36 @@ export async function waitForServiceWorker(): Promise<ServiceWorker | null> {
|
|||||||
return navigator.serviceWorker.controller
|
return navigator.serviceWorker.controller
|
||||||
}
|
}
|
||||||
|
|
||||||
// 等待Service Worker注册和激活
|
// 等待Service Worker注册和激活,最多等待10秒
|
||||||
return new Promise(resolve => {
|
return new Promise(resolve => {
|
||||||
|
let timeoutId: ReturnType<typeof setTimeout> | null = null
|
||||||
|
let resolved = false
|
||||||
|
|
||||||
|
const resolveOnce = (sw: ServiceWorker | null) => {
|
||||||
|
if (resolved) return
|
||||||
|
resolved = true
|
||||||
|
if (timeoutId) clearTimeout(timeoutId)
|
||||||
|
resolve(sw)
|
||||||
|
}
|
||||||
|
|
||||||
const checkServiceWorker = () => {
|
const checkServiceWorker = () => {
|
||||||
if (navigator.serviceWorker.controller) {
|
if (navigator.serviceWorker.controller) {
|
||||||
resolve(navigator.serviceWorker.controller)
|
resolveOnce(navigator.serviceWorker.controller)
|
||||||
} else {
|
} else {
|
||||||
setTimeout(checkServiceWorker, 100)
|
setTimeout(checkServiceWorker, 200)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 监听Service Worker变化
|
// 监听Service Worker变化
|
||||||
navigator.serviceWorker.addEventListener('controllerchange', () => {
|
navigator.serviceWorker.addEventListener('controllerchange', () => {
|
||||||
resolve(navigator.serviceWorker.controller)
|
resolveOnce(navigator.serviceWorker.controller)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// 设置超时,10秒后返回null
|
||||||
|
timeoutId = setTimeout(() => {
|
||||||
|
resolveOnce(null)
|
||||||
|
}, 10000)
|
||||||
|
|
||||||
checkServiceWorker()
|
checkServiceWorker()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -41,11 +56,21 @@ export async function checkUnreadOnStartup(): Promise<number> {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
// 延迟500ms确保Service Worker完全准备好
|
// 延迟1秒确保Service Worker完全准备好
|
||||||
await new Promise(resolve => setTimeout(resolve, 500))
|
await new Promise(resolve => setTimeout(resolve, 1000))
|
||||||
|
|
||||||
const unreadCount = await getUnreadCount()
|
// 重试机制获取未读消息数量
|
||||||
return unreadCount
|
for (let i = 0; i < 3; i++) {
|
||||||
|
try {
|
||||||
|
const unreadCount = await getUnreadCount()
|
||||||
|
return unreadCount
|
||||||
|
} catch (error) {
|
||||||
|
if (i === 2) throw error // 最后一次重试失败则抛出错误
|
||||||
|
await new Promise(resolve => setTimeout(resolve, 500)) // 等待500ms后重试
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user