perf: 前端配置Element Plus按需引入,优化Axios错误拦截提示

This commit is contained in:
yml
2026-05-25 02:23:20 +08:00
parent 7d74c0c146
commit 4ebb90870a
5 changed files with 64 additions and 5 deletions
+21 -1
View File
@@ -1,4 +1,11 @@
import axios, { type AxiosResponse, type InternalAxiosRequestConfig } from 'axios'
import { ElMessage } from 'element-plus'
declare module 'axios' {
export interface AxiosRequestConfig {
silent?: boolean
}
}
import {
clearAuthStorage,
@@ -30,7 +37,10 @@ type RefreshState = {
pendingRequests: RetryRequest[]
}
type RetriableRequestConfig = InternalAxiosRequestConfig & { _retry?: boolean }
type RetriableRequestConfig = InternalAxiosRequestConfig & {
_retry?: boolean
silent?: boolean
}
const refreshStates: Record<AuthScope, RefreshState> = {
user: {
@@ -103,6 +113,10 @@ apiClient.interceptors.response.use(
async (error) => {
const originalRequest = error.config as RetriableRequestConfig | undefined
if (!originalRequest || error?.response?.status !== 401 || originalRequest._retry) {
if (originalRequest && !originalRequest.silent) {
const msg = error.response?.data?.message || error.message || '网络连接异常,请稍后重试'
ElMessage.error(msg)
}
return Promise.reject(error)
}
@@ -110,6 +124,9 @@ apiClient.interceptors.response.use(
const scope = getRequestScope(requestUrl)
if (isRefreshRequest(requestUrl)) {
redirectToLogin(scope)
if (originalRequest && !originalRequest.silent) {
ElMessage.error('登录已失效,请重新登录')
}
return Promise.reject(error)
}
@@ -134,6 +151,9 @@ apiClient.interceptors.response.use(
} catch (refreshError) {
rejectPendingRequests(scope, refreshError)
redirectToLogin(scope)
if (originalRequest && !originalRequest.silent) {
ElMessage.error('会话已过期,请重新登录')
}
return Promise.reject(refreshError)
} finally {
state.refreshing = false