From 6a7c2bca9aa1b03a0d62bc1cfe60014669f1a202 Mon Sep 17 00:00:00 2001 From: panjianhua <97274247@qq.com> Date: Mon, 19 Sep 2022 23:13:34 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=AF=B7=E6=B1=82=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E5=8A=A8=E6=80=81=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/http.ts | 60 ++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 47 insertions(+), 13 deletions(-) diff --git a/src/api/http.ts b/src/api/http.ts index f6657c65..dce3dd0a 100644 --- a/src/api/http.ts +++ b/src/api/http.ts @@ -80,6 +80,32 @@ export const http = (type?: RequestHttpEnum) => { 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] + 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 as any)[key]; + (target as any)[key] = translateStr(subTarget) + } + } + return target +} /** * * 自定义请求 @@ -125,15 +151,17 @@ export const customizeHttp = (targetParams: RequestConfigType, globalParams: Req } // 处理头部 - const headers: RequestParamsObjType = { + let headers: RequestParamsObjType = { ...globalRequestParams.Header, ...targetRequestParams.Header, } + headers = translateStr(headers) // data 参数 let data: RequestParamsObjType | FormData | string = {} // params 参数 - let params: RequestParamsObjType = targetRequestParams.Params + let params: RequestParamsObjType = { ...targetRequestParams.Params } + params = translateStr(params) // form 类型处理 let formData: FormData = new FormData() formData.set('default', 'defaultData') @@ -145,20 +173,20 @@ export const customizeHttp = (targetParams: RequestConfigType, globalParams: Req case RequestBodyEnum.JSON: headers['Content-Type'] = ContentTypeEnum.JSON - data = JSON.parse(targetRequestParams.Body['json']) + data = translateStr(JSON.parse(targetRequestParams.Body['json'])) // json 赋值给 data break case RequestBodyEnum.XML: headers['Content-Type'] = ContentTypeEnum.XML // xml 字符串赋值给 data - data = targetRequestParams.Body['xml'] + 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, bodyFormData[i]) + for (const i in bodyFormData) formData.set(i, translateStr(bodyFormData[i])) // FormData 赋值给 data data = formData break @@ -167,7 +195,7 @@ export const customizeHttp = (targetParams: RequestConfigType, globalParams: Req headers['Content-Type'] = ContentTypeEnum.FORM_DATA const bodyFormUrlencoded = targetRequestParams.Body['form-data'] for (const i in bodyFormUrlencoded) { - formData.set(i, bodyFormUrlencoded[i]) + formData.set(i, translateStr(bodyFormUrlencoded[i])) } // FormData 赋值给 data data = formData @@ -180,11 +208,17 @@ export const customizeHttp = (targetParams: RequestConfigType, globalParams: Req data = requestSQLContent } - return axiosInstance({ - url: `${requestOriginUrl}${requestUrl}`, - method: requestHttpType, - data, - params, - headers - }) + 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地址格式有误!') + } }