diff --git a/data-room-ui/packages/DataSetManagement/src/HttpEditForm.vue b/data-room-ui/packages/DataSetManagement/src/HttpEditForm.vue index c9b32439..e75cc517 100644 --- a/data-room-ui/packages/DataSetManagement/src/HttpEditForm.vue +++ b/data-room-ui/packages/DataSetManagement/src/HttpEditForm.vue @@ -136,11 +136,11 @@ > @@ -542,7 +542,6 @@ ref="paramsSettingDialog" :params-list="dataForm.config.paramsList" @saveParams="saveParams" - @replaceParams="replaceParams" /> { - 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 - }, + // // 配置完参数后,将参数的值放入到对应的请求位置进行替换 + // 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 paramNames1 = this.getValName(this.dataForm.config.url) @@ -975,10 +974,10 @@ export default { } else { // 如果动态参数已配置则调接口 // 如果是前端代理,则自行组装接口及参数并调接口 - if (this.dataForm.config.requestType === 'front') { - this.replaceParams(this.dataForm.config.paramsList) - axiosFormatting({ ...this.newDataForm.config }).then((res) => { - this.dataPreviewList = res.data.list + if (this.dataForm.config.requestType === 'frontend') { + // this.replaceParams(this.dataForm.config.paramsList) + axiosFormatting({ ...this.dataForm.config }).then((res) => { + this.dataPreviewList = res.data // 获取数据后更新输出字段 this.updateOoutputFieldList(this.dataPreviewList) console.log(res) @@ -992,7 +991,7 @@ export default { dataSetType: 'http' } datasetExecuteTest(executeParams).then(res => { - this.dataPreviewList = res.data.data.list + this.dataPreviewList = res // 获取数据后更新输出字段 this.updateOoutputFieldList(this.dataPreviewList) this.$message.success('解析并执行成功') diff --git a/data-room-ui/packages/DataSetManagement/src/JsComponents/ParamsSettingDialog.vue b/data-room-ui/packages/DataSetManagement/src/JsComponents/ParamsSettingDialog.vue index 7362df69..3f4ef2d0 100644 --- a/data-room-ui/packages/DataSetManagement/src/JsComponents/ParamsSettingDialog.vue +++ b/data-room-ui/packages/DataSetManagement/src/JsComponents/ParamsSettingDialog.vue @@ -211,7 +211,6 @@ export default { }, confirm () { this.$emit('saveParams', cloneDeep(this.paramsList)) - this.$emit('replaceParams', cloneDeep(this.paramsList)) this.dialogVisible = false } } diff --git a/data-room-ui/packages/js/mixins/commonMixins.js b/data-room-ui/packages/js/mixins/commonMixins.js index 1143869e..09df9bd1 100644 --- a/data-room-ui/packages/js/mixins/commonMixins.js +++ b/data-room-ui/packages/js/mixins/commonMixins.js @@ -7,6 +7,7 @@ import _ from 'lodash' import { mapMutations, mapState } from 'vuex' import { EventBus } from 'data-room-ui/js/utils/eventBus' import { getChatInfo, getUpdateChartInfo } from '../api/bigScreenApi' +import axiosFormatting from '../../js/utils/httpParamsFormatting' export default { data () { return { @@ -71,7 +72,14 @@ export default { size: size, type: config.type }).then((data) => { - if (data.executionByFrontend) { + // 如果是http数据集的前端代理,则需要调封装的axios请求 + // if (data.executionByFrontend) { + // axiosFormatting(data.data).then(res => { + // config = this.dataFormatting(config, res) + // this.changeChartConfig(config) + // }) + // } + if (data.datasetType !== 'http' && data.executionByFrontend) { try { const scriptAfterReplacement = data.data.replace(/\${(.*?)}/g, (match, p) => { // 根据parmas的key获取value @@ -110,6 +118,13 @@ export default { } return new Promise((resolve, reject) => { getUpdateChartInfo(params).then((data) => { + // 如果是http数据集的前端代理,则需要调封装的axios请求 + // if (data.executionByFrontend) { + // axiosFormatting(data.data).then(res => { + // config = this.dataFormatting(config, res) + // this.changeChartConfig(config) + // }) + // } if (data.executionByFrontend) { try { const scriptAfterReplacement = data.data.replace(/\${(.*?)}/g, (match, p) => { @@ -124,7 +139,7 @@ export default { } } config = this.dataFormatting(config, data) - // this.changeChartConfig(config) + this.changeChartConfig(config) if (this.chart) { // 单指标组件和多指标组件的changeData传参不同 if (['Liquid', 'Gauge', 'RingProgress'].includes(config.chartType)) { diff --git a/data-room-ui/packages/js/utils/httpParamsFormatting.js b/data-room-ui/packages/js/utils/httpParamsFormatting.js index 141eb07d..3d4c0f4e 100644 --- a/data-room-ui/packages/js/utils/httpParamsFormatting.js +++ b/data-room-ui/packages/js/utils/httpParamsFormatting.js @@ -2,13 +2,12 @@ import axios from 'axios' import { Loading, Message } from 'element-ui' import _ from 'lodash' export default function axiosFormatting (customConfig) { + const newCustomConfig = replaceParams(customConfig) // 将请求头和请求参数的值转化为对象形式 - // const headers = arrToObject(customConfig.headers) - // const params = arrToObject(customConfig.params) const httpConfig = { timeout: 1000 * 30, baseURL: '', - headers: customConfig.headers + headers: newCustomConfig.headers } // let loadingInstance = null // 加载全局的loading const instance = axios.create(httpConfig) @@ -21,11 +20,11 @@ export default function axiosFormatting (customConfig) { // 执行请求脚本 // https://mock.presstime.cn/mock/64bf8a00ce1b0ea640809069/test_copy_copy_copy/httpData?token=123&ss=ss const req = { ...config, urlKey: {} } - eval(customConfig.requestScript) + eval(newCustomConfig.requestScript) for (const key in req.urlKey) { - customConfig.url = replaceUrlParam(customConfig.url, key, req.urlKey[key]) + newCustomConfig.url = replaceUrlParam(newCustomConfig.url, key, req.urlKey[key]) } - config = { ...config, ...req, url: customConfig.url } + config = { ...config, ...req, url: newCustomConfig.url } return config }, error => { // 对请求错误做些什么 @@ -37,12 +36,11 @@ export default function axiosFormatting (customConfig) { if (response.data.code === 200) { // 执行响应脚本 const resp = _.cloneDeep(response.data) - eval(customConfig.responseScript) + eval(newCustomConfig.responseScript) Message({ message: '执行成功', type: 'success' }) - console.log(resp.data.list[0]) return Promise.resolve(resp) } else { Message({ @@ -55,14 +53,14 @@ export default function axiosFormatting (customConfig) { const body = {} const pattern = /(body\.\w+)=(\w+)/g const replacement = "$1='$2'" - customConfig.body = customConfig.body.replace(pattern, replacement) - eval(customConfig.body) + newCustomConfig.body = newCustomConfig.body.replace(pattern, replacement) + eval(newCustomConfig.body) return new Promise((resolve, reject) => { instance({ - method: customConfig.method, - url: customConfig.url, - params: customConfig.params, - data: customConfig.method === 'post' ? body : undefined + method: newCustomConfig.method, + url: newCustomConfig.url, + params: newCustomConfig.params, + data: newCustomConfig.method === 'post' ? body : undefined }).then(response => { resolve(response) }).catch(error => { @@ -80,3 +78,52 @@ function replaceUrlParam (url, paramName, paramValue) { return `${url}${separator}${paramName}=${paramValue}` } } +// 将参数的值替换掉其他配置中对应属性的值 +function replaceParams (customConfig) { + let newConfig = _.cloneDeep(customConfig) + newConfig.url = evalStrFunc(newConfig.paramsList, newConfig.url) + newConfig.headers = evalArrFunc(newConfig.paramsList, newConfig.headers) + newConfig.params = evalArrFunc(newConfig.paramsList, newConfig.params) + newConfig.body = evalStrFunc(newConfig.paramsList, newConfig.body) + return newConfig +} +function 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 +} +function 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 +}