import { useLoginStore } from '@/store/modules/login';
import axios, {AxiosInstance, AxiosError, AxiosRequestConfig, AxiosResponse} from 'axios'
import { storeToRefs } from 'pinia';
import { Toast } from 'vant';
import 'vant/es/toast/style';
import { clearCookie } from './jscookie';
declare const window: Window & { __wxjs_environment: any };
Toast.allowMultiple();
const loginStore = useLoginStore()
const {updateLogin} = loginStore
const URL: string = import.meta.env.VITE_PROXY_URL
enum RequestEnums {
TIMEOUT = 20000,
OVERDUE = 1000 || 1005,
FAIL = 999,
SUCCESS = 0 || 200,
}
const config = {
baseURL: URL as string,
timeout: RequestEnums.TIMEOUT as number,
withCredentials: true,
}
class RequestHttp {
service: AxiosInstance;
public constructor(config: AxiosRequestConfig) {
this.service = axios.create(config);
this.service.interceptors.request.use(
(config: AxiosRequestConfig) => {
const uploadHeader = {"Content-Type":'multipart/form-data'}
return {
...config,
headers: {}
}
},
(error: AxiosError) => {
Promise.reject(error)
}
)
this.service.interceptors.response.use(
(response: AxiosResponse) => {
const {data, config} = response;
if (data.returnCode === RequestEnums.OVERDUE) {
clearCookie()
updateLogin(false)
}
if (data.returnCode && data.returnCode !== RequestEnums.SUCCESS) {
}
return data;
},
(error: AxiosError) => {
const {response} = error;
if (response) {
this.handleCode(response.status)
}
if (!window.navigator.onLine) {
Toast('网络连接失败');
}
}
)
}
handleCode(code: number):void {
switch(code) {
case 401:
Toast('登录失败,请重新登录');
break;
default:
Toast('数据显示失败,请稍后重试');
break;
}
}
get<T>(url: string, params?: object): Promise<ResultData<T>> {
return this.service.get(url, {params});
}
post<T>(url: string, params?: object): Promise<ResultData<T>> {
return this.service.post(url, params);
}
put<T>(url: string, params?: object): Promise<ResultData<T>> {
return this.service.put(url, params);
}
delete<T>(url: string, params?: object): Promise<ResultData<T>> {
return this.service.delete(url, {params});
}
}
export default new RequestHttp(config);