From ba2171e13e399bfb0078bf3ad7ed31136009bf1b Mon Sep 17 00:00:00 2001 From: zwt13703 Date: Mon, 6 Jul 2026 18:45:21 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=BC=96=E8=BE=91=E5=9B=9E=E6=98=BE=20-?= =?UTF-8?q?=20=E7=A7=BB=E9=99=A4=20destroyOnClose=20+=20setTimeout=20?= =?UTF-8?q?=E5=BB=B6=E8=BF=9F=E8=B5=8B=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除 Modal destroyOnClose 和 Form preserve={false},避免 DOM 生命周期冲突 - useEffect 内 setTimeout(fn, 0) 延迟到下一 tick,确保 Form 已挂载 - onCancel 时手动 form.resetFields() --- web/src/pages/ModelList.tsx | 33 +++++++++++++++++++------------- web/src/pages/TemplateEditor.tsx | 32 ++++++++++++++++--------------- 2 files changed, 37 insertions(+), 28 deletions(-) diff --git a/web/src/pages/ModelList.tsx b/web/src/pages/ModelList.tsx index b6f02d3..b073a3d 100644 --- a/web/src/pages/ModelList.tsx +++ b/web/src/pages/ModelList.tsx @@ -48,16 +48,24 @@ export default function ModelList() { useEffect(() => { if (!modalOpen) return; - if (editingModel) { - form.setFieldsValue({ - ...editingModel, - extra_params: JSON.stringify(editingModel.extra_params, null, 2), - api_key: "", - }); - } else { - form.resetFields(); - form.setFieldsValue({ provider: "openai", is_enabled: true, extra_params: "{}" }); - } + // 延迟确保 Form DOM 已渲染 + const timer = setTimeout(() => { + if (editingModel) { + form.setFieldsValue({ + name: editingModel.name, + provider: editingModel.provider, + endpoint: editingModel.endpoint, + api_key: "", + extra_params: JSON.stringify(editingModel.extra_params, null, 2), + is_enabled: editingModel.is_enabled, + remark: editingModel.remark, + }); + } else { + form.resetFields(); + form.setFieldsValue({ provider: "openai", is_enabled: true, extra_params: "{}" }); + } + }, 0); + return () => clearTimeout(timer); }, [modalOpen, editingModel]); const handleSubmit = async () => { @@ -177,12 +185,11 @@ export default function ModelList() { setModalOpen(false)} + onCancel={() => { setModalOpen(false); form.resetFields(); }} onOk={handleSubmit} width={600} - destroyOnClose > -
+ diff --git a/web/src/pages/TemplateEditor.tsx b/web/src/pages/TemplateEditor.tsx index 7c2e10f..8ac7e49 100644 --- a/web/src/pages/TemplateEditor.tsx +++ b/web/src/pages/TemplateEditor.tsx @@ -124,21 +124,24 @@ export default function TemplateEditor() { useEffect(() => { if (!pointModalOpen) return; - if (editingPoint) { - pointForm.setFieldsValue({ - prompt: editingPoint.prompt, - model_id: editingPoint.model_id, - need_ref_file: editingPoint.need_ref_file, - remark: editingPoint.remark, - }); - } else { - pointForm.resetFields(); - if (selectionRef.current) { + const timer = setTimeout(() => { + if (editingPoint) { pointForm.setFieldsValue({ - prompt: `根据上下文生成关于「${selectionRef.current.text.slice(0, 20)}...」的内容`, + prompt: editingPoint.prompt, + model_id: editingPoint.model_id, + need_ref_file: editingPoint.need_ref_file, + remark: editingPoint.remark, }); + } else { + pointForm.resetFields(); + if (selectionRef.current) { + pointForm.setFieldsValue({ + prompt: `根据上下文生成关于「${selectionRef.current.text.slice(0, 20)}...」的内容`, + }); + } } - } + }, 0); + return () => clearTimeout(timer); }, [pointModalOpen]); const handlePointSubmit = async () => { @@ -478,12 +481,11 @@ export default function TemplateEditor() { setPointModalOpen(false)} + onCancel={() => { setPointModalOpen(false); pointForm.resetFields(); }} onOk={handlePointSubmit} width={560} - destroyOnClose > - + {selectionRef.current && !editingPoint && (