12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- import axios, {
- AxiosInstance,
- AxiosError,
- AxiosRequestConfig,
- AxiosResponse,
- InternalAxiosRequestConfig
- } from "axios";
- import { showFailToast } from 'vant'
- import type { IResultData } from '@/types/api/index'
- import { getStorage } from './authStorage'
- enum RequestEnums {
- TIME_OUT = 20000,
- SUCCESS = 200,
- CODE = 0
- }
- const baseConfig = {
- baseURL: import.meta.env.VITE_BASE_URL,
- timeout: RequestEnums.TIME_OUT,
- withCredentials: true
- }
- interface IRequestClass {
- service: AxiosInstance
- }
- class RequestHttp implements IRequestClass {
- service: AxiosInstance;
- constructor(config: AxiosRequestConfig) {
- this.service = axios.create(config)
- this.service.interceptors.request.use((config: InternalAxiosRequestConfig) => {
- if (!!config.headers!.isToken && getStorage()) {
- config.headers!['X-token'] = getStorage()
- }
- if (!config.headers['Content-Type']) {
- config.headers['Content-Type'] = 'application/x-www-form-urlencoded'
- }
- return Promise.resolve(config)
- }, (error: AxiosError) => {
- showFailToast(error)
- // 请求报错
- Promise.reject(error)
- })
- this.service.interceptors.response.use((response: AxiosResponse) => {
- const { msg, code, error } = response.data
- console.log(response.data)
- if (response.status === 302) {
- window.localStorage.clear()
- window.location.href = `/login?redirect=${window.location.pathname}`
- return Promise.reject(msg)
- }
- if (response.status === 404) {
- showFailToast(error)
- return Promise.reject(msg)
- }
- if (code !== RequestEnums.CODE) {
- showFailToast(msg)
- return Promise.reject(msg)
- }
- return Promise.resolve(response.data)
- }, (error: AxiosError) => {
- showFailToast(error)
- return Promise.reject(error)
- })
- }
- get<T>(url: string, params?: Object): Promise<IResultData<T>> {
- return this.service.get(url, { params })
- }
- post<T>(url: string, data: object): Promise<IResultData<T>> {
- return this.service.post(url, data);
- }
- put<T>(url: string, data?: object): Promise<IResultData<T>> {
- return this.service.put(url, data);
- }
- delete<T>(url: string, data?: object): Promise<IResultData<T>> {
- return this.service.delete(url, data);
- }
- }
- export default new RequestHttp(baseConfig)
|