import axios from 'axios'
|
// import Vue from 'vue'
|
// npm install qs
|
|
axios.defaults.timeout = 50000;
|
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8';
|
//axios.defaults.headers.post['Content-Type'] = 'application/json;charset=UTF-8';
|
|
//'application/json;charset=utf-8';//
|
if (process.env.NODE_ENV == 'development') {//开发环境
|
axios.defaults.baseURL = 'http://localhost:8099/';//8089 //192.168.12.110
|
}
|
else if (process.env.NODE_ENV == 'debug') {
|
// axios.defaults.baseURL = 'http://127.0.0.1:8990/';//调试环境
|
}
|
else if (process.env.NODE_ENV == 'production') {
|
axios.defaults.baseURL = 'http://localhost:8099/';//生产环境
|
}
|
let ipAddress = axios.defaults.baseURL;
|
axios.interceptors.request.use((config) => {
|
//axios.defaults.headers[_Authorization] = $httpVue.$store.getters.getToken();
|
|
//console.log(axios.defaults.headers[_Authorization])
|
_showLoading && loading.show(_showLoading);
|
if (config.method === 'post') {
|
//config.data =qs.stringify(config.data);
|
// console.log('post拦截:' + config.data);
|
}
|
return config;
|
}, (error) => {
|
_showLoading && loading.close();
|
return Promise.reject(error);
|
});
|
|
//返回状态判断(添加响应拦截器)
|
axios.interceptors.response.use((res) => {
|
_showLoading && loading.close();
|
//对响应数据做些事
|
if (res.data.success) {
|
return res;
|
}
|
return Promise.resolve(res);
|
}, (error) => {
|
_showLoading && loading.close();
|
let httpMessage = '';
|
if (error.response) {
|
if (error.response.data && error.response.data.message) {
|
httpMessage = error.response.data.message;
|
} else if (error.response.status == '404') {
|
httpMessage = "没有找到请求的地址";
|
}
|
}
|
else {
|
httpMessage = '网络好像出了点问题~'
|
}
|
|
redirect(error.response || {}, httpMessage);
|
return Promise.reject(error.response);
|
});
|
|
let $httpVue = null, currentToken = '';
|
const _Authorization = 'Authorization', _Bearer = 'Bearer ';
|
function init(vue) {
|
$httpVue = vue;
|
}
|
let $loading;
|
let loading = {
|
show(obj) { //可选值为true,string="当前提示的文本"
|
let text = '正在处理中.....';
|
if (typeof obj == 'string') {
|
text = obj;
|
}
|
$loading && $loading.close();
|
$loading = $httpVue.$loading({
|
lock: true,
|
target: '#loading-container',
|
customClass: "el-loading",
|
text: text,
|
spinner: 'el-icon-loading',
|
background: 'rgba(58, 61, 63, 0.32)'
|
});
|
},
|
close() {
|
$loading.close();
|
}
|
}
|
function getToken() {
|
if (currentToken) {
|
return _Bearer + currentToken;
|
}
|
return $httpVue.$store.getters.getToken();
|
}
|
let _showLoading;
|
//_showLoading=true异步请求时会显示遮罩层,_showLoading=字符串,异步请求时遮罩层显示当前字符串
|
function post(url, params, showLoading) {
|
_showLoading = showLoading;
|
axios.defaults.headers[_Authorization] = getToken();
|
return new Promise((resolve, reject) => {
|
// axios.post(url, qs.stringify(params)) //
|
axios.post(url, params)
|
.then(response => {
|
if (response.status == 202) {
|
getNewToken(() => { post(url, params, _showLoading); });
|
return;
|
}
|
resolve(response.data);
|
}, err => {
|
|
if (err.status == 202) {
|
getNewToken(() => { post(url, params, _showLoading); });
|
return;
|
}
|
reject(err.data && err.data.message ? err.data.message : '网络好像出了点问题~~');
|
})
|
.catch((error) => {
|
reject(error)
|
})
|
})
|
}
|
|
//_showLoading=true异步请求时会显示遮罩层,_showLoading=字符串,异步请求时遮罩层显示当前字符串
|
function get(url, param, showLoading) {
|
_showLoading = showLoading;
|
axios.defaults.headers[_Authorization] = getToken();
|
return new Promise((resolve, reject) => {
|
axios.get(url, { params: param })
|
.then(response => {
|
if (response.status == 202) {
|
getNewToken(() => { get(url, param, _showLoading); });
|
return;
|
}
|
resolve(response.data)
|
}, err => {
|
if (err.status == 202) {
|
getNewToken(() => { get(url, param, _showLoading); });
|
return;
|
}
|
redirect(response.data);
|
reject(err)
|
})
|
.catch((error) => {
|
reject(error)
|
})
|
})
|
}
|
|
|
|
|
function createXHR() {
|
if (XMLHttpRequest) {
|
return new XMLHttpRequest();
|
}
|
if (ActiveXObject) {
|
if (typeof arguments.callee.activeXString != "string") {
|
var versions = [
|
"MSXML2.XMLHttp.6.0",
|
"MSXML2.XMLHttp",
|
"MSXML2.XMLHttp.3.0"
|
];
|
for (var i = 0; i < versions.length; i++) {
|
try {
|
new ActiveXObject(versions[i]);
|
arguments.callee.activeXString = versions[i];
|
break;
|
} catch (e) {
|
console.log("no");
|
}
|
}
|
}
|
return new ActiveXObject(arguments.callee.activeXString);
|
}
|
}
|
|
function redirect(responseText, message) {
|
try {
|
let responseData = typeof responseText == 'string' ? JSON.parse(responseText) : responseText;
|
// $httpVue.$message.error(responseData.message || '~服务器好像出了点问题...')
|
if ((responseData.hasOwnProperty('code') && responseData.code == 401)
|
|| (responseData.data && responseData.data.code == 401)) {
|
toLogin();
|
} else {
|
$httpVue.$message.error(message);
|
}
|
} catch (error) {
|
console.log(error);
|
$httpVue.$message.error(responseText)
|
}
|
}
|
function toLogin() {
|
currentToken = "";
|
$httpVue.$router.push({ path: '/login', params: { r: Math.random() } });
|
}
|
//当前token快要过期时,用现有的token换成一个新的token
|
function getNewToken(callBack) {
|
ajax({
|
url: "/api/User/replaceToken",
|
param: {},
|
json: true,
|
success: function (x) {
|
if (x.status) {
|
let userInfo = $httpVue.$store.getters.getUserInfo();
|
userInfo.token = x.data;
|
currentToken = x.data;
|
$httpVue.$store.commit('setUserInfo', userInfo);
|
callBack();
|
} else {
|
console.log(x.message);
|
toLogin();
|
}
|
},
|
errror: function (ex) {
|
console.log(ex);
|
toLogin();
|
},
|
type: "post",
|
async: false
|
});
|
|
|
}
|
|
function ajax(param) {
|
let httpParam =
|
Object.assign({
|
url: '', headers: {},
|
param: {}, json: true,
|
success: function () { },
|
errror: function () { },
|
type: 'post', async: true
|
}, param);
|
|
httpParam.url = axios.defaults.baseURL + httpParam.url.replace(/\/?/, '');
|
httpParam.headers[_Authorization] = getToken();
|
var xhr = createXHR();
|
// console.log(xhr.readyState);
|
xhr.onreadystatechange = function () {
|
if (xhr.status == 403 || xhr.status == 401) {
|
redirect(xhr.responseText);
|
return;
|
}
|
if (xhr.status == 202) {
|
getNewToken(() => {
|
ajax(param);
|
});
|
return;
|
}
|
if (xhr.readyState == 4 && xhr.status == 200) {
|
httpParam.success(httpParam.json ? JSON.parse(xhr.responseText) : xhr.responseText);
|
return;
|
}
|
if (xhr.status != 0 && xhr.readyState != 1) {
|
httpParam.errror(xhr);
|
}
|
};
|
//初始化请求
|
xhr.open(
|
httpParam.type,
|
httpParam.url,
|
httpParam.async
|
);
|
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
|
for (const key in httpParam.headers) {
|
xhr.setRequestHeader(key, httpParam.headers[key]);
|
}
|
let dataStr = '';
|
for (const key in httpParam.param) {
|
dataStr += key + "=" + httpParam.param[key];
|
}
|
try {
|
xhr.send(dataStr);
|
} catch (error) {
|
toLogin();
|
// console.log(error)
|
}
|
}
|
|
ajax.post = function (url, param, success, errror) {
|
ajax({ url: url, param: param, success: success, error: errror, type: 'post' })
|
}
|
ajax.get = function (url, param, success, errror) {
|
ajax({ url: url, param: param, success: success, error: errror, type: 'post' })
|
}
|
export default { post, get, ajax, init, ipAddress }
|