mirror of
https://gitee.com/dromara/go-view.git
synced 2025-04-06 03:58:04 +08:00
226 lines
5.6 KiB
TypeScript
226 lines
5.6 KiB
TypeScript
import axiosInstance from './axios'
|
||
import {
|
||
RequestHttpEnum,
|
||
ContentTypeEnum,
|
||
RequestBodyEnum,
|
||
RequestDataTypeEnum,
|
||
RequestContentTypeEnum,
|
||
RequestParamsObjType
|
||
} from '@/enums/httpEnum'
|
||
import type { RequestGlobalConfigType, RequestConfigType } from '@/store/modules/chartEditStore/chartEditStore.d'
|
||
|
||
export const get = <T = any>(url: string, params?: object) => {
|
||
return axiosInstance<T>({
|
||
url: url,
|
||
method: RequestHttpEnum.GET,
|
||
params: params,
|
||
})
|
||
}
|
||
|
||
export const post = <T = any>(url: string, data?: object, headersType?: string) => {
|
||
return axiosInstance<T>({
|
||
url: url,
|
||
method: RequestHttpEnum.POST,
|
||
data: data,
|
||
headers: {
|
||
'Content-Type': headersType || ContentTypeEnum.JSON
|
||
}
|
||
})
|
||
}
|
||
|
||
export const patch = <T = any>(url: string, data?: object, headersType?: string) => {
|
||
return axiosInstance<T>({
|
||
url: url,
|
||
method: RequestHttpEnum.PATCH,
|
||
data: data,
|
||
headers: {
|
||
'Content-Type': headersType || ContentTypeEnum.JSON
|
||
}
|
||
})
|
||
}
|
||
|
||
export const put = <T = any>(url: string, data?: object, headersType?: ContentTypeEnum) => {
|
||
return axiosInstance<T>({
|
||
url: url,
|
||
method: RequestHttpEnum.PUT,
|
||
data: data,
|
||
headers: {
|
||
'Content-Type': headersType || ContentTypeEnum.JSON
|
||
}
|
||
})
|
||
}
|
||
|
||
export const del = <T = any>(url: string, params?: object) => {
|
||
return axiosInstance<T>({
|
||
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
|
||
}
|
||
}
|
||
const prefix = 'javascript:'
|
||
// 对输入字符进行转义处理
|
||
export const translateStr = (target: string | Record<any, any>) => {
|
||
if (typeof target === 'string') {
|
||
if (target.startsWith(prefix)) {
|
||
const funcStr = target.split(prefix)[1]
|
||
let result
|
||
try {
|
||
result = new Function(`${funcStr}`)()
|
||
} catch (error) {
|
||
console.log(error)
|
||
window['$message'].error('js内容解析有误!')
|
||
}
|
||
return result
|
||
} else {
|
||
return target
|
||
}
|
||
}
|
||
for (const key in target) {
|
||
if (Object.prototype.hasOwnProperty.call(target, key)) {
|
||
const subTarget = target[key]
|
||
target[key] = translateStr(subTarget)
|
||
}
|
||
}
|
||
return target
|
||
}
|
||
|
||
/**
|
||
* * 自定义请求
|
||
* @param targetParams 当前组件参数
|
||
* @param globalParams 全局参数
|
||
*/
|
||
export const customizeHttp = (targetParams: RequestConfigType, globalParams: RequestGlobalConfigType) => {
|
||
if (!targetParams || !globalParams) {
|
||
return
|
||
}
|
||
// 全局
|
||
const {
|
||
// 全局请求源地址
|
||
requestOriginUrl,
|
||
// 全局请求内容
|
||
requestParams: globalRequestParams
|
||
} = globalParams
|
||
|
||
// 目标组件(优先级 > 全局组件)
|
||
const {
|
||
// 请求地址
|
||
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
|
||
}
|
||
|
||
// 处理头部
|
||
let headers: RequestParamsObjType = {
|
||
...globalRequestParams.Header,
|
||
...targetRequestParams.Header
|
||
}
|
||
headers = translateStr(headers)
|
||
|
||
// data 参数
|
||
let data: RequestParamsObjType | FormData | string = {}
|
||
// params 参数
|
||
let params: RequestParamsObjType = { ...targetRequestParams.Params }
|
||
params = translateStr(params)
|
||
// form 类型处理
|
||
let formData: FormData = new FormData()
|
||
formData.set('default', 'defaultData')
|
||
// 类型处理
|
||
|
||
switch (requestParamsBodyType) {
|
||
case RequestBodyEnum.NONE:
|
||
break
|
||
|
||
case RequestBodyEnum.JSON:
|
||
headers['Content-Type'] = ContentTypeEnum.JSON
|
||
data = translateStr(JSON.parse(targetRequestParams.Body['json']))
|
||
// json 赋值给 data
|
||
break
|
||
|
||
case RequestBodyEnum.XML:
|
||
headers['Content-Type'] = ContentTypeEnum.XML
|
||
// xml 字符串赋值给 data
|
||
data = translateStr(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, translateStr(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, translateStr(bodyFormUrlencoded[i]))
|
||
}
|
||
// FormData 赋值给 data
|
||
data = formData
|
||
break
|
||
}
|
||
}
|
||
|
||
// sql 处理
|
||
if (requestContentType === RequestContentTypeEnum.SQL) {
|
||
headers['Content-Type'] = ContentTypeEnum.JSON
|
||
data = requestSQLContent
|
||
}
|
||
|
||
try {
|
||
const url = (new Function("return `" + `${requestOriginUrl}${requestUrl}`.trim() + "`"))();
|
||
return axiosInstance({
|
||
url,
|
||
method: requestHttpType,
|
||
data,
|
||
params,
|
||
headers
|
||
})
|
||
} catch (error) {
|
||
console.log(error)
|
||
window['$message'].error('URL地址格式有误!')
|
||
}
|
||
}
|