import HttpRequest from './http'; import { merge } from 'lodash-es'; import { getToken } from '../auth'; import { RequestCodeEnum, RequestMethodsEnum } from '@/enums/requestEnums'; import { useUserStore } from '@/stores/user' import { useMessage } from '../message'; const message = useMessage(); const requestHooks = { // 请求拦截器 requestInterceptorsHook(options, config) { // console.log("request=>",options,config) const { urlPrefix, baseUrl, withToken, isAuth } = config; options.header = options.header ?? {}; if (urlPrefix) { options.url = `${urlPrefix}${options.url}`; } if (baseUrl) { options.url = `${baseUrl}${options.url}`; } const token = getToken(); if (withToken && !options.header.token) { options.header.token = token; } return options; }, // 响应拦截器 responseInterceptorsHook(response, config) { // console.log("response=>",response,config) const { isTransformResponse, isReturnDefaultResponse, isAuth } = config; if (isReturnDefaultResponse) { return response; } if (!isTransformResponse) { return response.data; } const { logout, isLogin } = useUserStore(); const { code, data, msg, show } = response.data; // console.log(code,data,msg,show) switch (code) { case RequestCodeEnum.SUCCESS: msg && show && message.toast(msg); return data; case RequestCodeEnum.FAILED: message.toast(msg); return Promise.reject(msg); case RequestCodeEnum.TOKEN_INVALID: if (isAuth && isLogin) { } return Promise.reject(); default: message.toast(msg) // return data; return Promise.reject(msg); } }, // 响应异常拦截器 responseInterceptorsCatchHook(options, err) { if (options.method.toUpperCase() == RequestMethodsEnum.POST) { console.log('请求失败:', err, options); } return Promise.reject(); } }; // 默认配置 const defaultOptions = { requestOptions: {// 请求配置 timeout: 10 * 1000, header: { version: '1.0.0' } }, baseUrl: `${import.meta.env.VITE_APP_BASE_URL || ''}`,// 基础 URL isReturnDefaultResponse: false,// 是否返回默认响应 isTransformResponse: true, // 是否转换响应 urlPrefix: '',// url 前缀 ignoreCancel: true,// 忽略重复请求取消 withToken: true,// 携带 Token isAuth: false,// 接口是否鉴权 retryCount: 2,// 重试次数 retryTimeout: 300, // 重试超时 requestHooks: requestHooks,// 请求 Hook sslVerify: false // 设置为false,不验证 ssl 证书 }; function createRequest(opt) { return new HttpRequest( merge(defaultOptions, opt || {}) ); } const request = createRequest(); export default request;