import axios from 'axios' import { useUserStore } from '@/stores/modules/userStore' import { useUiStore } from '@/stores/modules/uiStore' import router from '../router' const request = axios.create({ baseURL: '/api', timeout: 15000 }) request.interceptors.request.use((config) => { const userStore = useUserStore() if (userStore.token) { config.headers.Authorization = `Bearer ${userStore.token}` } return config }) request.interceptors.response.use( (response) => { if (response.config.responseType === 'blob') { return response.data } const res = response.data if (res && res.code === 200) { return res.data } if (!response.config.skipErrorToast) { useUiStore().toast(res?.msg || '请求失败') } const err = new Error(res?.msg || '请求失败') err.code = res?.code err.response = response return Promise.reject(err) }, (error) => { const status = error.response?.status const data = error.response?.data const userStore = useUserStore() if (status === 401) { userStore.logout() router.push('/login') useUiStore().toast(data?.msg || '未登录,请重新登录') } else if (status === 403) { useUiStore().toast(data?.msg || '无权限访问') } else { const message = data?.msg || error.message || '网络错误' if (!error.config?.skipErrorToast) { useUiStore().toast(message) } const err = new Error(message) err.status = status err.code = data?.code err.response = error.response return Promise.reject(err) } return Promise.reject(error) } ) export default request