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

218 lines
5.2 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import axiosInstance from './axios';
import type {
RequestGlobalConfigType,
RequestConfigType,
} from '@/enums/httpEnum';
import {
RequestHttpEnum,
ContentTypeEnum,
RequestBodyEnum,
RequestDataTypeEnum,
RequestContentTypeEnum,
RequestParamsObjType,
} from '@/enums/httpEnum';
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,
},
});
};
export const patch = (url: string, data?: object, headersType?: string) => {
return axiosInstance({
url: url,
method: RequestHttpEnum.PATCH,
data: data,
headers: {
'Content-Type': headersType || ContentTypeEnum.JSON,
},
});
};
export const put = (
url: string,
data?: object,
headersType?: ContentTypeEnum
) => {
return axiosInstance({
url: url,
method: RequestHttpEnum.PUT,
data: data,
headers: {
'Content-Type': headersType || ContentTypeEnum.JSON,
},
});
};
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');
// 类型处理
switch (requestParamsBodyType) {
case RequestBodyEnum.NONE:
break;
case RequestBodyEnum.JSON:
headers['Content-Type'] = ContentTypeEnum.JSON;
data = JSON.parse(targetRequestParams.Body['json']);
// json 赋值给 data
break;
case RequestBodyEnum.XML:
headers['Content-Type'] = ContentTypeEnum.XML;
// xml 字符串赋值给 data
data = targetRequestParams.Body['xml'];
break;
case RequestBodyEnum.X_WWW_FORM_URLENCODED:
headers['Content-Type'] = ContentTypeEnum.FORM_URLENCODED;
const bodyFormData = targetRequestParams.Body['x-www-form-urlencoded'];
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'];
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;
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,
});
};