import React, { useState } from "react"; import { Provider } from "../../shared/types"; import { updateCoAuthoredSetting, checkCoAuthoredSetting, extractWebsiteUrl } from "../utils/providerConfigUtils"; import "./AddProviderModal.css"; interface AddProviderModalProps { onAdd: (provider: Omit) => void; onClose: () => void; } const AddProviderModal: React.FC = ({ onAdd, onClose, }) => { const [formData, setFormData] = useState({ name: "", websiteUrl: "", settingsConfig: "" }); const [error, setError] = useState(""); const [disableCoAuthored, setDisableCoAuthored] = useState(false); // 预设的供应商配置模板 const presets = [ { name: "Anthropic 官方", websiteUrl: "https://console.anthropic.com", settingsConfig: { "env": { "ANTHROPIC_BASE_URL": "https://api.anthropic.com", "ANTHROPIC_AUTH_TOKEN": "sk-your-api-key-here" } } }, { name: "PackyCode", websiteUrl: "https://www.packycode.com", settingsConfig: { "env": { "ANTHROPIC_BASE_URL": "https://api.packycode.com", "ANTHROPIC_AUTH_TOKEN": "sk-your-api-key-here" } } }, { name: "YesCode", websiteUrl: "https://yes.vg", settingsConfig: { "env": { "ANTHROPIC_BASE_URL": "https://co.yes.vg", "ANTHROPIC_AUTH_TOKEN": "cr-your-api-key-here" } } } ]; const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); setError(""); if (!formData.name) { setError("请填写供应商名称"); return; } if (!formData.settingsConfig.trim()) { setError("请填写配置内容"); return; } let settingsConfig: object; try { settingsConfig = JSON.parse(formData.settingsConfig); } catch (err) { setError("配置JSON格式错误,请检查语法"); return; } onAdd({ name: formData.name, websiteUrl: formData.websiteUrl, settingsConfig }); }; const handleChange = ( e: React.ChangeEvent ) => { const { name, value } = e.target; if (name === 'settingsConfig') { // 当用户修改配置时,尝试自动提取官网地址 const extractedWebsiteUrl = extractWebsiteUrl(value); // 同时检查并同步选择框状态 const hasCoAuthoredDisabled = checkCoAuthoredSetting(value); setDisableCoAuthored(hasCoAuthoredDisabled); setFormData({ ...formData, [name]: value, // 只有在官网地址为空时才自动填入 websiteUrl: formData.websiteUrl || extractedWebsiteUrl, }); } else { setFormData({ ...formData, [name]: value, }); } }; // 处理选择框变化 const handleCoAuthoredToggle = (checked: boolean) => { setDisableCoAuthored(checked); // 更新JSON配置 const updatedConfig = updateCoAuthoredSetting(formData.settingsConfig, checked); setFormData({ ...formData, settingsConfig: updatedConfig, }); }; const applyPreset = (preset: typeof presets[0]) => { const configString = JSON.stringify(preset.settingsConfig, null, 2); setFormData({ name: preset.name, websiteUrl: preset.websiteUrl, settingsConfig: configString }); // 同步选择框状态 const hasCoAuthoredDisabled = checkCoAuthoredSetting(configString); setDisableCoAuthored(hasCoAuthoredDisabled); }; return (

添加新供应商

{error &&
{error}
}
{presets.map((preset, index) => ( ))}