import axios from 'axios';
|
import {Message, MessageBox} from 'element-ui';
|
import store from '@/store';
|
import {setToken} from '@/utils/auth';
|
import errorCode from '@/utils/errorCode'
|
// import SettingIplatform from '@/utils/settingIplatform';
|
import SettingIplatform from '../../public/static/config';
|
import {isPhone} from '@/libs/wechat';
|
|
// 是否显示重新登录
|
export let isRelogin = {show: false};
|
|
axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
|
|
const service = axios.create({
|
baseURL: SettingIplatform.apiBaseURL,
|
timeout: 60000, // 过期时间
|
});
|
|
// request interceptor
|
service.interceptors.request.use(
|
(config) => {
|
// 发送请求之前做的
|
const token = !store.getters.token ? sessionStorage.getItem('token') : store.getters.token;
|
if (token) {
|
config.headers['Authorization'] = token;
|
}
|
if (/get/i.test(config.method)) {
|
config.params = config.params || {};
|
config.params.temp = Date.parse(new Date()) / 1000;
|
}
|
return config;
|
},
|
(error) => {
|
return Promise.reject(error);
|
},
|
);
|
|
// response interceptor
|
service.interceptors.response.use(res => {
|
if (SettingIplatform.debug) {
|
console.log('%c请求接口:', 'color: #529b2e', res.config.url)
|
if (res.config.method.toLowerCase() === 'get') {
|
console.log('%c请求参数:', 'color: #529b2e', res.config.params)
|
} else {
|
try{
|
console.log('%c请求参数:', 'color: #529b2e', JSON.parse(res.config.data))
|
} catch (e) {
|
|
}
|
|
}
|
console.log('%c返回结果:', 'color: #529b2e', res.data)
|
}
|
// 未设置状态码则默认成功状态
|
// const code = res.data.code || 200;
|
// 2022-11-08 这里使用自己业务定义的成功状态码:1
|
// const res = response.data;
|
let showErrMsg = res.config.showErrMsg;
|
if (showErrMsg == undefined) {
|
showErrMsg = true
|
}
|
const code = res.data.code;
|
if (res.headers.hasOwnProperty("tokenrefresh")) {
|
setToken(res.headers.tokenrefresh);
|
store.commit('user/SET_TOKEN', res.headers.tokenrefresh);
|
}
|
// 获取错误信息
|
const msg = errorCode[code] || res.data.msg || errorCode['default']
|
// 二进制数据则直接返回
|
if (res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') {
|
return res.data
|
}
|
if (code === 10) {
|
// console.log("+++++++++++ token过期");
|
if (!isRelogin.show) {
|
isRelogin.show = true;
|
MessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', {
|
confirmButtonText: '重新登录',
|
cancelButtonText: '取消',
|
type: 'warning'
|
}
|
).then(() => {
|
isRelogin.show = false;
|
store.dispatch('user/logout').then(() => {
|
// 2023-06-07,重定向到看板页面,原来'/index'一直报404
|
// location.href = '/dashboard';
|
window.location.reload()
|
})
|
|
}).catch(() => {
|
isRelogin.show = false;
|
});
|
}
|
return Promise.reject('无效的会话,或者会话已过期,请重新登录。')
|
} else if (code === 500 && showErrMsg) {
|
Message({
|
message: msg,
|
type: 'error'
|
})
|
return Promise.reject(new Error(msg))
|
} else if (code !== 1) {
|
// 如果不是超级管理员
|
if (!(store.getters.info && store.getters.info.realName === '超级管理用户') && showErrMsg) {
|
Message({
|
message: msg,
|
type: 'error',
|
duration: 5 * 1000
|
});
|
}
|
if (isPhone()) {
|
//移动端
|
return Promise.reject(res || 'Error');
|
}
|
return Promise.reject(res.data)
|
} else {
|
// 2023-05-16,统一拦截去除实际业务数据。
|
return res.data.data;
|
}
|
// if (res.code === 401) {
|
// // to re-login
|
// Message.error('无效的会话,或者登录已过期,请重新登录。');
|
// if (window.location.pathname !== '/login') location.href = '/login';
|
// } else if (res.code === 403) {
|
// Message.error('没有权限访问。');
|
// }
|
// if (res.code !== 200 && res.code !== 401) {
|
// if (isPhone()) {
|
// //移动端
|
// return Promise.reject(res || 'Error');
|
// }
|
// Message({
|
// message: res.message || 'Error',
|
// type: 'error',
|
// duration: 5 * 1000,
|
// });
|
// return Promise.reject();
|
// } else {
|
// return res.data;
|
// }
|
},
|
error => {
|
console.log('err' + error)
|
let {message} = error;
|
if (message == "Network Error") {
|
message = "后端接口连接异常";
|
} else if (message.includes("timeout")) {
|
message = "系统接口请求超时";
|
} else if (message.includes("Request failed with status code")) {
|
message = "系统接口" + message.substr(message.length - 3) + "异常";
|
}
|
Message({
|
message: message,
|
type: 'error',
|
duration: 5 * 1000
|
})
|
return Promise.reject(error)
|
}
|
// (error) => {
|
// Message({
|
// message: error.message,
|
// type: 'error',
|
// duration: 5 * 1000,
|
// });
|
// return Promise.reject(error);
|
// },
|
);
|
|
export default service;
|