diff --git a/src/main/index.ts b/src/main/index.ts index 39306fe..6e7d0ea 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -76,11 +76,7 @@ ipcMain.handle("addProvider", async (_, provider: Provider) => { // 2. 更新应用配置 const providers = store.get("providers", {} as Record); - providers[provider.id] = { - ...provider, - createdAt: Date.now(), - updatedAt: Date.now(), - }; + providers[provider.id] = provider; await store.set("providers", providers); return true; @@ -150,19 +146,13 @@ ipcMain.handle("updateProvider", async (_, provider: Provider) => { } // 2. 保存更新后的配置到文件 - const saveSuccess = await saveProviderConfig({ - ...provider, - updatedAt: Date.now(), - }); + const saveSuccess = await saveProviderConfig(provider); if (!saveSuccess) { return false; } // 3. 更新应用配置 - providers[provider.id] = { - ...provider, - updatedAt: Date.now(), - }; + providers[provider.id] = provider; await store.set("providers", providers); // 4. 如果编辑的是当前激活的供应商,需要重新切换以应用更改 @@ -261,6 +251,17 @@ ipcMain.handle("selectConfigFile", async () => { return result.filePaths[0]; }); +ipcMain.handle("openConfigFolder", async () => { + try { + const { dir } = getClaudeCodeConfig(); + await shell.openPath(dir); + return true; + } catch (error) { + console.error("打开配置文件夹失败:", error); + return false; + } +}); + ipcMain.handle("openExternal", async (_, url: string) => { try { await shell.openExternal(url); diff --git a/src/main/preload.ts b/src/main/preload.ts index 8e25ec0..0f8b982 100644 --- a/src/main/preload.ts +++ b/src/main/preload.ts @@ -11,5 +11,6 @@ contextBridge.exposeInMainWorld('electronAPI', { importCurrentConfigAsDefault: () => ipcRenderer.invoke('importCurrentConfigAsDefault'), getClaudeCodeConfigPath: () => ipcRenderer.invoke('getClaudeCodeConfigPath'), selectConfigFile: () => ipcRenderer.invoke('selectConfigFile'), + openConfigFolder: () => ipcRenderer.invoke('openConfigFolder'), openExternal: (url: string) => ipcRenderer.invoke('openExternal', url) }) \ No newline at end of file diff --git a/src/main/services.ts b/src/main/services.ts index f06542d..2a9bb26 100644 --- a/src/main/services.ts +++ b/src/main/services.ts @@ -149,8 +149,6 @@ export async function importCurrentConfigAsDefault(): Promise<{ success: boolean id: "default", name: "默认", settingsConfig: settingsConfig, - createdAt: Date.now(), - updatedAt: Date.now(), }; // 保存默认供应商的配置到独立文件 diff --git a/src/renderer/App.tsx b/src/renderer/App.tsx index fc0bb56..2ae8aa1 100644 --- a/src/renderer/App.tsx +++ b/src/renderer/App.tsx @@ -160,11 +160,8 @@ function App() { } } - const handleSelectConfigFile = async () => { - const selectedPath = await window.electronAPI.selectConfigFile(); - if (selectedPath) { - setConfigPath(selectedPath); - } + const handleOpenConfigFolder = async () => { + await window.electronAPI.openConfigFolder(); }; return ( @@ -207,10 +204,10 @@ function App() { 配置文件位置: {configPath} )} diff --git a/src/renderer/components/EditProviderModal.tsx b/src/renderer/components/EditProviderModal.tsx index bf598c0..7d1f738 100644 --- a/src/renderer/components/EditProviderModal.tsx +++ b/src/renderer/components/EditProviderModal.tsx @@ -53,7 +53,6 @@ const EditProviderModal: React.FC = ({ provider, onSave, name: formData.name, websiteUrl: formData.websiteUrl, settingsConfig, - updatedAt: Date.now() }) } diff --git a/src/shared/types.ts b/src/shared/types.ts index 5ac6abe..6e1b4b1 100644 --- a/src/shared/types.ts +++ b/src/shared/types.ts @@ -3,8 +3,6 @@ export interface Provider { name: string settingsConfig: object // 完整的Claude Code settings.json配置 websiteUrl?: string - createdAt?: number - updatedAt?: number } export interface AppConfig { @@ -21,9 +19,10 @@ declare global { deleteProvider: (id: string) => Promise updateProvider: (provider: Provider) => Promise switchProvider: (providerId: string) => Promise - importCurrentConfig: (name: string) => Promise<{ success: boolean; providerId?: string }> + importCurrentConfigAsDefault: () => Promise<{ success: boolean; providerId?: string }> getClaudeCodeConfigPath: () => Promise selectConfigFile: () => Promise + openConfigFolder: () => Promise openExternal: (url: string) => Promise } }