优化用户体验:简化数据结构并改进文件夹访问
- 移除 Provider 中无用的 createdAt 和 updatedAt 字段 - 简化数据结构,去除冗余的时间戳设置代码 - 将底部"浏览"按钮改为"打开",直接打开配置文件夹 - 新增 openConfigFolder API,使用 shell.openPath 打开文件夹 - 优化用户体验,方便用户查看和管理所有配置文件
This commit is contained in:
@@ -76,11 +76,7 @@ ipcMain.handle("addProvider", async (_, provider: Provider) => {
|
||||
|
||||
// 2. 更新应用配置
|
||||
const providers = store.get("providers", {} as Record<string, Provider>);
|
||||
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);
|
||||
|
||||
@@ -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)
|
||||
})
|
||||
@@ -149,8 +149,6 @@ export async function importCurrentConfigAsDefault(): Promise<{ success: boolean
|
||||
id: "default",
|
||||
name: "默认",
|
||||
settingsConfig: settingsConfig,
|
||||
createdAt: Date.now(),
|
||||
updatedAt: Date.now(),
|
||||
};
|
||||
|
||||
// 保存默认供应商的配置到独立文件
|
||||
|
||||
@@ -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() {
|
||||
<span>配置文件位置: {configPath}</span>
|
||||
<button
|
||||
className="browse-btn"
|
||||
onClick={handleSelectConfigFile}
|
||||
title="浏览选择配置文件"
|
||||
onClick={handleOpenConfigFolder}
|
||||
title="打开配置文件夹"
|
||||
>
|
||||
浏览
|
||||
打开
|
||||
</button>
|
||||
</div>
|
||||
)}
|
||||
|
||||
@@ -53,7 +53,6 @@ const EditProviderModal: React.FC<EditProviderModalProps> = ({ provider, onSave,
|
||||
name: formData.name,
|
||||
websiteUrl: formData.websiteUrl,
|
||||
settingsConfig,
|
||||
updatedAt: Date.now()
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
@@ -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<boolean>
|
||||
updateProvider: (provider: Provider) => Promise<boolean>
|
||||
switchProvider: (providerId: string) => Promise<boolean>
|
||||
importCurrentConfig: (name: string) => Promise<{ success: boolean; providerId?: string }>
|
||||
importCurrentConfigAsDefault: () => Promise<{ success: boolean; providerId?: string }>
|
||||
getClaudeCodeConfigPath: () => Promise<string>
|
||||
selectConfigFile: () => Promise<string | null>
|
||||
openConfigFolder: () => Promise<boolean>
|
||||
openExternal: (url: string) => Promise<boolean>
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user