import { useState, useEffect } from 'react' import { Provider } from '../shared/types' import ProviderList from './components/ProviderList' import AddProviderModal from './components/AddProviderModal' import EditProviderModal from './components/EditProviderModal' import './App.css' function App() { const [providers, setProviders] = useState>({}) const [currentProviderId, setCurrentProviderId] = useState('') const [isAddModalOpen, setIsAddModalOpen] = useState(false) const [configPath, setConfigPath] = useState('') const [editingProviderId, setEditingProviderId] = useState(null) // 加载供应商列表 useEffect(() => { loadProviders() loadConfigPath() }, []) const loadProviders = async () => { const loadedProviders = await window.electronAPI.getProviders() const currentId = await window.electronAPI.getCurrentProvider() setProviders(loadedProviders) setCurrentProviderId(currentId) } const loadConfigPath = async () => { const path = await window.electronAPI.getClaudeCodeConfigPath() setConfigPath(path) } // 生成唯一ID const generateId = () => { return Date.now().toString(36) + Math.random().toString(36).substr(2, 9) } const handleAddProvider = async (provider: Omit) => { const newProvider: Provider = { ...provider, id: generateId() } await window.electronAPI.addProvider(newProvider) await loadProviders() setIsAddModalOpen(false) } const handleDeleteProvider = async (id: string) => { if (confirm('确定要删除这个供应商吗?')) { await window.electronAPI.deleteProvider(id) await loadProviders() } } const handleSwitchProvider = async (id: string) => { const success = await window.electronAPI.switchProvider(id) if (success) { setCurrentProviderId(id) alert('切换成功!') } else { alert('切换失败,请检查配置') } } const handleEditProvider = async (provider: Provider) => { try { await window.electronAPI.updateProvider(provider) await loadProviders() setEditingProviderId(null) alert('保存成功!') } catch (error) { console.error('更新供应商失败:', error) alert('保存失败,请重试') } } const handleSelectConfigFile = async () => { const selectedPath = await window.electronAPI.selectConfigFile() if (selectedPath) { setConfigPath(selectedPath) } } return (

Claude Code 供应商切换器

{configPath && (
配置文件位置: {configPath}
)}
{isAddModalOpen && ( setIsAddModalOpen(false)} /> )} {editingProviderId && providers[editingProviderId] && ( setEditingProviderId(null)} /> )}
) } export default App