From 6c7d4c158fa19123e7bf979ba305d6adb2b52d21 Mon Sep 17 00:00:00 2001 From: farion1231 Date: Wed, 6 Aug 2025 15:20:08 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=BC=96=E8=BE=91=E5=90=8E?= =?UTF-8?q?=E8=BE=93=E5=85=A5=E6=A1=86=E6=97=A0=E6=B3=95=E9=80=89=E4=B8=AD?= =?UTF-8?q?=E7=9A=84=E7=84=A6=E7=82=B9=E7=AE=A1=E7=90=86=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除阻塞式alert调用,避免焦点管理冲突 - 清理不必要的CSS z-index层级设置 - 优化EditProviderModal的useEffect依赖管理 - 改用console日志记录操作结果 问题原因:alert()强制抢夺焦点,在模态框关闭时打断正常焦点流转 --- src/renderer/App.tsx | 16 ++++++++++++---- src/renderer/components/AddProviderModal.css | 3 --- src/renderer/components/EditProviderModal.tsx | 10 +++++----- 3 files changed, 17 insertions(+), 12 deletions(-) diff --git a/src/renderer/App.tsx b/src/renderer/App.tsx index 9c67591..9a98aeb 100644 --- a/src/renderer/App.tsx +++ b/src/renderer/App.tsx @@ -58,9 +58,10 @@ function App() { const success = await window.electronAPI.switchProvider(id) if (success) { setCurrentProviderId(id) - alert('切换成功!') + // 移除阻塞式alert + console.log('供应商切换成功') } else { - alert('切换失败,请检查配置') + console.error('切换失败,请检查配置') } } @@ -69,10 +70,17 @@ function App() { await window.electronAPI.updateProvider(provider) await loadProviders() setEditingProviderId(null) - alert('保存成功!') + // 移除阻塞式alert,避免焦点管理问题 + setTimeout(() => { + console.log('供应商更新成功') + }, 100) } catch (error) { console.error('更新供应商失败:', error) - alert('保存失败,请重试') + setEditingProviderId(null) + // 错误情况下也避免alert + setTimeout(() => { + console.error('保存失败,请重试') + }, 100) } } diff --git a/src/renderer/components/AddProviderModal.css b/src/renderer/components/AddProviderModal.css index 22ee112..4c10017 100644 --- a/src/renderer/components/AddProviderModal.css +++ b/src/renderer/components/AddProviderModal.css @@ -81,8 +81,6 @@ border-radius: 4px; font-size: 0.95rem; transition: border-color 0.2s; - position: relative; - z-index: 1; background: white; } @@ -152,7 +150,6 @@ justify-content: center; width: 32px; height: 32px; - z-index: 2; } .password-toggle svg { diff --git a/src/renderer/components/EditProviderModal.tsx b/src/renderer/components/EditProviderModal.tsx index 2596f6a..bd56aae 100644 --- a/src/renderer/components/EditProviderModal.tsx +++ b/src/renderer/components/EditProviderModal.tsx @@ -25,7 +25,7 @@ const EditProviderModal: React.FC = ({ provider, onSave, apiKey: provider.apiKey, websiteUrl: provider.websiteUrl || '' }) - }, [provider]) + }, [provider.id, provider.name, provider.apiUrl, provider.apiKey, provider.websiteUrl]) const handleSubmit = (e: React.FormEvent) => { e.preventDefault() @@ -86,7 +86,7 @@ const EditProviderModal: React.FC = ({ provider, onSave, type="text" id="name" name="name" - value={formData.name || ''} + value={formData.name} onChange={handleChange} placeholder="例如:官方 Anthropic" required @@ -100,7 +100,7 @@ const EditProviderModal: React.FC = ({ provider, onSave, type="url" id="apiUrl" name="apiUrl" - value={formData.apiUrl || ''} + value={formData.apiUrl} onChange={handleChange} onBlur={handleApiUrlBlur} placeholder="https://api.anthropic.com" @@ -115,7 +115,7 @@ const EditProviderModal: React.FC = ({ provider, onSave, type="text" id="websiteUrl" name="websiteUrl" - value={formData.websiteUrl || ''} + value={formData.websiteUrl} onChange={handleChange} placeholder="https://example.com(可选)" autoComplete="off" @@ -130,7 +130,7 @@ const EditProviderModal: React.FC = ({ provider, onSave, type={showPassword ? "text" : "password"} id="apiKey" name="apiKey" - value={formData.apiKey || ''} + value={formData.apiKey} onChange={handleChange} placeholder={formData.name && formData.name.includes('YesCode') ? 'cr_...' : 'sk-...'} required