import qs from 'qs';
import axios from 'axios';
import { getLocalKey, removeLocalKey, encryptionKey } from '@/lib/storageUtil';// utlis 常用公共方法封装 
import store from '@/store/index' // 用到了vuex 公共数据存储

axios.defaults.timeout = 5000; //请求超时5秒
axios.defaults.baseURL = ''; //请求base url
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; //设置post请求是的header信息

//http request 拦截器
axios.interceptors.request.use(
  config => {
    return config
  },
  err => {
    return Promise.reject(err)
  }
);

axios.interceptors.response.use(
  response => {
    if (response.data.code === 4003) {
      alert('您没有权限操作!')
      return false;
    }
    if (response.data.code === -1000) {
      removeLocalKey('userInfos')
      alert('登录已过期,请重新登录!')
      window.location.href = 'home'
    }
    return response
  },
  err => {
    if (err.code === 'ECONNABORTED' && err.message.indexOf('timeout') !== -1) {
      console.log(err)
      alert('网络异常,连接超时...');
    }
    return Promise.reject(err)
  }
);

/**
* 封装get方法
* @param url
* @param data
* @returns {Promise}
*/

export function get (url, params = {}, callback, headers = {}) {
  if (typeof callback !== 'function') {
    alert('当前callback 类型不正确' + url)
  }
  const historyList = store.state.storageHistory;
  const apiName = encryptionKey(url + JSON.stringify(params));
  const index = historyList.map(item => item.id).indexOf(apiName);
  if (index > -1) {
    const res = historyList[index];
    return callback(res)
  }
  return new Promise((resolve, reject) => {
    axios.get(url, {
      params: params,
      headers: headers
    })
      .then(response => {
        callback(response.data)
        let resData = response.data;
        if (isCurApi) {
          resData = JSON.parse(response.data)
        }
        resData.id = apiName;
        store.dispatch('setChangeStorageHistory', resData)
        resolve(response.data);
      })
      .catch(err => {
        reject(err)
      })
  })
};

/**
* 封装post请求
* @param url
* @param data
* @returns {Promise}
*/

export function post (url, data = {}, callback) {
  const historyList = store.state.storageHistory;
  if (typeof callback !== 'function') {
    alert('当前callback 类型不正确' + url)
  }

  return new Promise((resolve, reject) => {
    let datas = data;
    if (Object.prototype.toString.call(datas) == '[object FormData]') {
      datas = data;
    } else {
      datas = qs.stringify(data)
    }

    axios.post(url, datas)
      .then(response => {
        callback(response.data);
        resolve(response.data);
      }, err => {
        reject(err)
      })
  })
}

tiryLi