You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

162 lines
4.1 KiB
JavaScript

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import axios from "axios";
import {
Message,
MessageBox
} from "element-ui";
// import { getToken, removeToken, setToken } from "@/utils/token";
import {
getCookie,
delCookie
} from "./utils.js";
import router from "../router/index.js";
import {
name
} from "../../config/dev.env.js";
let base = "/api";
let baseURL = base;
// 根据环境变量对host进行判断
// axios.defaults.baseURL = process.env.baseURL
// axios.defaults.baseURL = '/api'
axios.defaults.headers.post["Content-Type"] = "application/json;charset=UTF-8";
// const rLoading = this.openLoading();
// 创建axios实例
const service = axios.create({
// baseURL: baseURL,
timeout: 15000 // 请求超时时间
});
// request拦截器
service.interceptors.request.use(
config => {
// 在此处设置请求头参数
const token = localStorage.getItem("token");
if (token != null) {
config.headers.token = token;
}
return config;
},
error => {
return Promise.reject(error);
}
);
var flag = false;
// axios response 拦截器
service.interceptors.response.use(
response => {
// loadingObj.close();
switch (response.data.code) {
case "502001":
if (flag) {
break;
} else {
flag = true;
MessageBox.confirm(response.data.message + "!重新登录?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
cancelButtonClass: "cancelbtnFalses",
confirmButtonClass: "confirmbtnFalses",
type: "warning"
}).then(() => {
router.push("/login");
delCookie("token");
});
setTimeout(() => {
flag = false;
}, 15000);
console.log(flag);
}
break;
case "510002":
if (flag) {
break;
} else {
flag = true;
MessageBox.confirm("登录已过期 , 是否重新登录?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
cancelButtonClass: "cancelbtnFalses",
confirmButtonClass: "confirmbtnFalses",
type: "warning"
}).then(() => {
router.push("/login");
delCookie("token");
});
//解决当token过期时同一个页面有多个请求造成 “是否重新登录”弹框多次弹出 的BUG
setTimeout(() => {
flag = false;
}, 15000);
break;
}
default:
break;
}
// 返回请求成功结果status=200
return response.data;
},
err => {
// 判断请求失败
// 请求失败时即status!=200
if (err && err.response) {
switch (err.response.status) {
case 400:
err.message = "错误格式请求";
break;
case 401:
err.message = "未授权,请重新登录";
break;
case 403:
err.message = "禁止访问";
break;
case 404:
err.message = "请求错误,未找到该请求方法";
break;
case 405:
err.message = "请求方法未允许";
break;
case 408:
err.message = "请求超时";
break;
case 413:
err.message = "上传文件过大";
break;
case 500:
err.message = "服务器端出错";
break;
case 501:
err.message = "网络未实现";
break;
case 502:
err.message = "网络错误";
break;
case 503:
err.message = "服务不可用";
break;
case 504:
err.message = "网络超时";
break;
case 505:
err.message = "http版本不支持该请求";
break;
default:
err.message = `连接错误,${err.res.message}`;
}
} else {
err.message = "连接不上服务器";
}
Message({
type: "warning",
message: err.message,
showClose: true,
duration: 1500
});
return Promise.reject(err);
}
);
// export default service;
export {
service
};