|
@@ -542,6 +542,7 @@
|
|
|
ref="paramsSettingDialog"
|
|
|
:params-list="dataForm.config.paramsList"
|
|
|
@saveParams="saveParams"
|
|
|
+ @replaceParams="replaceParams"
|
|
|
/>
|
|
|
<OutputFieldDialog
|
|
|
ref="outputFieldDialog"
|
|
@@ -642,6 +643,7 @@ export default {
|
|
|
value: 'date',
|
|
|
label: '日期'
|
|
|
}],
|
|
|
+ newDataForm: {}, // 替换完参数后的配置
|
|
|
dataForm: {
|
|
|
id: '',
|
|
|
name: '',
|
|
@@ -656,7 +658,7 @@ export default {
|
|
|
headers: [],
|
|
|
params: [],
|
|
|
body: '',
|
|
|
- paramsList:[],
|
|
|
+ paramsList: [],
|
|
|
requestScript: '',
|
|
|
responseScript: ''
|
|
|
}
|
|
@@ -734,9 +736,8 @@ export default {
|
|
|
const { script, paramsList, fieldDesc, fieldList } = config
|
|
|
this.dataForm = { id, name, typeId, remark, datasetType, moduleCode, editable, sourceId, config: { ...config } }
|
|
|
this.fieldDesc = fieldDesc
|
|
|
- console.log(fieldList)
|
|
|
this.outputFieldList = fieldList
|
|
|
- console.log(this.outputFieldList)
|
|
|
+ this.replaceParams(paramsList)
|
|
|
this.scriptExecute(true)
|
|
|
})
|
|
|
}
|
|
@@ -761,7 +762,6 @@ export default {
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
- requestType: '',
|
|
|
this.$refs[formName].validate((valid) => {
|
|
|
if (valid) {
|
|
|
this.saveloading = true
|
|
@@ -809,7 +809,6 @@ export default {
|
|
|
// 增加header
|
|
|
addHeader () {
|
|
|
const header = { key: '', type: 'string', value: '', remark: '' }
|
|
|
- console.log(this.dataForm)
|
|
|
this.dataForm.config.headers.push(_.cloneDeep(header))
|
|
|
},
|
|
|
// 移除header
|
|
@@ -888,24 +887,73 @@ export default {
|
|
|
})
|
|
|
this.fieldDesc = fieldDesc
|
|
|
},
|
|
|
+ // 配置完参数后,将参数的值放入到对应的请求位置进行替换
|
|
|
+ replaceParams (paramsList) {
|
|
|
+ this.newDataForm = _.cloneDeep(this.dataForm)
|
|
|
+ this.newDataForm.config.url = this.evalStrFunc(paramsList, this.newDataForm.config.url)
|
|
|
+ this.newDataForm.config.headers = this.evalArrFunc(paramsList, this.newDataForm.config.headers)
|
|
|
+ this.newDataForm.config.params = this.evalArrFunc(paramsList, this.newDataForm.config.params)
|
|
|
+ this.newDataForm.config.body = this.evalStrFunc(paramsList, this.newDataForm.config.body)
|
|
|
+ },
|
|
|
+ evalStrFunc (paramsList, string) {
|
|
|
+ // 取name作为变量名, value作为变量值 { name: '站三', token: '123'}
|
|
|
+ const params = paramsList.reduce((acc, cur) => {
|
|
|
+ acc[cur.name] = cur.value
|
|
|
+ return acc
|
|
|
+ }, {})
|
|
|
+
|
|
|
+ // 将url中 ${xxx} 替换成 ${params.xxx}
|
|
|
+ const str = string.replace(/\$\{(\w+)\}/g, (match, p1) => {
|
|
|
+ return '${params.' + p1 + '}'
|
|
|
+ })
|
|
|
+
|
|
|
+ const transformStr = ''
|
|
|
+ // 将字符串中的${}替换为变量, 使用eval执行
|
|
|
+ eval('transformStr = `' + str + '`')
|
|
|
+ return transformStr
|
|
|
+ },
|
|
|
+ evalArrFunc (paramsList, arr) {
|
|
|
+ // 取name作为变量名, value作为变量值 { name: '站三', token: '123'}
|
|
|
+ const params = paramsList.reduce((acc, cur) => {
|
|
|
+ acc[cur.name] = cur.value
|
|
|
+ return acc
|
|
|
+ }, {})
|
|
|
+
|
|
|
+ // 取name作为变量名, value作为变量值 { _name: '${name}', _token: '${token}'}
|
|
|
+ const paramsListObj = arr.reduce((acc, cur) => {
|
|
|
+ acc[cur.key] = cur.value
|
|
|
+ return acc
|
|
|
+ }, {})
|
|
|
+ // 转成字符串
|
|
|
+ const paramsListStr = JSON.stringify(paramsListObj)
|
|
|
+
|
|
|
+ // 将url中 ${xxx} 替换成 ${params.xxx}
|
|
|
+ const str = paramsListStr.replace(/\$\{(\w+)\}/g, (match, p1) => {
|
|
|
+ return '${params.' + p1 + '}'
|
|
|
+ })
|
|
|
+ const transformStr = ''
|
|
|
+ // 将字符串中的${}替换为变量, 使用eval执行
|
|
|
+ eval('transformStr = `' + str + '`')
|
|
|
+ const obj = JSON.parse(transformStr)
|
|
|
+ return obj
|
|
|
+ },
|
|
|
// 获取请求地址、请求头、请求参数、请求体中所有的变量,在动态参数中进行变量
|
|
|
- getPramsList(){
|
|
|
- const reg = /\${(.*?)}/g
|
|
|
+ getPramsList () {
|
|
|
const paramNames1 = this.getValName(this.dataForm.config.url)
|
|
|
- const paramNames2 = this.dataForm.config?.headers.map(item=>{
|
|
|
+ const paramNames2 = this.dataForm.config?.headers.map(item => {
|
|
|
const nameList = this.getValName(item.value)
|
|
|
- if (nameList && nameList.length){
|
|
|
+ if (nameList && nameList.length) {
|
|
|
return nameList[0]
|
|
|
}
|
|
|
})
|
|
|
- const paramNames3 = this.dataForm.config?.params.map(item=>{
|
|
|
+ const paramNames3 = this.dataForm.config?.params.map(item => {
|
|
|
const nameList = this.getValName(item.value)
|
|
|
- if (nameList && nameList.length){
|
|
|
+ if (nameList && nameList.length) {
|
|
|
return nameList[0]
|
|
|
}
|
|
|
})
|
|
|
- const paramNames4=this.getValName(this.dataForm.config.body)
|
|
|
- const paramNames = new Set([...paramNames1,...paramNames2,...paramNames3,...paramNames4])
|
|
|
+ const paramNames4 = this.getValName(this.dataForm.config.body)
|
|
|
+ const paramNames = new Set([...paramNames1, ...paramNames2, ...paramNames3, ...paramNames4])
|
|
|
const names = this.dataForm.config?.paramsList?.map(item => item.name)
|
|
|
const params = []
|
|
|
paramNames.forEach(name => {
|
|
@@ -918,21 +966,20 @@ export default {
|
|
|
type: 'String',
|
|
|
value: '',
|
|
|
status: 1,
|
|
|
- require: 0,
|
|
|
+ require: 1,
|
|
|
remark: ''
|
|
|
})
|
|
|
}
|
|
|
})
|
|
|
this.dataForm.config.paramsList = _.cloneDeep(params)
|
|
|
-
|
|
|
},
|
|
|
// 获取字符串中${变量名}中的变量名
|
|
|
- getValName(str){
|
|
|
- const reg = /\$\{(.+?)\}/;
|
|
|
- const reg_g = /\$\{(.+?)\}/g;
|
|
|
- const result = str.match(reg_g);
|
|
|
+ getValName (str) {
|
|
|
+ const reg = /\$\{(.+?)\}/
|
|
|
+ const reg_g = /\$\{(.+?)\}/g
|
|
|
+ const result = str.match(reg_g)
|
|
|
const list = []
|
|
|
- if (result){
|
|
|
+ if (result) {
|
|
|
for (let i = 0; i < result.length; i++) {
|
|
|
const item = result[i]
|
|
|
list.push(item.match(reg)[1])
|
|
@@ -943,26 +990,31 @@ export default {
|
|
|
// 执行配置好的接口
|
|
|
scriptExecute (isInit = false) {
|
|
|
this.getPramsList()
|
|
|
- // 如果是前端代理,则自行组装接口及参数并调接口
|
|
|
- if (this.dataForm.config.requestType === 'front') {
|
|
|
- if (this.dataForm.config.paramsList && this.dataForm.config.paramsList.length){
|
|
|
- }
|
|
|
- axiosFormatting({ ...this.dataForm.config }).then((res) => {
|
|
|
- this.dataPreviewList = res.list
|
|
|
- })
|
|
|
+ // 如果动态参数未配置,则直接打开配置弹窗
|
|
|
+ const flag = this.dataForm.config.paramsList.some(item => !item.value)
|
|
|
+ if (this.dataForm.config.paramsList && this.dataForm.config.paramsList.length && flag) {
|
|
|
+ this.$refs.paramsSettingDialog.open()
|
|
|
} else {
|
|
|
- // 如果是后端代理,则将配置传到后端
|
|
|
- const script = JSON.stringify(this.dataForm.config)
|
|
|
- const executeParams = {
|
|
|
- script,
|
|
|
- params: this.dataForm.paramsList,
|
|
|
- dataSetType: 'http'
|
|
|
- }
|
|
|
- datasetExecuteTest(executeParams).then(res => {
|
|
|
- this.dataPreviewList = res
|
|
|
- }).catch((e) => {
|
|
|
+ // 如果动态参数已配置则调接口
|
|
|
+ // 如果是前端代理,则自行组装接口及参数并调接口
|
|
|
+ if (this.dataForm.config.requestType === 'front') {
|
|
|
+ axiosFormatting({ ...this.newDataForm.config }).then((res) => {
|
|
|
+ this.dataPreviewList = res.list
|
|
|
+ })
|
|
|
+ } else {
|
|
|
+ // 如果是后端代理,则将配置传到后端
|
|
|
+ const script = JSON.stringify(this.dataForm.config)
|
|
|
+ const executeParams = {
|
|
|
+ script,
|
|
|
+ params: this.dataForm.paramsList,
|
|
|
+ dataSetType: 'http'
|
|
|
+ }
|
|
|
+ datasetExecuteTest(executeParams).then(res => {
|
|
|
+ this.dataPreviewList = res
|
|
|
+ }).catch((e) => {
|
|
|
|
|
|
- })
|
|
|
+ })
|
|
|
+ }
|
|
|
}
|
|
|
},
|
|
|
// 清空分类
|