import axios from "axios";
import {
serialize
} from "@/util/util";
import NProgress from "nprogress"; // progress bar
import errorCode from "@/const/errorCode";
import {
Message,
MessageBox
} from "element-ui";
import "nprogress/nprogress.css";
import qs from "qs";
import store from "@/store"; // progress bar style
const service = axios.create({
headers: {
'Content-Type': 'application/json;charset=utf-8',
// 'Access-Control-Allow-Origin': '*',
// 'Access-Control-Allow-Credentials':true,
// 'Access-Control-Expose-Headers': 'content-disposition'
},
baseURL: process.env.NODE_ENV == "development" ? '/ywht' : process.env.VUE_APP_BASE_API,
// withCredentials: true,
timeout: 30 * 1000 // 请求超时时间
})
// 返回其他状态吗
service.defaults.validateStatus = function (status) {
return status >= 200 && status <= 500; // 默认的
};
// 跨域请求,允许保存cookie
// axios.defaults.withCredentials = true;
// NProgress Configuration
NProgress.configure({
showSpinner: false
});
// HTTPrequest拦截
service.interceptors.request.use((config) => {
NProgress.start(); // start progress bar
const isToken = (config.headers || {}).isToken === false;
let token = store.getters.access_token;
if (token && !isToken) {
config.headers["Authorization"] = "Bearer " + token; // token
}
// headers中配置serialize为true开启序列化
if (config.methods === "post" && config.headers.serialize) {
config.data = serialize(config.data);
delete config.data.serialize;
}
// 处理get 请求的数组 springmvc 可以处理
if (config.method === "get") {
config.paramsSerializer = function (params) {
return qs.stringify(params, {
arrayFormat: "repeat"
});
};
}
return config;
},
error => {
return Promise.reject(error);
}
);
// HTTPresponse拦截
service.interceptors.response.use(
res => {
NProgress.done();
const status = Number(res.status) || 200;
const message = res.data.msg || errorCode[status] || errorCode["default"];
// 后台定义 424 针对令牌过去的特殊响应码
// if (status === 424) {
// MessageBox.confirm("令牌状态已过期,请点击重新登录", "系统提示", {
// confirmButtonText: "重新登录",
// cancelButtonText: "取消",
// type: "warning"
// })
// .then(() => {
// store.dispatch("LogOut").then(() => {
// // 刷新登录页面,避免多次弹框
// window.location.reload();
// });
// })
// .catch(() => {});
// return;
// }
if (status !== 200 || res.data.code === 1) {
Message({
message: message,
type: "error"
});
// return Promise.reject(new Error(message));
} else if (res.data.code === 3) {
Message({
message: message,
type: "warning"
});
// return Promise.reject(new Error(message));
}
return res;
},
error => {
NProgress.done();
Message({
message: "连接超时,请检查网络!",
type: "warning"
});
// return Promise.reject(new Error(error));
}
);
export default service;