2024-02-05 10:28:35 +08:00
|
|
|
|
import axiosInstance from './axios';
|
2024-01-05 17:28:54 +08:00
|
|
|
|
import type {
|
|
|
|
|
|
RequestGlobalConfigType,
|
|
|
|
|
|
RequestConfigType,
|
2024-02-05 10:28:35 +08:00
|
|
|
|
} from '@/enums/httpEnum';
|
2024-01-05 17:28:54 +08:00
|
|
|
|
import {
|
|
|
|
|
|
RequestHttpEnum,
|
|
|
|
|
|
ContentTypeEnum,
|
|
|
|
|
|
RequestBodyEnum,
|
|
|
|
|
|
RequestDataTypeEnum,
|
|
|
|
|
|
RequestContentTypeEnum,
|
|
|
|
|
|
RequestParamsObjType,
|
2024-02-05 10:28:35 +08:00
|
|
|
|
} from '@/enums/httpEnum';
|
2024-01-05 17:28:54 +08:00
|
|
|
|
|
|
|
|
|
|
export const get = (url: string, params?: object) => {
|
|
|
|
|
|
return axiosInstance({
|
|
|
|
|
|
url: url,
|
|
|
|
|
|
method: RequestHttpEnum.GET,
|
|
|
|
|
|
params: params,
|
|
|
|
|
|
});
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
export const post = (url: string, data?: object, headersType?: string) => {
|
|
|
|
|
|
return axiosInstance({
|
|
|
|
|
|
url: url,
|
|
|
|
|
|
method: RequestHttpEnum.POST,
|
|
|
|
|
|
data: data,
|
|
|
|
|
|
headers: {
|
2024-02-05 10:28:35 +08:00
|
|
|
|
'Content-Type': headersType || ContentTypeEnum.JSON,
|
2024-01-05 17:28:54 +08:00
|
|
|
|
},
|
|
|
|
|
|
});
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
export const patch = (url: string, data?: object, headersType?: string) => {
|
|
|
|
|
|
return axiosInstance({
|
|
|
|
|
|
url: url,
|
|
|
|
|
|
method: RequestHttpEnum.PATCH,
|
|
|
|
|
|
data: data,
|
|
|
|
|
|
headers: {
|
2024-02-05 10:28:35 +08:00
|
|
|
|
'Content-Type': headersType || ContentTypeEnum.JSON,
|
2024-01-05 17:28:54 +08:00
|
|
|
|
},
|
|
|
|
|
|
});
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
export const put = (
|
|
|
|
|
|
url: string,
|
|
|
|
|
|
data?: object,
|
|
|
|
|
|
headersType?: ContentTypeEnum
|
|
|
|
|
|
) => {
|
|
|
|
|
|
return axiosInstance({
|
|
|
|
|
|
url: url,
|
|
|
|
|
|
method: RequestHttpEnum.PUT,
|
|
|
|
|
|
data: data,
|
|
|
|
|
|
headers: {
|
2024-02-05 10:28:35 +08:00
|
|
|
|
'Content-Type': headersType || ContentTypeEnum.JSON,
|
2024-01-05 17:28:54 +08:00
|
|
|
|
},
|
|
|
|
|
|
});
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
export const del = (url: string, params?: object) => {
|
|
|
|
|
|
return axiosInstance({
|
|
|
|
|
|
url: url,
|
|
|
|
|
|
method: RequestHttpEnum.DELETE,
|
|
|
|
|
|
params,
|
|
|
|
|
|
});
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
// 获取请求函数,默认get
|
|
|
|
|
|
export const http = (type?: RequestHttpEnum) => {
|
|
|
|
|
|
switch (type) {
|
|
|
|
|
|
case RequestHttpEnum.GET:
|
|
|
|
|
|
return get;
|
|
|
|
|
|
|
|
|
|
|
|
case RequestHttpEnum.POST:
|
|
|
|
|
|
return post;
|
|
|
|
|
|
|
|
|
|
|
|
case RequestHttpEnum.PATCH:
|
|
|
|
|
|
return patch;
|
|
|
|
|
|
|
|
|
|
|
|
case RequestHttpEnum.PUT:
|
|
|
|
|
|
return put;
|
|
|
|
|
|
|
|
|
|
|
|
case RequestHttpEnum.DELETE:
|
|
|
|
|
|
return del;
|
|
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
|
return get;
|
|
|
|
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* * 自定义请求
|
|
|
|
|
|
* @param targetParams 当前组件参数
|
|
|
|
|
|
* @param globalParams 全局参数
|
|
|
|
|
|
*/
|
|
|
|
|
|
export const customizeHttp = (
|
|
|
|
|
|
targetParams: RequestConfigType,
|
|
|
|
|
|
globalParams: RequestGlobalConfigType
|
|
|
|
|
|
) => {
|
|
|
|
|
|
if (!targetParams || !globalParams) {
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 全局
|
|
|
|
|
|
const {
|
|
|
|
|
|
// 全局请求源地址
|
|
|
|
|
|
requestOriginUrl,
|
|
|
|
|
|
// 全局请求内容
|
|
|
|
|
|
requestParams: globalRequestParams,
|
|
|
|
|
|
} = globalParams;
|
|
|
|
|
|
|
|
|
|
|
|
// 目标组件(优先级 > 全局组件)
|
|
|
|
|
|
const {
|
|
|
|
|
|
// requestInterval,
|
|
|
|
|
|
// 请求地址
|
|
|
|
|
|
requestUrl,
|
|
|
|
|
|
// 普通 / sql
|
|
|
|
|
|
requestContentType,
|
|
|
|
|
|
// 获取数据的方式
|
|
|
|
|
|
requestDataType,
|
|
|
|
|
|
// 请求方式 get/post/del/put/patch
|
|
|
|
|
|
requestHttpType,
|
|
|
|
|
|
// 请求体类型 none / form-data / x-www-form-urlencoded / json /xml
|
|
|
|
|
|
requestParamsBodyType,
|
|
|
|
|
|
// SQL 请求对象
|
|
|
|
|
|
requestSQLContent,
|
|
|
|
|
|
// 请求内容 params / cookie / header / body: 同 requestParamsBodyType
|
|
|
|
|
|
requestParams: targetRequestParams,
|
|
|
|
|
|
} = targetParams;
|
|
|
|
|
|
|
|
|
|
|
|
// 静态排除
|
|
|
|
|
|
if (requestDataType === RequestDataTypeEnum.STATIC) return;
|
|
|
|
|
|
|
|
|
|
|
|
if (!requestUrl) {
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 处理头部
|
|
|
|
|
|
const headers: RequestParamsObjType = {
|
|
|
|
|
|
...globalRequestParams.Header,
|
|
|
|
|
|
...targetRequestParams.Header,
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
// data 参数
|
|
|
|
|
|
let data: RequestParamsObjType | FormData | string = {};
|
|
|
|
|
|
// params 参数
|
|
|
|
|
|
const params: RequestParamsObjType = targetRequestParams.Params;
|
|
|
|
|
|
// form 类型处理
|
|
|
|
|
|
const formData: FormData = new FormData();
|
2024-02-05 10:28:35 +08:00
|
|
|
|
formData.set('default', 'defaultData');
|
2024-01-05 17:28:54 +08:00
|
|
|
|
// 类型处理
|
|
|
|
|
|
|
|
|
|
|
|
switch (requestParamsBodyType) {
|
|
|
|
|
|
case RequestBodyEnum.NONE:
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case RequestBodyEnum.JSON:
|
2024-02-05 10:28:35 +08:00
|
|
|
|
headers['Content-Type'] = ContentTypeEnum.JSON;
|
|
|
|
|
|
data = JSON.parse(targetRequestParams.Body['json']);
|
2024-01-05 17:28:54 +08:00
|
|
|
|
// json 赋值给 data
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case RequestBodyEnum.XML:
|
2024-02-05 10:28:35 +08:00
|
|
|
|
headers['Content-Type'] = ContentTypeEnum.XML;
|
2024-01-05 17:28:54 +08:00
|
|
|
|
// xml 字符串赋值给 data
|
2024-02-05 10:28:35 +08:00
|
|
|
|
data = targetRequestParams.Body['xml'];
|
2024-01-05 17:28:54 +08:00
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case RequestBodyEnum.X_WWW_FORM_URLENCODED:
|
2024-02-05 10:28:35 +08:00
|
|
|
|
headers['Content-Type'] = ContentTypeEnum.FORM_URLENCODED;
|
|
|
|
|
|
const bodyFormData = targetRequestParams.Body['x-www-form-urlencoded'];
|
2024-01-05 17:28:54 +08:00
|
|
|
|
for (const i in bodyFormData) formData.set(i, bodyFormData[i]);
|
|
|
|
|
|
// FormData 赋值给 data
|
|
|
|
|
|
data = formData;
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case RequestBodyEnum.FORM_DATA:
|
2024-02-05 10:28:35 +08:00
|
|
|
|
headers['Content-Type'] = ContentTypeEnum.FORM_DATA;
|
|
|
|
|
|
const bodyFormUrlencoded = targetRequestParams.Body['form-data'];
|
2024-01-05 17:28:54 +08:00
|
|
|
|
for (const i in bodyFormUrlencoded) {
|
|
|
|
|
|
formData.set(i, bodyFormUrlencoded[i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
// FormData 赋值给 data
|
|
|
|
|
|
data = formData;
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// sql 处理
|
|
|
|
|
|
if (requestContentType === RequestContentTypeEnum.SQL) {
|
2024-02-05 10:28:35 +08:00
|
|
|
|
headers['Content-Type'] = ContentTypeEnum.JSON;
|
2024-01-05 17:28:54 +08:00
|
|
|
|
data = requestSQLContent;
|
|
|
|
|
|
}
|
|
|
|
|
|
// 如果定义了 requestInterval 且请求次数未达到某个上限,则使用 setInterval 实现轮询
|
|
|
|
|
|
// let requestCount = 0;
|
|
|
|
|
|
// if (requestInterval && requestCount < 1) {
|
|
|
|
|
|
// const intervalId = setInterval(() => {
|
|
|
|
|
|
// // 在此处调用 customizeHttp 以实现轮询
|
|
|
|
|
|
// customizeHttp(targetParams, globalParams);
|
|
|
|
|
|
|
|
|
|
|
|
// // 增加请求计数
|
|
|
|
|
|
// requestCount++;
|
|
|
|
|
|
|
|
|
|
|
|
// // 如果请求次数达到上限,清除定时器
|
|
|
|
|
|
// if (requestCount >= 1) {
|
|
|
|
|
|
// clearInterval(intervalId);
|
|
|
|
|
|
// }
|
|
|
|
|
|
// }, requestInterval * 1000);
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
return axiosInstance({
|
|
|
|
|
|
url: `${requestOriginUrl}${requestUrl}`,
|
|
|
|
|
|
method: requestHttpType,
|
|
|
|
|
|
data,
|
|
|
|
|
|
params,
|
|
|
|
|
|
headers,
|
|
|
|
|
|
});
|
|
|
|
|
|
};
|