|
import axios from "axios";
|
import router from "../router";
|
import $store from "@/store/index.js";
|
import { ElMessageBox, ElMessage } from 'element-plus'
|
// 重置提交数据字符集 api
|
var baseUrl = process.env.NODE_ENV === "development" ? 'Api' : "https://ycm.51zhengcai.com";
|
console.log(baseUrl,'baseUrl');
|
const service = axios.create({
|
baseURL: baseUrl, // api 的 process.env.BASE_API
|
timeout: 60000, // request timeout 'application/json; charset=utf-8' 'application/x-www-form-urlencoded; charset=UTF-8'
|
headers: {
|
"Content-Type": "application/json; charset=utf-8",
|
|
}
|
//withCredentials: true //允许请求携带cookie信息
|
});
|
let invalidationMark = true;
|
//请求设置
|
export const RESPONSETYPE = {
|
ARRAYBUFFER: 'arraybuffer',
|
BLOB: 'blob',
|
DOCUMENT: 'document',
|
JSON: 'json',
|
STREAM: 'stream',
|
TEXT: 'text',
|
}
|
service.interceptors.request.use(
|
config => { // 可使用async await 做异步操作
|
// 初始化请求拦截器时,会执行此方法,此时data为undefined,赋予默认{}
|
// console.log("config:",config)
|
config.data = config.data || {}
|
const userToken = $store().token;
|
if (config?.custom?.needToken) {
|
// 获取用户token
|
if (!userToken) {
|
ElMessageBox.confirm('请先登录', "提示", {
|
confirmButtonText: '确定',
|
cancelButtonText: "取消",
|
type: 'warning',
|
callback: (action) => {
|
if (action == "confirm") {
|
router.push({ path: "/login" })
|
|
}
|
},
|
})
|
|
} else {
|
config.headers['Authorization'] = 'Bearer ' + userToken;
|
}
|
}
|
//额外需求
|
if (config.custom.methodName == 'user.share' || config.custom.methodName == "pages.getpageconfig" || config.custom.methodName == "goods.goodsList") {
|
// const userToken = db.get("userToken");
|
config.headers['Authorization'] = 'Bearer ' + userToken ? userToken : '';
|
}
|
|
return config
|
}, config => { // 可使用async await 做异步操作
|
return Promise.reject(config)
|
})
|
// 响应设置
|
service.interceptors.response.use(
|
response => {
|
const data = response.data
|
if (response.statusCode == 200) {
|
if (data.data === 14007 || data.data === 14006) {
|
|
}
|
|
}
|
return data === undefined ? {} : data
|
},
|
error => {
|
const responseType = error.config?.responseType;
|
const errorData = responseType === RESPONSETYPE.ARRAYBUFFER ? arrayBufferHandler(error.response.data) : error.response?.data;
|
const status = error.response?.status
|
switch(status) {
|
case 500:
|
case 501:
|
case 502:
|
case 503:
|
messageHandler('服务暂未启动,请稍等一会儿再试~~', 'error');
|
return Promise.reject(Error('服务暂未启动'));
|
case 401:
|
return permissionHandler();
|
default:
|
const msg = errorData?.msg || errorData?.errorMsg || '系统内部异常,请联系网站管理员';
|
messageHandler(msg, 'error');
|
return Promise.reject(errorData);
|
}
|
// return Promise.reject(error);
|
}
|
);
|
function messageHandler(msg, type) {
|
ElMessage({
|
message: msg,
|
type: type,
|
grouping: true,
|
duration: 3000
|
});
|
}
|
|
function permissionHandler() {
|
if (invalidationMark) {
|
invalidationMark = false;
|
ElMessageBox.alert(
|
'你已被登出,可以取消继续留在该页面,或者重新登录',
|
'确定登出',
|
{
|
confirmButtonText: '确定',
|
callback: () => {
|
router.push({ path: "/login" })
|
invalidationMark = true;
|
}
|
}
|
)
|
}
|
}
|
export default service;
|