diff --git a/src/store/modules/user.ts b/src/store/modules/user.ts index d02e28d..7b6c594 100644 --- a/src/store/modules/user.ts +++ b/src/store/modules/user.ts @@ -109,6 +109,23 @@ export const useUserStore = defineStore( } } + // 清理本地状态(不调用退出接口) + const clearLocalState = () => { + info.value = {} + isLogin.value = false + isLock.value = false + lockPassword.value = '' + accessToken.value = '' + refreshToken.value = '' + permissions.value = [] + menus.value = [] + buttons.value = [] + useWorktabStore().opened = [] + sessionStorage.removeItem('iframeRoutes') + resetRouterState(router) + router.push(RoutesAlias.Login) + } + const logOut = async () => { try { // 调用退出登录接口 @@ -117,19 +134,7 @@ export const useUserStore = defineStore( console.error('退出登录接口调用失败:', error) } finally { // 无论接口成功与否,都清理本地状态 - info.value = {} - isLogin.value = false - isLock.value = false - lockPassword.value = '' - accessToken.value = '' - refreshToken.value = '' - permissions.value = [] - menus.value = [] - buttons.value = [] - useWorktabStore().opened = [] - sessionStorage.removeItem('iframeRoutes') - resetRouterState(router) - router.push(RoutesAlias.Login) + clearLocalState() } } @@ -166,6 +171,7 @@ export const useUserStore = defineStore( setLockStatus, setLockPassword, setToken, + clearLocalState, logOut } }, diff --git a/src/utils/http/index.ts b/src/utils/http/index.ts index 718afb1..3eb13a3 100644 --- a/src/utils/http/index.ts +++ b/src/utils/http/index.ts @@ -93,9 +93,9 @@ axiosInstance.interceptors.response.use( const userStore = useUserStore() const originalRequest = response.config as any - // 如果没有 refreshToken,直接退出登录 + // 如果没有 refreshToken,直接清理本地状态(不调用退出接口) if (!userStore.refreshToken) { - logOut() + clearLocalStateAndRedirect() return Promise.reject(response) } @@ -140,16 +140,16 @@ axiosInstance.interceptors.response.use( // 重试原请求 resolve(axiosInstance.request(originalRequest)) } else { - // 刷新失败 + // 刷新失败 - 清理本地状态(不调用退出接口) processQueue(new Error('Token refresh failed'), null) - logOut() + clearLocalStateAndRedirect() reject(res) } }) .catch((err) => { - // 刷新失败 + // 刷新失败 - 清理本地状态(不调用退出接口) processQueue(err, null) - logOut() + clearLocalStateAndRedirect() reject(err) }) .finally(() => { @@ -162,7 +162,16 @@ axiosInstance.interceptors.response.use( (error) => { if (axios.isCancel(error)) { console.log('repeated request: ' + error.message) + return Promise.reject(error) } + + // 处理 HTTP 401 状态码 - 直接清理本地状态(不调用退出接口) + if (error.response && error.response.status === 401) { + console.warn('HTTP 401 Unauthorized - 强制退出登录') + clearLocalStateAndRedirect() + return Promise.reject(error) + } + // 注意:错误处理现在在request函数中根据requestOptions处理 return Promise.reject(error) } @@ -270,7 +279,7 @@ const api = { } } -// 退出登录 +// 退出登录(调用接口) const logOut = () => { ElMessage.error('登录已过期,请重新登录') setTimeout(() => { @@ -278,4 +287,12 @@ const logOut = () => { }, 1000) } +// 仅清理本地状态(不调用接口)- 用于401等情况 +const clearLocalStateAndRedirect = () => { + ElMessage.error('登录已过期,请重新登录') + setTimeout(() => { + useUserStore().clearLocalState() + }, 1000) +} + export default api diff --git a/src/views/asset-management/device-list/index.vue b/src/views/asset-management/device-list/index.vue index 2dddaab..7e29236 100644 --- a/src/views/asset-management/device-list/index.vue +++ b/src/views/asset-management/device-list/index.vue @@ -65,19 +65,16 @@ {{ selectedDevices.length }} - - - + /> - +
- - {{ currentDeviceDetail.id }} - {{ - currentDeviceDetail.device_no - }} +
+ + + {{ currentDeviceDetail.id }} + {{ + currentDeviceDetail.device_no + }} - {{ - currentDeviceDetail.device_name || '--' - }} - {{ - currentDeviceDetail.device_model || '--' - }} - {{ - currentDeviceDetail.device_type || '--' - }} + {{ + currentDeviceDetail.device_name || '--' + }} + {{ + currentDeviceDetail.device_model || '--' + }} + {{ + currentDeviceDetail.device_type || '--' + }} - {{ - currentDeviceDetail.manufacturer || '--' - }} - {{ - currentDeviceDetail.max_sim_slots - }} - {{ - currentDeviceDetail.bound_card_count - }} + {{ + currentDeviceDetail.manufacturer || '--' + }} + {{ + currentDeviceDetail.max_sim_slots + }} + {{ + currentDeviceDetail.bound_card_count + }} - - - {{ currentDeviceDetail.status_name }} - - - {{ - currentDeviceDetail.batch_no || '--' - }} + + + {{ currentDeviceDetail.status_name }} + + + {{ + currentDeviceDetail.batch_no || '--' + }} - {{ - currentDeviceDetail.created_at || '--' - }} - + {{ + formatDateTime(currentDeviceDetail.created_at) || '--' + }} + +
+
+ + + +
+ 绑定新卡 +
+
+ +
+
+ + + + + + + + + + + + + + +
+ 暂无绑定的卡片 +
+
+
+ + + + + + + + + + + + + + + + @@ -316,9 +402,9 @@