import useUserStore from '@/store/modules/user' import { ApiInstance } from './type' import axios from 'axios' // import qs from 'qs' import Message from 'vue-m-message' // 导入 API 模块 import appApi from './modules/app' import userApi from './modules/user' import roleApi from './modules/role' const axiosInstance:ApiInstance = axios.create({ baseURL: (import.meta.env.DEV && import.meta.env.VITE_OPEN_PROXY === 'true') ? '/proxy/' : import.meta.env.VITE_APP_API_BASEURL, timeout: 1000 * 60, responseType: 'json', }) axiosInstance.interceptors.request.use( (request) => { // 全局拦截请求发送前提交的参数 const userStore = useUserStore() // 设置请求头 if (request.headers) { if (userStore.isLogin) { request.headers.Authorization = userStore.token } } // 是否将 POST 请求参数进行字符串化处理 if (request.method === 'post') { // request.data = qs.stringify(request.data, { // arrayFormat: 'brackets', // }) } return request }, ) axiosInstance.interceptors.response.use( (response) => { /** * 全局拦截请求发送后返回的数据,如果数据有报错则在这做全局的错误提示 * 假设返回数据格式为:{ status: 1, error: '', data: '' } * 规则是当 status 为 1 时表示请求成功,为 0 时表示接口需要登录或者登录状态失效,需要重新登录 * 请求出错时 error 会返回错误信息 */ if (response.data.code === 500) { if (response.data.msg !== '') { // 错误提示 Message.error(response.data.msg, { zIndex: 2000, }) return Promise.resolve(response.data) } } else { if (response.data.code === 401) { Message({ message: '登录信息已过期,请重新登录!!!', type: 'error', duration: 2000, }) // useUserStore().logout() } // useUserStore().logout() } return Promise.resolve(response.data) }, (error) => { let message = error.message if (message === 'Network Error') { message = '后端网络故障' } else if (message.includes('timeout')) { message = '接口请求超时' } else if (message.includes('Request failed with status code')) { message = `接口${message.substr(message.length - 3)}异常` } Message.error(message, { zIndex: 2000, }) return Promise.reject(error) }, ) // API 模块 const api = { appApi: appApi(axiosInstance), userApi: userApi(axiosInstance), roleApi: roleApi(axiosInstance), } export default api