w-vue-middle
Version:
统一公共服务组件
125 lines (115 loc) • 3.58 kB
JavaScript
/*
* @Author: Jason Liu
* @Date: 2022-03-15 10:31:27
* @Desc:
*/
import axios from 'axios';
import { Notification, Message } from 'win-design';
axios.defaults.withCredentials = true;
// 创建 axios 实例
const service = axios.create({
timeout: 6000000, // 请求超时时间
headers: { 'Content-Type': 'application/json' },
});
const err = (error) => {
if (error.response) {
const data = error.response.data;
if (error.response.status === 403) {
Message({
label: $t('错误'),
message: data.message || data,
type: 'error',
});
} else if (error.response.status === 401 && !(data.result && data.result.isLogin)) {
Message({
label: $t('错误'),
message: $t('请重新登录!'),
type: 'error',
});
$storage.clearToken();
} else {
Notification({
key: 'axios',
title: `${error.response.status} ${error.response.statusText}`,
message: `${error.response.data}`,
type: 'error',
});
// antDesignVue.notification.error({
// key: "axios",
// message: `${error.response.status} ${error.response.statusText}`,
// description: `${error.response.data}`
// })
}
}
return Promise.reject(error);
};
// request interceptor
service.interceptors.request.use((config) => {
const token = $storage.getToken();
config.headers['X-LOCALE'] = $winexI18n.LanName;
if (token) {
config.headers['Authorization'] = `${$storage.get('tokey')}@${token}`; // 让每个请求携带自定义 token 请根据实际情况自行修改
config.headers['ticket'] = `${$storage.get('PORTAL_JTI')}`;
const accept_system_org = $storage.get('accept_system_org');
config.headers['Accept-system-org'] = accept_system_org;
}
return config;
}, err);
// response interceptor
service.interceptors.response.use((response) => {
let showmodal = true;
if (response.data instanceof Blob) {
return response.data;
} else {
try {
if (response.data.success) {
return response.data;
} else if (response.data.code == 0) {
return response.data;
} else {
switch (`${response.data.errorDetail.code}`) {
case '401':
Message({
label: $t('错误'),
message: $t('请重新登录!'),
type: 'error',
});
$storage.clearToken();
break;
case '10007':
$storage.remove('portalurl');
$storage.remove('authfailurl');
Message({
key: 'axios',
label: $t('错误'),
message: response.data.errorDetail.message,
type: 'error',
showClose: true,
});
$storage.clearToken();
break;
default:
let message = response.data.errorDetail.message;
Message({
label: $t('错误'),
message: message,
type: 'error',
});
break;
}
showmodal = false;
return Promise.reject(message || response);
}
} catch (err) {
if (showmodal) {
Message({
label: $t('错误'),
message: $t('服务器异常,请联系管理员'),
type: 'error',
});
}
return Promise.reject(err.message);
}
}
}, err);
export default service;