fetch(modify):完善设备管理
All checks were successful
构建并部署前端到测试环境 / build-and-deploy (push) Successful in 2m47s

This commit is contained in:
sexygoat
2026-02-02 10:27:03 +08:00
parent 882feaf3ff
commit e08c962c40
4 changed files with 428 additions and 84 deletions

View File

@@ -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