From bcb226c98badc4df63c794d96b24855c47221a37 Mon Sep 17 00:00:00 2001 From: sp mac bookpro 2605 Date: Sun, 19 Jul 2026 23:24:57 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81=E5=A4=96=E9=83=A8?= =?UTF-8?q?=E5=B7=A5=E5=85=B7=E9=85=8D=E7=BD=AE=E4=BD=BF=E7=94=A8=E5=AF=B9?= =?UTF-8?q?=E8=B1=A1=E6=A0=BC=E5=BC=8F=20(JS=20object=20literal)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/ExternalToolEditor.tsx | 32 ++++++++++++++++++--------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/src/components/ExternalToolEditor.tsx b/src/components/ExternalToolEditor.tsx index 5454600..73d771b 100644 --- a/src/components/ExternalToolEditor.tsx +++ b/src/components/ExternalToolEditor.tsx @@ -30,16 +30,28 @@ const EMPTY_API: ToolApiFormValue = { }; function parseJsonObject(value: string | undefined, fieldName: string, optional = false) { - if (!value?.trim()) { + const trimmedValue = value?.trim(); + if (!trimmedValue) { if (optional) return undefined; throw new Error(`${fieldName}不能为空`); } - const parsed = JSON.parse(value); - if (!parsed || Array.isArray(parsed) || typeof parsed !== 'object') { - throw new Error(`${fieldName}必须是 JSON 对象`); + try { + // 优先尝试标准 JSON 解析 + return JSON.parse(trimmedValue); + } catch (e) { + try { + // 失败后尝试作为 JS 对象解析 (支持无引号、单引号等) + // eslint-disable-next-line no-new-func + const parsed = new Function(`return (${trimmedValue})`)(); + if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) { + return parsed; + } + throw new Error(); + } catch (e2) { + throw new Error(`${fieldName}格式不正确,请确保是有效的 JSON 或对象格式`); + } } - return parsed; } export default function ExternalToolEditor({ open, agentId, plugin, onClose, onSaved }: Props) { @@ -78,7 +90,7 @@ export default function ExternalToolEditor({ open, agentId, plugin, onClose, onS } catch (error: any) { if (error?.errorFields) return; if (error instanceof SyntaxError) { - message.error('JSON 格式不正确,请检查认证配置、请求头或依赖参数'); + message.error('配置格式不正确,请检查认证配置、请求头或依赖参数(支持 JSON 或对象格式)'); return; } message.error(error?.message || '外部工具绑定失败'); @@ -149,8 +161,8 @@ export default function ExternalToolEditor({ open, agentId, plugin, onClose, onS ]} /> - - + + @@ -207,11 +219,11 @@ export default function ExternalToolEditor({ open, agentId, plugin, onClose, onS
- +