Эх сурвалжийг харах

fix: 修复JS数据集,动态参数为脚本循环次数的情况,值转为字符串,导致无限循环,出现浏览器内存溢出问题

wu.jian2 1 жил өмнө
parent
commit
01cf4b0123

+ 6 - 1
data-room-ui/packages/DataSetManagement/src/JsEditForm.vue

@@ -641,7 +641,12 @@ export default {
         let scriptMethod = null
         try {
           const scriptAfterReplacement = javascript.replace(/\${(.*?)}/g, (match, p) => {
-            return `'${this.dataForm.config.paramsList.find(param => param.name === p).value}'`
+            const value = this.dataForm.config.paramsList.find(param => param.name === p).value
+            if (!isNaN(value)) {
+              return value
+            } else {
+              return `'${value}'`
+            }
           })
           // eslint-disable-next-line no-new-func
           scriptMethod = new Function(scriptAfterReplacement)

+ 13 - 4
data-room-ui/packages/js/mixins/commonMixins.js

@@ -82,8 +82,13 @@ export default {
             if (res.data.datasetType === 'js') {
               try {
                 const scriptAfterReplacement = res.data.script.replace(/\${(.*?)}/g, (match, p) => {
-                // 根据parmas的key获取value
-                  return `'${this.config.dataSource?.params[p]}' || '${p}'`
+                  const value = this.config.dataSource?.params[p]
+
+                  if (!isNaN(value)) {
+                    return value || p
+                  } else {
+                    return `'${value}' || '${p}'`
+                  }
                 })
                 // eslint-disable-next-line no-new-func
                 const scriptMethod = new Function(scriptAfterReplacement)
@@ -129,8 +134,12 @@ export default {
             if (res.data.datasetType === 'js') {
               try {
                 const scriptAfterReplacement = res.data.script.replace(/\${(.*?)}/g, (match, p) => {
-                // 根据parmas的key获取value
-                  return `'${this.config.dataSource?.params[p]}' || '${p}'`
+                  const value = this.config.dataSource?.params[p]
+                  if (!isNaN(value)) {
+                    return value || p
+                  } else {
+                    return `'${value}' || '${p}'`
+                  }
                 })
                 // eslint-disable-next-line no-new-func
                 const scriptMethod = new Function(scriptAfterReplacement)