UNPKG

w-vue-middle

Version:

统一公共服务组件

125 lines (115 loc) 3.45 kB
/* * @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;