import React from "react"; import { Provider } from "../types"; import { AppType } from "../lib/tauri-api"; import "./ProviderList.css"; interface ProviderListProps { providers: Record; currentProviderId: string; onSwitch: (id: string) => void; onDelete: (id: string) => void; onEdit: (id: string) => void; appType?: AppType; } const ProviderList: React.FC = ({ providers, currentProviderId, onSwitch, onDelete, onEdit, appType = "claude", }) => { // 提取API地址 const getApiUrl = (provider: Provider): string => { try { const config = provider.settingsConfig; // Claude: 显示 ANTHROPIC_BASE_URL if (appType === "claude") { if (config?.env?.ANTHROPIC_BASE_URL) { return config.env.ANTHROPIC_BASE_URL; } return "未设置"; } // Codex: 从 TOML 中提取 base_url 或 model_provider const tomlText: string | undefined = typeof config?.config === "string" ? config.config : undefined; if (!tomlText) return "未设置"; // 简单解析:base_url = "..." const baseUrlMatch = tomlText.match(/base_url\s*=\s*"([^"]+)"/); if (baseUrlMatch && baseUrlMatch[1]) return baseUrlMatch[1]; // 回退:model_provider = "..." const providerMatch = tomlText.match(/model_provider\s*=\s*"([^"]+)"/); if (providerMatch && providerMatch[1]) return `provider: ${providerMatch[1]}`; // 再回退:model = "..." const modelMatch = tomlText.match(/\bmodel\s*=\s*"([^"]+)"/); if (modelMatch && modelMatch[1]) return `model: ${modelMatch[1]}`; return "未设置"; } catch { return "配置错误"; } }; const handleUrlClick = async (url: string) => { try { await window.api.openExternal(url); } catch (error) { console.error("打开链接失败:", error); } }; return (
{Object.values(providers).length === 0 ? (

还没有添加任何供应商

点击右上角的"添加供应商"按钮开始

) : (
{Object.values(providers).map((provider) => { const isCurrent = provider.id === currentProviderId; return (
{provider.name} {isCurrent && ( 当前使用 )}
); })}
)}
); }; export default ProviderList;