优化用户体验:简化数据结构并改进文件夹访问
- 移除 Provider 中无用的 createdAt 和 updatedAt 字段 - 简化数据结构,去除冗余的时间戳设置代码 - 将底部"浏览"按钮改为"打开",直接打开配置文件夹 - 新增 openConfigFolder API,使用 shell.openPath 打开文件夹 - 优化用户体验,方便用户查看和管理所有配置文件
This commit is contained in:
@@ -76,11 +76,7 @@ ipcMain.handle("addProvider", async (_, provider: Provider) => {
|
|||||||
|
|
||||||
// 2. 更新应用配置
|
// 2. 更新应用配置
|
||||||
const providers = store.get("providers", {} as Record<string, Provider>);
|
const providers = store.get("providers", {} as Record<string, Provider>);
|
||||||
providers[provider.id] = {
|
providers[provider.id] = provider;
|
||||||
...provider,
|
|
||||||
createdAt: Date.now(),
|
|
||||||
updatedAt: Date.now(),
|
|
||||||
};
|
|
||||||
await store.set("providers", providers);
|
await store.set("providers", providers);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@@ -150,19 +146,13 @@ ipcMain.handle("updateProvider", async (_, provider: Provider) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 2. 保存更新后的配置到文件
|
// 2. 保存更新后的配置到文件
|
||||||
const saveSuccess = await saveProviderConfig({
|
const saveSuccess = await saveProviderConfig(provider);
|
||||||
...provider,
|
|
||||||
updatedAt: Date.now(),
|
|
||||||
});
|
|
||||||
if (!saveSuccess) {
|
if (!saveSuccess) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3. 更新应用配置
|
// 3. 更新应用配置
|
||||||
providers[provider.id] = {
|
providers[provider.id] = provider;
|
||||||
...provider,
|
|
||||||
updatedAt: Date.now(),
|
|
||||||
};
|
|
||||||
await store.set("providers", providers);
|
await store.set("providers", providers);
|
||||||
|
|
||||||
// 4. 如果编辑的是当前激活的供应商,需要重新切换以应用更改
|
// 4. 如果编辑的是当前激活的供应商,需要重新切换以应用更改
|
||||||
@@ -261,6 +251,17 @@ ipcMain.handle("selectConfigFile", async () => {
|
|||||||
return result.filePaths[0];
|
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) => {
|
ipcMain.handle("openExternal", async (_, url: string) => {
|
||||||
try {
|
try {
|
||||||
await shell.openExternal(url);
|
await shell.openExternal(url);
|
||||||
|
|||||||
@@ -11,5 +11,6 @@ contextBridge.exposeInMainWorld('electronAPI', {
|
|||||||
importCurrentConfigAsDefault: () => ipcRenderer.invoke('importCurrentConfigAsDefault'),
|
importCurrentConfigAsDefault: () => ipcRenderer.invoke('importCurrentConfigAsDefault'),
|
||||||
getClaudeCodeConfigPath: () => ipcRenderer.invoke('getClaudeCodeConfigPath'),
|
getClaudeCodeConfigPath: () => ipcRenderer.invoke('getClaudeCodeConfigPath'),
|
||||||
selectConfigFile: () => ipcRenderer.invoke('selectConfigFile'),
|
selectConfigFile: () => ipcRenderer.invoke('selectConfigFile'),
|
||||||
|
openConfigFolder: () => ipcRenderer.invoke('openConfigFolder'),
|
||||||
openExternal: (url: string) => ipcRenderer.invoke('openExternal', url)
|
openExternal: (url: string) => ipcRenderer.invoke('openExternal', url)
|
||||||
})
|
})
|
||||||
@@ -149,8 +149,6 @@ export async function importCurrentConfigAsDefault(): Promise<{ success: boolean
|
|||||||
id: "default",
|
id: "default",
|
||||||
name: "默认",
|
name: "默认",
|
||||||
settingsConfig: settingsConfig,
|
settingsConfig: settingsConfig,
|
||||||
createdAt: Date.now(),
|
|
||||||
updatedAt: Date.now(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// 保存默认供应商的配置到独立文件
|
// 保存默认供应商的配置到独立文件
|
||||||
|
|||||||
@@ -160,11 +160,8 @@ function App() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleSelectConfigFile = async () => {
|
const handleOpenConfigFolder = async () => {
|
||||||
const selectedPath = await window.electronAPI.selectConfigFile();
|
await window.electronAPI.openConfigFolder();
|
||||||
if (selectedPath) {
|
|
||||||
setConfigPath(selectedPath);
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@@ -207,10 +204,10 @@ function App() {
|
|||||||
<span>配置文件位置: {configPath}</span>
|
<span>配置文件位置: {configPath}</span>
|
||||||
<button
|
<button
|
||||||
className="browse-btn"
|
className="browse-btn"
|
||||||
onClick={handleSelectConfigFile}
|
onClick={handleOpenConfigFolder}
|
||||||
title="浏览选择配置文件"
|
title="打开配置文件夹"
|
||||||
>
|
>
|
||||||
浏览
|
打开
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|||||||
@@ -53,7 +53,6 @@ const EditProviderModal: React.FC<EditProviderModalProps> = ({ provider, onSave,
|
|||||||
name: formData.name,
|
name: formData.name,
|
||||||
websiteUrl: formData.websiteUrl,
|
websiteUrl: formData.websiteUrl,
|
||||||
settingsConfig,
|
settingsConfig,
|
||||||
updatedAt: Date.now()
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,8 +3,6 @@ export interface Provider {
|
|||||||
name: string
|
name: string
|
||||||
settingsConfig: object // 完整的Claude Code settings.json配置
|
settingsConfig: object // 完整的Claude Code settings.json配置
|
||||||
websiteUrl?: string
|
websiteUrl?: string
|
||||||
createdAt?: number
|
|
||||||
updatedAt?: number
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface AppConfig {
|
export interface AppConfig {
|
||||||
@@ -21,9 +19,10 @@ declare global {
|
|||||||
deleteProvider: (id: string) => Promise<boolean>
|
deleteProvider: (id: string) => Promise<boolean>
|
||||||
updateProvider: (provider: Provider) => Promise<boolean>
|
updateProvider: (provider: Provider) => Promise<boolean>
|
||||||
switchProvider: (providerId: string) => Promise<boolean>
|
switchProvider: (providerId: string) => Promise<boolean>
|
||||||
importCurrentConfig: (name: string) => Promise<{ success: boolean; providerId?: string }>
|
importCurrentConfigAsDefault: () => Promise<{ success: boolean; providerId?: string }>
|
||||||
getClaudeCodeConfigPath: () => Promise<string>
|
getClaudeCodeConfigPath: () => Promise<string>
|
||||||
selectConfigFile: () => Promise<string | null>
|
selectConfigFile: () => Promise<string | null>
|
||||||
|
openConfigFolder: () => Promise<boolean>
|
||||||
openExternal: (url: string) => Promise<boolean>
|
openExternal: (url: string) => Promise<boolean>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user