zhengyiming
6 天以前 675e9d9e998412c0777427d36124e340463bb56f
src/utils/request/index.ts
@@ -3,7 +3,6 @@
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';
@@ -15,7 +14,7 @@
const RefreshTokenUrl = '/GetTokenByRefreshToken';
/** 请求白名单,放置一些不需要token的接口(通过设置请求白名单,防止token过期后再请求造成的死循环问题) */
const whiteList = [RefreshTokenUrl, '/GetToken'];
const whiteList = [RefreshTokenUrl, '/passwordLogin'];
let loadingInstance: ReturnType<typeof Loading.service>;
@@ -56,9 +55,13 @@
  success: boolean;
  data: any;
  /**
   * http状态吗
   */
  code?: number;
  /**
   * 错误码
   */
  error?: number;
  errorCode?: string;
  /**
   * 错误信息
   */
@@ -75,7 +78,7 @@
}
interface ErrorInfo {
  errorCode?: number;
  errorCode?: string;
  errorMessage?: string;
  showType?: ErrorShowType;
  data: any;
@@ -157,7 +160,7 @@
    // 错误抛出
    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';
@@ -176,9 +179,9 @@
          NProgress.start();
        }
        const token = getToken();
        const userStore = useUserStoreHook();
        const userInfo = getUserInfo();
        const userInfo = userStore.userInfo;
        const { showLoading = true, mock } = $config;
@@ -198,31 +201,10 @@
        }
        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);
          }
@@ -246,9 +228,19 @@
          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();