zsqy-naive-ui/src/api/http.ts

218 lines
5.2 KiB
TypeScript
Raw Normal View History

import axiosInstance from './axios';
2024-01-05 17:28:54 +08:00
import type {
RequestGlobalConfigType,
RequestConfigType,
} from '@/enums/httpEnum';
2024-01-05 17:28:54 +08:00
import {
RequestHttpEnum,
ContentTypeEnum,
RequestBodyEnum,
RequestDataTypeEnum,
RequestContentTypeEnum,
RequestParamsObjType,
} 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: {
'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: {
'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: {
'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();
formData.set('default', 'defaultData');
2024-01-05 17:28:54 +08:00
// 类型处理
switch (requestParamsBodyType) {
case RequestBodyEnum.NONE:
break;
case RequestBodyEnum.JSON:
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:
headers['Content-Type'] = ContentTypeEnum.XML;
2024-01-05 17:28:54 +08:00
// xml 字符串赋值给 data
data = targetRequestParams.Body['xml'];
2024-01-05 17:28:54 +08:00
break;
case RequestBodyEnum.X_WWW_FORM_URLENCODED:
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:
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) {
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,
});
};