import axios from 'axios'
import Vue from 'vue'
import router from '../route/index'
// axios.defaults.timeout = 5000;                        //响应时间
/**
 * @description 函数返回唯一的请求key **/
function getRequestKey(config) {
    let {
        method,
        url,
        params,
        responseType='blob',
        data
    } = config;
    // axios中取消请求及阻止重复请求的方法
    // 参数相同时阻止重复请求：
    return [method, url, JSON.stringify(params), JSON.stringify(data)].join("&");
    // 请求方法相同，参数不同时阻止重复请求
    // return [method, url].join("&");
}

/**
 * @description 添加请求信息 **/
let pendingRequest = new Map();

function addPendingRequest(config) {
    // console.log(config.url)
    let requestKey = getRequestKey(config);
    config.cancelToken = config.cancelToken || new axios.CancelToken((cancel) => {
        if (!pendingRequest.has(requestKey)) {
            pendingRequest.set(requestKey, cancel);
        }
    });
}

/**
 * @description 取消重复请求 **/
function removePendingRequest(config) {
    let requestKey = getRequestKey(config);
    if (pendingRequest.has(requestKey)) {
        // 如果是重复的请求，则执行对应的cancel函数
        let cancel = pendingRequest.get(requestKey);
        cancel(requestKey);
        // 将前一次重复的请求移除
        pendingRequest.delete(requestKey);
    }
}
axios.defaults.headers.get['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'
axios.interceptors.request.use(
  (config) => {
    // if (localStorage.getItem('token')) {
    //   config.headers['Authorization'] = localStorage.getItem('token')
    // }
      // // 检查是否存在重复请求，若存在则取消已发的请求
      // removePendingRequest(config);
      // // 把当前请求信息添加到pendingRequest对象中
      // addPendingRequest(config);
    return config
  },
  (err) => {
    window.console.log('请求超时')
    return Promise.resolve(err)
  }
)
// 统一的错误参数处理
axios.interceptors.response.use(
  (data) => {
    if(data.data.is_login==0){
      // Vue.prototype.$message.error("账号已被禁用")
      // localStorage.removeItem('token')
      window.location.reload()
    }
    return data
  },
  (error) => {
    window.console.log(error)
  }
)
export default axios
