import axios, { AxiosRequestConfig, AxiosResponse } from 'axios'; import { message, Modal } from 'ant-design-vue'; import { getToken } from '@/utils/auth'; import { useUserStoreHook } from '@/store/modules/user'; // 创建 axios 实例 const service = axios.create({ baseURL: import.meta.env.VITE_APP_BASE_API, timeout: 50000, headers: { 'Content-Type': 'application/json;charset=utf-8' } }); // 请求拦截器 service.interceptors.request.use( (config: AxiosRequestConfig) => { if (!config.headers) { throw new Error( `Expected 'config' and 'config.headers' not to be undefined` ); } const user = useUserStoreHook(); if (user.Token) { config.headers.token = getToken(); } return config; }, (error: any) => { return Promise.reject(error); } ); // 响应拦截器 service.interceptors.response.use( (response: AxiosResponse) => { const { status, msg } = response; // console.log(msg) // console.log(response); if (status === 200) { if (response.data.code == 401) { message.error(response.data.msg||'请求失败'); return; }else if(response.data.code == 1){ message.error(response.data.msg); return; } return response.data; } else { // 响应数据为二进制流处理(Excel导出) if (response.data instanceof ArrayBuffer) { return response; } message.error( msg || '系统出错'); return Promise.reject(new Error(msg || 'Error')); } }, (error: any) => { if (error.response.data) { const { status, msg } = error.response.data; // token 过期,重新登录 if (status === '403') { Modal.confirm({ title: "提示", content: "当前页面已失效,请重新登录", okText: "确定", cancelButtonProps: { style: { display: "none" } }, onOk: () => { localStorage.clear(); window.location.href = '/'; }, }); } else { message.error(msg || '当前页面已失效'); } } return Promise.reject(error.message); } ); // 导出 axios 实例 export default service;