| | |
| | | import qs from 'qs'; |
| | | import NProgress from '../progress'; |
| | | import { loadEnv } from '@build/index'; |
| | | import { getToken, getUserInfo } from '../storage'; |
| | | import { useUserStoreHook } from '@/store/modules/user'; |
| | | import { ElLoading as Loading, ElNotification } from 'element-plus'; |
| | | import { router } from '@/router'; |
| | |
| | | const RefreshTokenUrl = '/GetTokenByRefreshToken'; |
| | | |
| | | /** 请求白名单,放置一些不需要token的接口(通过设置请求白名单,防止token过期后再请求造成的死循环问题) */ |
| | | const whiteList = [RefreshTokenUrl, '/GetToken']; |
| | | const whiteList = [RefreshTokenUrl, '/passwordLogin']; |
| | | |
| | | let loadingInstance: ReturnType<typeof Loading.service>; |
| | | |
| | |
| | | success: boolean; |
| | | data: any; |
| | | /** |
| | | * http状态吗 |
| | | */ |
| | | code?: number; |
| | | /** |
| | | * 错误码 |
| | | */ |
| | | error?: number; |
| | | errorCode?: string; |
| | | /** |
| | | * 错误信息 |
| | | */ |
| | |
| | | } |
| | | |
| | | interface ErrorInfo { |
| | | errorCode?: number; |
| | | errorCode?: string; |
| | | errorMessage?: string; |
| | | showType?: ErrorShowType; |
| | | data: any; |
| | |
| | | |
| | | // 错误抛出 |
| | | errorThrower: (res) => { |
| | | const { success, data, error: errorCode, msg, showType } = res; |
| | | const { success, data, errorCode, msg, showType } = res; |
| | | if (!success) { |
| | | const error: any = new Error(msg); |
| | | error.name = 'BizError'; |
| | |
| | | NProgress.start(); |
| | | } |
| | | |
| | | const token = getToken(); |
| | | const userStore = useUserStoreHook(); |
| | | |
| | | const userInfo = getUserInfo(); |
| | | const userInfo = userStore.userInfo; |
| | | |
| | | const { showLoading = true, mock } = $config; |
| | | |
| | |
| | | } |
| | | |
| | | return new Promise((resolve) => { |
| | | if (token && $config.withCredentials) { |
| | | if (tokenIsExpired(userInfo)) { |
| | | if (!BoleRequest.refreshTokenPending) { |
| | | const userStore = useUserStoreHook(); |
| | | BoleRequest.refreshTokenPending = true; |
| | | // token过期刷新 |
| | | userStore |
| | | .refreshToken({ |
| | | refreshToken: userInfo.refreshToken, |
| | | clientId: userStore.accountInfo.client_id, |
| | | }) |
| | | .then((res) => { |
| | | $config.headers['Authorization'] = 'Bearer ' + res.accessToken; |
| | | BoleRequest.requests.forEach((cb) => cb(res.accessToken)); |
| | | BoleRequest.requests = []; |
| | | }) |
| | | .finally(() => { |
| | | BoleRequest.refreshTokenPending = false; |
| | | }); |
| | | } |
| | | resolve(BoleRequest.retryOriginalRequest($config)); |
| | | } else { |
| | | $config.headers['Authorization'] = 'Bearer ' + token; |
| | | resolve($config); |
| | | } |
| | | if (userInfo.accessToken && $config.withCredentials) { |
| | | $config.headers['Authorization'] = 'Bearer ' + userInfo.accessToken; |
| | | $config.headers['X-Authorizatio'] = 'Bearer ' + userInfo.refreshToken; |
| | | resolve($config); |
| | | } else { |
| | | resolve($config); |
| | | } |
| | |
| | | NProgress.done(); |
| | | } |
| | | |
| | | const userStore = useUserStoreHook(); |
| | | |
| | | if (response.headers['x-access-token']) { |
| | | userStore.setToken(response.headers['access-token']); |
| | | userStore.setUserInfo({ |
| | | accessToken: response.headers['access-token'], |
| | | refreshToken: response.headers['x-access-token'], |
| | | }); |
| | | } |
| | | |
| | | endLoading(); |
| | | |
| | | return getResponse ? response : (response.data as any).result; |
| | | return getResponse ? response : response.data.data; |
| | | }, |
| | | (error) => { |
| | | endLoading(); |