From 482298411a4ee5c9e9dc099177848770960b7115 Mon Sep 17 00:00:00 2001 From: farion1231 Date: Fri, 8 Aug 2025 15:03:38 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E9=87=8D=E6=9E=84=EF=BC=9A?= =?UTF-8?q?=E7=A7=BB=E9=99=A4=20any=20=E7=B1=BB=E5=9E=8B=E5=B9=B6=E6=8A=BD?= =?UTF-8?q?=E5=8F=96=E5=85=B1=E4=BA=AB=E8=A1=A8=E5=8D=95=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除所有 any 类型声明,提升类型安全性 - 简化 ClaudeCodeSettings 接口为通用的 Record,支持任意供应商配置 - 创建 ProviderForm 共享组件,减少重复代码约 300 行 - 优化 Store 类型定义,使用泛型约束确保类型安全 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- src/main/index.ts | 2 +- src/main/services.ts | 2 +- src/main/store.ts | 4 +- src/renderer/components/AddProviderModal.tsx | 198 +--------------- src/renderer/components/EditProviderModal.tsx | 181 +------------- src/renderer/components/ProviderForm.tsx | 223 ++++++++++++++++++ src/renderer/components/ProviderList.tsx | 2 +- src/shared/types.ts | 2 +- 8 files changed, 250 insertions(+), 364 deletions(-) create mode 100644 src/renderer/components/ProviderForm.tsx diff --git a/src/main/index.ts b/src/main/index.ts index 79f9a82..953a657 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -223,7 +223,7 @@ ipcMain.handle("importCurrentConfigAsDefault", async () => { } return result; - } catch (error: any) { + } catch (error) { console.error("导入默认配置失败:", error); return { success: false }; } diff --git a/src/main/services.ts b/src/main/services.ts index b192e34..84081fa 100644 --- a/src/main/services.ts +++ b/src/main/services.ts @@ -159,7 +159,7 @@ export async function importCurrentConfigAsDefault(): Promise<{ success: boolean console.log(`已导入当前配置为默认供应商,配置文件:settings-default.json`); return { success: true, provider }; - } catch (error: any) { + } catch (error) { console.error("导入默认配置失败:", error); return { success: false }; } diff --git a/src/main/store.ts b/src/main/store.ts index 322cd5a..056fa9b 100644 --- a/src/main/store.ts +++ b/src/main/store.ts @@ -41,8 +41,8 @@ export class SimpleStore { return value !== undefined ? value : (defaultValue as T) } - async set(key: keyof AppConfig, value: T): Promise { - this.data[key] = value as any + async set(key: K, value: AppConfig[K]): Promise { + this.data[key] = value await this.saveData() } diff --git a/src/renderer/components/AddProviderModal.tsx b/src/renderer/components/AddProviderModal.tsx index dbe5c8d..93ef545 100644 --- a/src/renderer/components/AddProviderModal.tsx +++ b/src/renderer/components/AddProviderModal.tsx @@ -1,8 +1,6 @@ -import React, { useState } from "react"; +import React from "react"; import { Provider } from "../../shared/types"; -import { updateCoAuthoredSetting, checkCoAuthoredSetting, extractWebsiteUrl } from "../utils/providerConfigUtils"; -import { providerPresets } from "../config/providerPresets"; -import "./AddProviderModal.css"; +import ProviderForm from "./ProviderForm"; interface AddProviderModalProps { onAdd: (provider: Omit) => void; @@ -13,192 +11,14 @@ const AddProviderModal: React.FC = ({ onAdd, onClose, }) => { - const [formData, setFormData] = useState({ - name: "", - websiteUrl: "", - settingsConfig: "" - }); - const [error, setError] = useState(""); - const [disableCoAuthored, setDisableCoAuthored] = useState(false); - - // 预设的供应商配置模板 - const presets = providerPresets; - - const handleSubmit = (e: React.FormEvent) => { - e.preventDefault(); - setError(""); - - if (!formData.name) { - setError("请填写供应商名称"); - return; - } - - if (!formData.settingsConfig.trim()) { - setError("请填写配置内容"); - return; - } - - let settingsConfig: object; - - try { - settingsConfig = JSON.parse(formData.settingsConfig); - } catch (err) { - setError("配置JSON格式错误,请检查语法"); - return; - } - - onAdd({ - name: formData.name, - websiteUrl: formData.websiteUrl, - settingsConfig - }); - }; - - const handleChange = ( - e: React.ChangeEvent - ) => { - const { name, value } = e.target; - - if (name === 'settingsConfig') { - // 当用户修改配置时,尝试自动提取官网地址 - const extractedWebsiteUrl = extractWebsiteUrl(value); - - // 同时检查并同步选择框状态 - const hasCoAuthoredDisabled = checkCoAuthoredSetting(value); - setDisableCoAuthored(hasCoAuthoredDisabled); - - setFormData({ - ...formData, - [name]: value, - // 只有在官网地址为空时才自动填入 - websiteUrl: formData.websiteUrl || extractedWebsiteUrl, - }); - } else { - setFormData({ - ...formData, - [name]: value, - }); - } - }; - - // 处理选择框变化 - const handleCoAuthoredToggle = (checked: boolean) => { - setDisableCoAuthored(checked); - - // 更新JSON配置 - const updatedConfig = updateCoAuthoredSetting(formData.settingsConfig, checked); - setFormData({ - ...formData, - settingsConfig: updatedConfig, - }); - }; - - const applyPreset = (preset: typeof presets[0]) => { - const configString = JSON.stringify(preset.settingsConfig, null, 2); - - setFormData({ - name: preset.name, - websiteUrl: preset.websiteUrl, - settingsConfig: configString - }); - - // 同步选择框状态 - const hasCoAuthoredDisabled = checkCoAuthoredSetting(configString); - setDisableCoAuthored(hasCoAuthoredDisabled); - }; - return ( -
-
-

添加新供应商

- - {error &&
{error}
} - -
- -
- {presets.map((preset, index) => ( - - ))} -
-
- -
-
- - -
- -
- - -
- -
-
- - -
-