Commit 02315804ac945feefe4073692a067e0293d4cbbc
1 parent
93a97cd5
fix: axios bug
Showing
1 changed file
with
25 additions
and
26 deletions
yudao-ui-admin-vue3/src/config/axios/index.ts
| 1 | import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse, AxiosError } from 'axios' | 1 | import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse, AxiosError } from 'axios' |
| 2 | -import { ElMessage, ElMessageBox, ElNotification } from 'element-plus' | 2 | +import { ElMessage, ElNotification } from 'element-plus' |
| 3 | import qs from 'qs' | 3 | import qs from 'qs' |
| 4 | import { config } from '@/config/axios/config' | 4 | import { config } from '@/config/axios/config' |
| 5 | -import { getAccessToken, getRefreshToken, getTenantId } from '@/utils/auth' | 5 | +import { getAccessToken, getTenantId, removeToken } from '@/utils/auth' |
| 6 | import errorCode from './errorCode' | 6 | import errorCode from './errorCode' |
| 7 | import { useI18n } from '@/hooks/web/useI18n' | 7 | import { useI18n } from '@/hooks/web/useI18n' |
| 8 | 8 | ||
| @@ -22,7 +22,7 @@ export const isRelogin = { show: false } | @@ -22,7 +22,7 @@ export const isRelogin = { show: false } | ||
| 22 | // 请求队列 | 22 | // 请求队列 |
| 23 | // const requestList = [] | 23 | // const requestList = [] |
| 24 | // 是否正在刷新中 | 24 | // 是否正在刷新中 |
| 25 | -let isRefreshToken = false | 25 | +// const isRefreshToken = false |
| 26 | 26 | ||
| 27 | export const PATH_URL = base_url[import.meta.env.VITE_API_BASEPATH] | 27 | export const PATH_URL = base_url[import.meta.env.VITE_API_BASEPATH] |
| 28 | 28 | ||
| @@ -61,8 +61,7 @@ service.interceptors.request.use( | @@ -61,8 +61,7 @@ service.interceptors.request.use( | ||
| 61 | // const now = new Date().getTime() | 61 | // const now = new Date().getTime() |
| 62 | // params = params.substring(0, url.length - 1) + `?_t=${now}` | 62 | // params = params.substring(0, url.length - 1) + `?_t=${now}` |
| 63 | url += '?' | 63 | url += '?' |
| 64 | - const keys = Object.keys(params) | ||
| 65 | - for (const key of keys) { | 64 | + for (const key of Object.keys(params)) { |
| 66 | if (params[key] !== void 0 && params[key] !== null) { | 65 | if (params[key] !== void 0 && params[key] !== null) { |
| 67 | url += `${key}=${encodeURIComponent(params[key])}&` | 66 | url += `${key}=${encodeURIComponent(params[key])}&` |
| 68 | } | 67 | } |
| @@ -82,6 +81,7 @@ service.interceptors.request.use( | @@ -82,6 +81,7 @@ service.interceptors.request.use( | ||
| 82 | // response 拦截器 | 81 | // response 拦截器 |
| 83 | service.interceptors.response.use( | 82 | service.interceptors.response.use( |
| 84 | async (response: AxiosResponse<Recordable>) => { | 83 | async (response: AxiosResponse<Recordable>) => { |
| 84 | + console.info(response) | ||
| 85 | const { data } = response | 85 | const { data } = response |
| 86 | if (!data) { | 86 | if (!data) { |
| 87 | // 返回“[HTTP]请求没有返回值”; | 87 | // 返回“[HTTP]请求没有返回值”; |
| @@ -90,6 +90,13 @@ service.interceptors.response.use( | @@ -90,6 +90,13 @@ service.interceptors.response.use( | ||
| 90 | const { t } = useI18n() | 90 | const { t } = useI18n() |
| 91 | // 未设置状态码则默认成功状态 | 91 | // 未设置状态码则默认成功状态 |
| 92 | const code = data.code || result_code | 92 | const code = data.code || result_code |
| 93 | + // 二进制数据则直接返回 | ||
| 94 | + if ( | ||
| 95 | + response.request.responseType === 'blob' || | ||
| 96 | + response.request.responseType === 'arraybuffer' | ||
| 97 | + ) { | ||
| 98 | + return response.data | ||
| 99 | + } | ||
| 93 | // 获取错误信息 | 100 | // 获取错误信息 |
| 94 | const msg = data.msg || errorCode[code] || errorCode['default'] | 101 | const msg = data.msg || errorCode[code] || errorCode['default'] |
| 95 | if (ignoreMsgs.indexOf(msg) !== -1) { | 102 | if (ignoreMsgs.indexOf(msg) !== -1) { |
| @@ -97,15 +104,16 @@ service.interceptors.response.use( | @@ -97,15 +104,16 @@ service.interceptors.response.use( | ||
| 97 | return Promise.reject(msg) | 104 | return Promise.reject(msg) |
| 98 | } else if (code === 401) { | 105 | } else if (code === 401) { |
| 99 | // 如果未认证,并且未进行刷新令牌,说明可能是访问令牌过期了 | 106 | // 如果未认证,并且未进行刷新令牌,说明可能是访问令牌过期了 |
| 100 | - if (!isRefreshToken) { | ||
| 101 | - isRefreshToken = true | ||
| 102 | - // 1. 如果获取不到刷新令牌,则只能执行登出操作 | ||
| 103 | - if (!getRefreshToken()) { | ||
| 104 | - return handleAuthorized() | ||
| 105 | - } | ||
| 106 | - // 2. 进行刷新访问令牌 | ||
| 107 | - // TODO: 引入refreshToken会循环依赖报错 | ||
| 108 | - } | 107 | + return handleAuthorized() |
| 108 | + // if (!isRefreshToken) { | ||
| 109 | + // isRefreshToken = true | ||
| 110 | + // // 1. 如果获取不到刷新令牌,则只能执行登出操作 | ||
| 111 | + // if (!getRefreshToken()) { | ||
| 112 | + // return handleAuthorized() | ||
| 113 | + // } | ||
| 114 | + // // 2. 进行刷新访问令牌 | ||
| 115 | + // // TODO: 引入refreshToken会循环依赖报错 | ||
| 116 | + // } | ||
| 109 | } else if (code === 500) { | 117 | } else if (code === 500) { |
| 110 | ElMessage.error(t('sys.api.errMsg500')) | 118 | ElMessage.error(t('sys.api.errMsg500')) |
| 111 | return Promise.reject(new Error(msg)) | 119 | return Promise.reject(new Error(msg)) |
| @@ -149,21 +157,12 @@ service.interceptors.response.use( | @@ -149,21 +157,12 @@ service.interceptors.response.use( | ||
| 149 | return Promise.reject(error) | 157 | return Promise.reject(error) |
| 150 | } | 158 | } |
| 151 | ) | 159 | ) |
| 152 | -function handleAuthorized() { | 160 | +const handleAuthorized = () => { |
| 153 | const { t } = useI18n() | 161 | const { t } = useI18n() |
| 154 | if (!isRelogin.show) { | 162 | if (!isRelogin.show) { |
| 163 | + removeToken() | ||
| 155 | isRelogin.show = true | 164 | isRelogin.show = true |
| 156 | - ElMessageBox.confirm(t('sys.api.timeoutMessage'), t('common.confirmTitle'), { | ||
| 157 | - confirmButtonText: t('login.relogin'), | ||
| 158 | - cancelButtonText: t('common.cancel'), | ||
| 159 | - type: 'warning' | ||
| 160 | - }) | ||
| 161 | - .then(() => { | ||
| 162 | - isRelogin.show = false | ||
| 163 | - }) | ||
| 164 | - .catch(() => { | ||
| 165 | - isRelogin.show = false | ||
| 166 | - }) | 165 | + ElNotification.error(t('sys.api.timeoutMessage')) |
| 167 | } | 166 | } |
| 168 | return Promise.reject(t('sys.api.timeoutMessage')) | 167 | return Promise.reject(t('sys.api.timeoutMessage')) |
| 169 | } | 168 | } |