| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- /**
- * axios 实例
- */
- import axios from 'axios';
- import router from '@/router';
- import { MessageBox } 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) {
- 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 自动续期
- 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;
|