axios二次封装

查看代码

import axiox from 'axios'
import store from "@/store";
import utils from "@/utils";
import Qs from 'qs'
import {
  Message
} from "element-ui";



const axiosConfig = {
  headers: {
    'Content-Type': 'application/json;charset=UTF-8',
  },

  timeout: 10000,

  // responseType: 'json',
  maxContentLength: 2000,
}

const request = axiox.create(axiosConfig)

let isRefreshing = false
let queue = []

let runQueue = () => {
  isRefreshing = true
  let first = queue.shift()
  first.request()
}


request.interceptors.request.use((config) => {
  const token = utils.storage.get("token");
  if (config.headerType) {
    config.headers['Content-Type'] = config.headerType
  }
  if (config.url.indexOf("api/scrm-system/v1/auth/one_click_login")>-1) {
    //一键登录
    utils.cookie.setCookie("zh-auth", JSON.parse(localStorage.getItem("onelogin")));
    config.headers["zh-auth"] = `${localStorage.getItem("onelogin")}`;
  } else {
    if (token && !config.clearToken) {
      config.headers["zh-auth"] = `${token}`;
      config.headers["trace-id"] = utils.storage.get("traceId");
    }
  
  }

  //自定义表头
  if (config.customHeader) {
    config.headers = {
      ...config.headers,
      ...config.headerObj
    }
  }
  return config;
}, function (error) {
  return Promise.reject(error);
});


request.interceptors.response.use(function (response) {
  if ((response.config ?.url || "").indexOf("api/scrm-system/v1/auth/create_status") > -1||(response.config ?.url || "").indexOf("api/scrm-system/v1/auth/wx_scancode_Login") > -1||(response.config ?.url || "").indexOf("api/scrm-system/v1/auth/one_click_login") > -1) {
    utils.storage.set("token", response.headers["zh-auth"]);
    utils.storage.set("traceId", response.headers["trace-id"]);
    utils.cookie.setCookie("zh-auth", response.headers["zh-auth"]);
  }
  store.dispatch("SetLoding", false);
  isRefreshing = false
  if (!(queue.length === 0)) runQueue()
  if (response.status == 200 && (response.config ?.url || "").indexOf("api/scrm-system/v1/auth/delete_status") > -1 || response.status == "200" && (response.config ?.url || "").indexOf("api/scrm-system/v1/auth/delete_status") > -1||response.status == 401||response.status == "401") {
    utils.cookie.delCookie("tokzh-authen");
    utils.storage.remove("token");
    utils.storage.remove("traceId");
    utils.storage.remove("userInfo");
    Message({
      type: "success",
      message: "已退出登录!",
    });

    window.setTimeout(() => {
        // 手动更新, 刷新权限
    location.reload();
    }, 1000);
  
  }
  if (response.data) {
    console.log(response, "response.data");
    let result = null;
    if (response.data.code == 100000 || response.data.code == "100000" || response.data.errno == "0") {
      result = {
        ...response.data
      }
    } else {
      Message.error(response.data.msg || response.data.errmsg || "接口报错");
    }

    return result
  }
}, function (error) {
  store.dispatch("SetLoding", false);
  isRefreshing = false
  if (!(queue.length === 0)) runQueue()
  return Promise.reject(error);
});

const httpPost = async ({
  url,
  method = 'POST',
  data = {},
  params = {},
  clearToken = false,
  customHeader = false,
  headerObj = {},
  onUploadProgress = () => {},
  headerType = "",
}) => {
  return new Promise((resolve, reject) => {
    if (!data.noLoading) store.dispatch("SetLoding", true);
    console.log(data, "data");
    let _fun=null;
    if (method=="GET"||method=="DELETE") {
      _fun=(params)=>{
        return Qs.stringify(params, { arrayFormat: 'repeat' })
      }
    }
    queue.push({
      request: () => {
        request({
          method,
          url,
          data,
          params,
          clearToken,
          customHeader,
          headerObj,
          onUploadProgress,
          headerType,
          paramsSerializer:_fun
        }).then(res => {
          resolve(res)
        }).catch(e => {
          reject(e)
        })
      }
    })
    if (!isRefreshing) runQueue()
  })
}


export {
  httpPost
}
posted @ 2022-04-18 18:58  春春&  阅读(38)  评论(0编辑  收藏  举报