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