/* * @Author: 田鑫 * @Date: 2023-02-17 11:58:44 * @LastEditors: rd 1344903914@qq.com * @LastEditTime: 2025-07-08 14:50:57 * @Description: */ import axios from 'axios'; import { message } from 'ant-design-vue'; import type { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios'; import { handleUserLogout, goUserLogin } from '@/utils/user'; import { useEnterpriseStore } from '@/stores/modules/enterprise'; import { glsWithCatch } from '@/utils/stroage'; import pinia from '@/stores'; const contentType = 'application/json'; const requestTimeout = 30000; enum HttpStatusCode { Success = 200, BadRequest = 400, // 请求参数错误 Unauthorized = 401, // token 无效或过期 NotFound = 404, InternalServerError = 500, } //* 导出Request类,可以用来自定义传递配置来创建实例 export class Request { //* axios 实例 private instance: AxiosInstance; //* 基础配置 private baseConfig: AxiosRequestConfig = { baseURL: import.meta.env.EO_API_URL, timeout: requestTimeout, headers: { 'Content-Type': contentType, }, }; public constructor(config: AxiosRequestConfig) { this.instance = axios.create(Object.assign(this.baseConfig, config)); this.instance.interceptors.request.use( (config: AxiosRequestConfig) => { const store = useEnterpriseStore(pinia); const token = glsWithCatch('accessToken'); config.headers!.Authorization = token; if (store.enterpriseInfo) { config.headers!['enterprise-id'] = store.enterpriseInfo.id; } return config; }, (err: any) => { return Promise.reject(err); }, ); this.instance.interceptors.response.use( (res: AxiosResponse) => { const { data } = res; switch (data.code) { case HttpStatusCode.Success: return data; default: return Promise.reject(data); } }, (err: any) => { const { response } = err; const status = response?.status; let errMessage = response?.data?.message ?? err.message; switch (status) { case HttpStatusCode.InternalServerError: errMessage = '系统繁忙,请稍后再试或联系管理员。'; break; case HttpStatusCode.NotFound: errMessage = '接口不存在'; break; case HttpStatusCode.Unauthorized: handleUserLogout(); break; } message.error(errMessage); return Promise.reject(err.response); }, ); } //* 定义请求方法 public request(config: AxiosRequestConfig): Promise { return this.instance.request(config); } public get(url: string, params?: any, config?: AxiosRequestConfig): Promise { return this.instance.get(url, { params, ...config }); } public post(url: string, data?: any, config?: AxiosRequestConfig): Promise { return this.instance.post(url, data, config); } public put(url: string, data?: any, config?: AxiosRequestConfig): Promise { return this.instance.put(url, data, config); } public delete(url: string, config?: AxiosRequestConfig): Promise { return this.instance.delete(url, config); } public patch(url: string, data?: any, config?: AxiosRequestConfig): Promise { return this.instance.patch(url, data, config); } } //* 默认导出Request实例 export default new Request({});