| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- /**
- * axios 实例
- */
- import axios from 'axios';
- import router from '@/router';
- import store from '@/store';
- import { MessageBox, Message } from 'element-ui';
- import { API_BASE_URL, TOKEN_HEADER_NAME, LAYOUT_PATH } from '@/config/setting';
- import { getToken, setToken } from './token-util';
- import { logout } from './page-tab-util';
- import JSONBIG from 'json-bigint';
- const service = axios.create({
- baseURL: API_BASE_URL,
- transformResponse: [
- function (data) {
- if (data instanceof Blob) {
- return data;
- }
- const json = JSONBIG({
- storeAsString: true
- });
- const res = json.parse(data);
- return res;
- }
- ]
- });
- /**
- * 添加请求拦截器
- */
- service.interceptors.request.use(
- (config) => {
- // 添加 token 到 header
- const token = getToken();
- if (token && config.headers) {
- config.headers.common[TOKEN_HEADER_NAME] = token;
- }
- return config;
- },
- (error) => {
- return Promise.reject(error);
- }
- );
- /**
- * 添加响应拦截器
- */
- service.interceptors.response.use(
-
- (res) => {
- // token 自动续期
- if (res.data.code == '-1' && res.config?.showErrorToast !== false) {
- Message.error(res.data.message);
- }
- const token = res.headers[TOKEN_HEADER_NAME.toLowerCase()];
- if (token) {
- setToken(token);
- }
- return res;
- },
- (error) => {
- // 登录过期处理
- if (error?.response?.status === 401) {
- const currentPath = router.currentRoute.path;
- if (currentPath === LAYOUT_PATH) {
- logout(true);
- } else {
- MessageBox.alert('登录状态已过期, 请退出重新登录!', '系统提示', {
- confirmButtonText: '重新登录',
- callback: (action) => {
- if (action === 'confirm') {
- logout(false, currentPath);
- }
- },
- beforeClose: () => {
- MessageBox.close();
- }
- });
- }
- return Promise.reject(new Error(error.response.data?.message));
- }
- return Promise.reject(error);
- }
- );
- export default service;
|