From 1586137a5d56e2cf1f2d4db4a1aece3388eb6a41 Mon Sep 17 00:00:00 2001 From: jxxghp Date: Sun, 20 Jul 2025 08:25:20 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=A6=BB=E7=BA=BF=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E7=AE=A1=E7=90=86=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/offline.html | 4 ++-- src/api/index.ts | 6 ++++-- src/composables/useOfflineStatus.ts | 25 +++++++++++++++++++++++++ src/locales/en-US.ts | 4 ++-- src/locales/zh-CN.ts | 4 ++-- src/locales/zh-TW.ts | 4 ++-- 6 files changed, 37 insertions(+), 10 deletions(-) diff --git a/public/offline.html b/public/offline.html index 2eaaac95..96667054 100644 --- a/public/offline.html +++ b/public/offline.html @@ -137,7 +137,7 @@
- 离线模式 + 离线状态
@@ -157,4 +157,4 @@ } - \ No newline at end of file + diff --git a/src/api/index.ts b/src/api/index.ts index c8e73da3..e252dea4 100644 --- a/src/api/index.ts +++ b/src/api/index.ts @@ -39,8 +39,9 @@ const globalOfflineStatus = useGlobalOfflineStatus() // 添加响应拦截器 api.interceptors.response.use( response => { - // 成功响应时,清除应用离线状态 + // 成功响应时,清除应用离线状态并重置连续错误计数 globalOfflineStatus.setAppOffline(false) + globalOfflineStatus.resetConsecutiveErrors() return response.data }, error => { @@ -57,7 +58,8 @@ api.interceptors.response.use( if (error.code === 'ECONNABORTED') { reason = 'Request timeout' } - globalOfflineStatus.setAppOffline(true, reason) + // 记录网络错误,只有连续三次才会设置为离线模式 + globalOfflineStatus.recordNetworkError(reason) } if (error.code === 'NETWORK_ERROR' || error.code === 'ERR_NETWORK') { diff --git a/src/composables/useOfflineStatus.ts b/src/composables/useOfflineStatus.ts index 6e589134..3eaa152e 100644 --- a/src/composables/useOfflineStatus.ts +++ b/src/composables/useOfflineStatus.ts @@ -4,6 +4,8 @@ import { useOnline } from '@vueuse/core' // 全局状态 const isAppOffline = ref(false) const appOfflineReason = ref('') +const consecutiveNetworkErrors = ref(0) +const MAX_CONSECUTIVE_ERRORS = 3 // 全局离线状态管理 export function useGlobalOfflineStatus() { @@ -19,6 +21,26 @@ export function useGlobalOfflineStatus() { const setAppOffline = (offline: boolean, reason?: string) => { isAppOffline.value = offline appOfflineReason.value = reason || '' + + // 如果设置为在线状态,重置连续错误计数 + if (!offline) { + consecutiveNetworkErrors.value = 0 + } + } + + // 记录网络错误 + const recordNetworkError = (reason?: string) => { + consecutiveNetworkErrors.value++ + + // 只有连续出现三次网络错误时才设置为离线模式 + if (consecutiveNetworkErrors.value >= MAX_CONSECUTIVE_ERRORS) { + setAppOffline(true, reason || `连续${MAX_CONSECUTIVE_ERRORS}次网络错误`) + } + } + + // 重置连续错误计数 + const resetConsecutiveErrors = () => { + consecutiveNetworkErrors.value = 0 } // 获取离线消息 @@ -37,7 +59,10 @@ export function useGlobalOfflineStatus() { isOffline, canPerformNetworkAction, setAppOffline, + recordNetworkError, + resetConsecutiveErrors, getOfflineMessage, + consecutiveNetworkErrors: computed(() => consecutiveNetworkErrors.value), } } diff --git a/src/locales/en-US.ts b/src/locales/en-US.ts index ee7913a1..6e0e534d 100644 --- a/src/locales/en-US.ts +++ b/src/locales/en-US.ts @@ -144,9 +144,9 @@ export default { restartTip: 'After restart, you will be logged out and need to log in again.', restartTimeout: 'Restart timeout, the system may need more time to recover, please refresh the page manually later', restartFailed: 'Restart failed, please check system status', - offline: 'Offline Mode', + offline: 'Application Offline', offlineMessage: 'Network connection lost, some features may be limited', - online: 'Online Mode', + online: 'Application Online', onlineMessage: 'Network connection restored', }, pwa: { diff --git a/src/locales/zh-CN.ts b/src/locales/zh-CN.ts index 325eb9f0..d650de8b 100644 --- a/src/locales/zh-CN.ts +++ b/src/locales/zh-CN.ts @@ -144,9 +144,9 @@ export default { restartTip: '重启后,您将被注销并需要重新登录。', restartTimeout: '重启超时,系统可能需要更长时间恢复,请稍后手动刷新页面', restartFailed: '重启失败,请检查系统状态', - offline: '离线模式', + offline: '应用已离线', offlineMessage: '网络连接已断开,部分功能可能受限', - online: '在线模式', + online: '应用在线', onlineMessage: '网络连接已恢复', }, pwa: { diff --git a/src/locales/zh-TW.ts b/src/locales/zh-TW.ts index 4b04ce70..1f6e176f 100644 --- a/src/locales/zh-TW.ts +++ b/src/locales/zh-TW.ts @@ -145,9 +145,9 @@ export default { restartTip: '重啟後,您將被註銷並需要重新登錄。', restartTimeout: '重啟超時,系統可能需要更長時間恢復,請稍後手動刷新頁面', restartFailed: '重啟失敗,請檢查系統狀態', - offline: '離線模式', + offline: '應用已離線', offlineMessage: '網絡連接已斷開,部分功能可能受限', - online: '在線模式', + online: '應用在線', onlineMessage: '網絡連接已恢復', }, pwa: {