From 7475b40a072aad3b5fd542d8ea7d2c5bd6fc9ce5 Mon Sep 17 00:00:00 2001 From: fofolee Date: Mon, 6 Jan 2025 11:09:30 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8DMultiParams=E7=94=9F=E6=88=90?= =?UTF-8?q?Code=E5=8F=8A=E8=A7=A3=E6=9E=90=E5=8F=82=E6=95=B0=E5=A4=B1?= =?UTF-8?q?=E8=B4=A5=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/composer/MultiParams.vue | 79 +++++-------------- .../composer/common/ArrayEditor.vue | 40 +++------- 2 files changed, 31 insertions(+), 88 deletions(-) diff --git a/src/components/composer/MultiParams.vue b/src/components/composer/MultiParams.vue index 86c1566..435a482 100644 --- a/src/components/composer/MultiParams.vue +++ b/src/components/composer/MultiParams.vue @@ -54,7 +54,10 @@ />
- +
@@ -66,11 +69,7 @@ import { defineComponent } from "vue"; import VariableInput from "components/composer/common/VariableInput.vue"; import NumberInput from "components/composer/common/NumberInput.vue"; import ArrayEditor from "components/composer/common/ArrayEditor.vue"; -import { - stringifyArgv, - parseToHasType, - parseFunction, -} from "js/composer/formatString"; +import { stringifyArgv, parseFunction } from "js/composer/formatString"; export default defineComponent({ name: "MultiParams", @@ -130,69 +129,27 @@ export default defineComponent({ const newArgvs = argvs .map((argv) => stringifyArgv(argv)) .filter((item) => item != null && item !== ""); - console.log(newArgvs); return `${funcName}(${newArgvs.join(",")})`; }, parseCodeToArgvs(code) { const argvs = window.lodashM.cloneDeep(this.defaultArgvs); if (!code) return argvs; - // 匹配函数名和参数 - const pattern = new RegExp(`^${this.funcName}\\((.*?)\\)$`); - const match = code.match(pattern); - if (match) { - try { - const paramStr = match[1].trim(); - if (!paramStr) return argvs; - - // 分割参数,考虑括号嵌套 - let params = []; - let bracketCount = 0; - let currentParam = ""; - - for (let i = 0; i < paramStr.length; i++) { - const char = paramStr[i]; - if (char === "," && bracketCount === 0) { - params.push(currentParam.trim()); - currentParam = ""; - continue; - } - if (char === "{") bracketCount++; - if (char === "}") bracketCount--; - currentParam += char; - } - if (currentParam) { - params.push(currentParam.trim()); - } - - // 根据配置处理每个参数 - params.forEach((param, index) => { - if (index >= this.localConfig.length) return; - - const config = this.localConfig[index]; - if (config.type === "varInput") { - // 对于 VariableInput 类型,解析为带有 __varInputVal__ 标记的对象 - argvs[index] = parseToHasType(param); - } else if (config.type === "numInput") { - // 对于 NumberInput 类型,转换为数字 - argvs[index] = Number(param) || 0; - } else if (config.type === "arrayEditor") { - let result = parseFunction(`${this.funcName}(${param})`, [ - "arg0[*]", - ]); - argvs[index] = result.argv; - } else { - // 其他类型直接使用值 - argvs[index] = param; - } - }); - - return argvs; - } catch (e) { - console.error("解析参数失败:", e); + const variableFormatPaths = []; + this.localConfig.forEach((item, index) => { + if (item.type === "varInput") { + variableFormatPaths.push(`arg${index}`); + } else if (item.type === "arrayEditor") { + variableFormatPaths.push(`arg${index}[*]`); } + }); + try { + const { args } = parseFunction(code, { variableFormatPaths }); + return args; + } catch (e) { + console.error("解析参数失败:", e); + return argvs; } - return argvs; }, getSummary(argvs) { // 虽然header里对溢出做了处理,但是这里截断主要是为了节省存储空间 diff --git a/src/components/composer/common/ArrayEditor.vue b/src/components/composer/common/ArrayEditor.vue index ca5960b..87b1db0 100644 --- a/src/components/composer/common/ArrayEditor.vue +++ b/src/components/composer/common/ArrayEditor.vue @@ -145,30 +145,14 @@ export default defineComponent({ }, }, emits: ["update:modelValue"], - data() { - return { - // 本地维护的数组数据 - localItems: this.initializeItems(), - }; - }, computed: { - items: { - get() { - return this.localItems; - }, - set(newItems) { - this.localItems = newItems; - this.$emit("update:modelValue", newItems); - }, + items() { + return this.modelValue.length ? this.modelValue : this.initializeItems(); }, }, methods: { initializeItems() { - if (this.modelValue.length) { - return this.modelValue; - } - - if (this.options?.keys) { + if (this.optionsKeys) { const item = {}; this.optionsKeys.forEach((key) => { item[key] = { @@ -193,6 +177,7 @@ export default defineComponent({ * 根据配置创建相应的数据结构 */ addItem() { + let newItems = []; if (this.optionsKeys) { const newItem = {}; this.optionsKeys.forEach((key) => { @@ -202,9 +187,9 @@ export default defineComponent({ __varInputVal__: true, }; }); - this.items = [...this.items, newItem]; + newItems = [...this.items, newItem]; } else { - this.items = [ + newItems = [ ...this.items, { value: "", @@ -213,6 +198,7 @@ export default defineComponent({ }, ]; } + this.$emit("update:modelValue", newItems); }, /** * 移除指定索引的数组项 @@ -240,7 +226,7 @@ export default defineComponent({ }); } } - this.items = newItems; + this.$emit("update:modelValue", newItems); }, /** * 更新单值模式下的值 @@ -248,7 +234,7 @@ export default defineComponent({ updateItemValue(index, value) { const newItems = [...this.items]; newItems[index] = value; - this.items = newItems; + this.$emit("update:modelValue", newItems); }, /** * 更新多键模式下指定键的值 @@ -259,7 +245,7 @@ export default defineComponent({ ...newItems[index], [key]: value, }; - this.items = newItems; + this.$emit("update:modelValue", newItems); }, }, }); @@ -274,7 +260,7 @@ export default defineComponent({ } /* 防止输入框换行 */ -:deep(.q-field__native) { +.array-editor :deep(.q-field__native) { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; @@ -309,11 +295,11 @@ export default defineComponent({ bottom: 0; } -:deep(.q-btn .q-icon) { +.array-editor :deep(.q-btn .q-icon) { font-size: 14px; } -:deep(.q-btn.q-btn--dense) { +.array-editor :deep(.q-btn.q-btn--dense) { padding: 0; min-height: 16px; }