request.js 4.24 KB
import base from "@/config/baseUrl";
import store from "@/store";
import { judgeLogin } from "@/config/login";

// 初始化请求配置
uni.$u.http.setConfig((config) => {
  const token =
    store.state.userInfo.isToken ||
    uni.getStorageSync("userInfo").isToken ||
    undefined;
  // #ifdef H5
  window.sessionStorage.getItem("userInfo").isToken;
  // #endif
  /* config 为默认全局配置*/
  // const getConfiguration = uni.getStorageSync('getConfiguration').isConfiguration
  // console.log('getConfiguration', getConfiguration);
  // config.baseURL = getConfiguration == true ? base.baseDrawioUrl : base.baseUrl /* 根域名 */
  config.baseURL = base.baseUrl; /* 根域名 */
  config.header = {
    "Content-Type": "application/json",
    "X-Authorization": "Bearer " + token,
  };
  config.custom = {
    load: true, //是否显示加载动画
    isFactory: true, //true:返回的数据成功只返回data  false:返回response
    catch: true, //默认数据返回不成功进入catch返回
    auth: true, //token
  };
  return config;
});

// 请求拦截
uni.$u.http.interceptors.request.use(
  (config) => {
    if (store.state.userInfo.isThirdLogin) {
      uni.switchTab({
        url: "../pages/personal/personal",
      });
    }
    // 初始化请求拦截器时,会执行此方法,此时data为undefined,赋予默认{}
    config.data = config.data || {};
    // 根据custom参数中配置的是否需要token,添加对应的请求头
    const getConfiguration =
      uni.getStorageSync("getConfiguration").isConfiguration;
    if (config?.custom?.auth) {
      config.header["X-Authorization"] =
        "Bearer " + store.state.userInfo.isToken ||
        uni.getStorageSync("userInfo").isToken ||
        undefined;
      config.baseURL =
        getConfiguration == true ? base.baseDrawioUrl : base.baseUrl;
    }
    if (config?.custom?.load) {
      //打开加载动画
      store.commit("setLoadingShow", true);
    }
    if (getConfiguration) {
      uni.setStorageSync("config", config);
    } else {
      uni.removeStorageSync("config");
    }
    return config;
  },
  (config) => {
    return Promise.reject(config);
  }
);

// 响应拦截
uni.$u.http.interceptors.response.use(
  (response) => {
    // 关闭加载动画
    store.commit("setLoadingShow", false);
    const data = response.data;
    const custom = response.config?.custom;
    // code:  200、请求成功 其他,没有更多参数 401、被迫下线重新登录、
    if (response.statusCode == 200) {
      return Promise.resolve(data);
    } else if (response.statusCode == 401) {
      // 清空登录信息
      store.commit("emptyUserInfo");
      // 20秒节流,弹窗登录
      uni.$u.throttle(judgeLogin(), 20000);
      return new Promise(() => {});
    } else {
    }
  },
  (response) => {
    // 关闭加载动画
    store.commit("setLoadingShow", false);
    let show = true;
    let errorData = "请检查网络或服务器";
    let message =
      response.data?.message || response.data?.msg || response?.errMsg;
    if (message == "request:fail url not in domain list") {
      errorData = "检查请求域名是否添加了域名白名单";
    } else if (message == "request:fail timeout") {
      errorData = "请求超时:请检查网络";
    } else if (response.data.status == 401) {
      const isLoginFlag = uni.getStorageSync("userInfo");
      if (!store.state.userInfo.isThirdLogin) {
        const routers = getCurrentPages();
        const currentRoute = routers[routers.length - 1].route;
        const isLoginPage = currentRoute.includes(
          "publicLoginSubPage/public/login"
        );
        !isLoginPage &&
          uni.reLaunch({
            url: "/publicLoginSubPage/public/login",
          });
        // 清空登录信息
        store.commit("emptyUserInfo");
        show = false;
      } else {
        uni.switchTab({
          url: "../pages/personal/personal",
        });
        show = false;
      }
    } else if (message == "request:ok") {
      show = false;
      errorData = "";
    } else {
      errorData = message || "";
    }
    if (show) uni.$u.toast(errorData);
    return Promise.reject(response);
  }
);