| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- import axios, { type AxiosInstance, } from 'axios'
- import type { ErrorResponse,ErrorResponseList } from '@/model/base'
- import { MessagePlugin } from 'tdesign-vue-next'
- import { useAppStore } from '@/stores/app'
- const client: AxiosInstance = axios.create({
- baseURL: import.meta.env.VITE_API_PREFIX,
- timeout: 1000
- })
- const handleError = (errorResponse: ErrorResponse) => {
- if (errorResponse.code === 401) {
- useAppStore().logout()
- MessagePlugin.error('登录信息失效,请重新登录')
- } else {
- MessagePlugin.error(errorResponse.message)
- }
- }
- client.interceptors.response.use(
- (response) => {
- return response
- },
- (error) => {
- let errorResponse: ErrorResponse;
- if (Array.isArray(error.response.data)) {
- const errorResponseList = error.response.data as ErrorResponseList;
- errorResponse = errorResponseList[0];
- } else {
- // 否则,将其视为单个 ErrorResponse
- errorResponse = error.response.data as ErrorResponse;
- }
- handleError(errorResponse)
- return Promise.reject(errorResponse)
- }
- )
- client.interceptors.request.use((config) => {
- const appStore = useAppStore()
- config.headers.set('Authorization', 'Bearer ' + appStore.token)
- return config
- })
- export default {
- get: async <T>(url: string, params?: any) => {
- const response = await client.get<T>(url, {
- params
- })
- return response.data as T
- },
- post: async <T>(url: string, data: Record<string, any>) => {
- const response = await client.post<T>(url, data)
- return response.data as T
- },
- delete: async (url: string,params?:any) => {
- await client.delete(url,{params})
- },
- put: async <T>(url: string, data: Record<string, any> = {}) => {
- const response = await client.put<T>(url, data)
- return response.data as T
- },
- // 增加文件上传的方法
- uploadFile: async <T>(url: string, file: File, data?: Record<string, any>) => {
- const formData = new FormData()
- formData.append('file', file)
- // 如果有其他参数,添加到 FormData 中
- if (data) {
- Object.keys(data).forEach((key) => {
- formData.append(key, data[key])
- })
- }
- const response = await client.post<T>(url, formData, {
- headers: {
- 'Content-Type': 'multipart/form-data'
- }
- })
- return response.data as T
- }
- }
|