feat: 请求参数动态配置

This commit is contained in:
panjianhua 2022-09-16 23:11:10 +08:00
parent bcec26374f
commit fe7af94343
4 changed files with 44 additions and 10 deletions

View File

@ -80,6 +80,26 @@ export const http = (type?: RequestHttpEnum) => {
return get return get
} }
} }
const prefix = 'javascript:'
// 对输入字符进行转义处理
export const translateStr = (target: string | object) => {
if (typeof target === 'string') {
if (target.startsWith(prefix)) {
const funcStr = target.split(prefix)[1]
const result = new Function(`${funcStr}`)()
return result
} else {
return target
}
}
for (const key in target) {
if (Object.prototype.hasOwnProperty.call(target, key)) {
const subTarget = (target as any)[key];
(target as any)[key] = translateStr(subTarget)
}
}
return target
}
/** /**
* * * *
@ -113,7 +133,7 @@ export const customizeHttp = (targetParams: RequestConfigType, globalParams: Req
requestParamsBodyType, requestParamsBodyType,
// SQL 请求对象 // SQL 请求对象
requestSQLContent, requestSQLContent,
// 请求内容 params / cookie / header / body: 同 requestParamsBodyType // 请求内容 params / cookie / header / body / path: 同 requestParamsBodyType
requestParams: targetRequestParams requestParams: targetRequestParams
} = targetParams } = targetParams
@ -125,15 +145,25 @@ export const customizeHttp = (targetParams: RequestConfigType, globalParams: Req
} }
// 处理头部 // 处理头部
const headers: RequestParamsObjType = { let headers: RequestParamsObjType = {
...globalRequestParams.Header, ...globalRequestParams.Header,
...targetRequestParams.Header, ...targetRequestParams.Header,
} }
headers = translateStr(headers)
// data 参数 // data 参数
let data: RequestParamsObjType | FormData | string = {} let data: RequestParamsObjType | FormData | string = {}
// params 参数 // params 参数
let params: RequestParamsObjType = targetRequestParams.Params let params: RequestParamsObjType = targetRequestParams.Params
params = translateStr(params)
// path 参数
let partUrl = requestUrl
const Path = targetRequestParams.Path
for (const key in Path) {
if (Object.prototype.hasOwnProperty.call(Path, key)) {
partUrl = partUrl.replace(`:${key}`, translateStr(Path[key]))
}
}
// form 类型处理 // form 类型处理
let formData: FormData = new FormData() let formData: FormData = new FormData()
formData.set('default', 'defaultData') formData.set('default', 'defaultData')
@ -145,20 +175,20 @@ export const customizeHttp = (targetParams: RequestConfigType, globalParams: Req
case RequestBodyEnum.JSON: case RequestBodyEnum.JSON:
headers['Content-Type'] = ContentTypeEnum.JSON headers['Content-Type'] = ContentTypeEnum.JSON
data = JSON.parse(targetRequestParams.Body['json']) data = translateStr(JSON.parse(targetRequestParams.Body['json']))
// json 赋值给 data // json 赋值给 data
break break
case RequestBodyEnum.XML: case RequestBodyEnum.XML:
headers['Content-Type'] = ContentTypeEnum.XML headers['Content-Type'] = ContentTypeEnum.XML
// xml 字符串赋值给 data // xml 字符串赋值给 data
data = targetRequestParams.Body['xml'] data = translateStr(targetRequestParams.Body['xml'])
break break
case RequestBodyEnum.X_WWW_FORM_URLENCODED: case RequestBodyEnum.X_WWW_FORM_URLENCODED:
headers['Content-Type'] = ContentTypeEnum.FORM_URLENCODED headers['Content-Type'] = ContentTypeEnum.FORM_URLENCODED
const bodyFormData = targetRequestParams.Body['x-www-form-urlencoded'] const bodyFormData = targetRequestParams.Body['x-www-form-urlencoded']
for (const i in bodyFormData) formData.set(i, bodyFormData[i]) for (const i in bodyFormData) formData.set(i, translateStr(bodyFormData[i]))
// FormData 赋值给 data // FormData 赋值给 data
data = formData data = formData
break break
@ -167,7 +197,7 @@ export const customizeHttp = (targetParams: RequestConfigType, globalParams: Req
headers['Content-Type'] = ContentTypeEnum.FORM_DATA headers['Content-Type'] = ContentTypeEnum.FORM_DATA
const bodyFormUrlencoded = targetRequestParams.Body['form-data'] const bodyFormUrlencoded = targetRequestParams.Body['form-data']
for (const i in bodyFormUrlencoded) { for (const i in bodyFormUrlencoded) {
formData.set(i, bodyFormUrlencoded[i]) formData.set(i, translateStr(bodyFormUrlencoded[i]))
} }
// FormData 赋值给 data // FormData 赋值给 data
data = formData data = formData
@ -181,7 +211,7 @@ export const customizeHttp = (targetParams: RequestConfigType, globalParams: Req
} }
return axiosInstance({ return axiosInstance({
url: `${requestOriginUrl}${requestUrl}`, url: `${requestOriginUrl}${partUrl}`,
method: requestHttpType, method: requestHttpType,
data, data,
params, params,

View File

@ -99,6 +99,7 @@ export enum RequestParamsTypeEnum {
PARAMS = 'Params', PARAMS = 'Params',
BODY = 'Body', BODY = 'Body',
HEADER = 'Header', HEADER = 'Header',
PATH = 'Path',
} }
/** /**
@ -108,6 +109,7 @@ export type RequestParamsObjType = {
[T: string]: string [T: string]: string
} }
export type RequestParams = { export type RequestParams = {
[RequestParamsTypeEnum.PATH]: RequestParamsObjType
[RequestParamsTypeEnum.PARAMS]: RequestParamsObjType [RequestParamsTypeEnum.PARAMS]: RequestParamsObjType
[RequestParamsTypeEnum.HEADER]: RequestParamsObjType [RequestParamsTypeEnum.HEADER]: RequestParamsObjType
[RequestParamsTypeEnum.BODY]: { [RequestParamsTypeEnum.BODY]: {

View File

@ -31,7 +31,8 @@ const requestConfig: RequestConfigType = {
xml: '' xml: ''
}, },
Header: {}, Header: {},
Params: {} Params: {},
Path: {}
} }
} }

View File

@ -137,7 +137,8 @@ export const useChartEditStore = defineStore({
xml: '' xml: ''
}, },
Header: {}, Header: {},
Params: {} Params: {},
Path: {}
} }
}, },
// 图表数组(需存储给后端) // 图表数组(需存储给后端)
@ -624,7 +625,7 @@ export const useChartEditStore = defineStore({
ids.push(item.id) ids.push(item.id)
}) })
} else { } else {
;(historyData[0] as CreateComponentGroupType).groupList.forEach(item => { (historyData[0] as CreateComponentGroupType).groupList.forEach(item => {
ids.push(item.id) ids.push(item.id)
}) })
} }