import { useState, useEffect } from 'react'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { api } from '@/lib/api'; export function ConfigForm() { const [form, setForm] = useState({ model: '', baseUrl: '', authToken: '', defaultImageModel: '', defaultVideoModel: '', defaultFormat: '', ossEndpoint: '', ossBucket: '', }); const [saving, setSaving] = useState(false); const [saved, setSaved] = useState(false); useEffect(() => { api.getConfigs().then((list) => { const next = { ...form }; for (const item of list) { try { const v = item.value as Record; if (item.key === 'api_keys') { if (v.ANTHROPIC_MODEL) next.model = v.ANTHROPIC_MODEL; if (v.ANTHROPIC_BASE_URL) next.baseUrl = v.ANTHROPIC_BASE_URL; if (v.ANTHROPIC_AUTH_TOKEN) next.authToken = v.ANTHROPIC_AUTH_TOKEN; } if (item.key === 'defaults') { if (v.imageModel) next.defaultImageModel = v.imageModel; if (v.videoModel) next.defaultVideoModel = v.videoModel; if (v.format) next.defaultFormat = v.format; } if (item.key === 'endpoints') { if (v.ossEndpoint) next.ossEndpoint = v.ossEndpoint; if (v.ossBucket) next.ossBucket = v.ossBucket; } } catch {} } setForm(next); }); }, []); const handleChange = (key: string, value: string) => { setForm((f) => ({ ...f, [key]: value })); }; const handleSave = async () => { setSaving(true); try { await api.saveConfig('api_keys', { ANTHROPIC_MODEL: form.model, ANTHROPIC_BASE_URL: form.baseUrl, ANTHROPIC_AUTH_TOKEN: form.authToken, }); await api.saveConfig('defaults', { imageModel: form.defaultImageModel, videoModel: form.defaultVideoModel, format: form.defaultFormat, }); await api.saveConfig('endpoints', { ossEndpoint: form.ossEndpoint, ossBucket: form.ossBucket, }); setSaved(true); setTimeout(() => setSaved(false), 2000); } catch {} setSaving(false); }; return (

设置

API 配置

handleChange('model', e.target.value)} placeholder="deepseek-v4-pro[1m]" className="mt-1 bg-zinc-50 border-zinc-200" />
handleChange('baseUrl', e.target.value)} placeholder="https://api.deepseek.com/anthropic" className="mt-1 bg-zinc-50 border-zinc-200 font-mono text-xs" />
handleChange('authToken', e.target.value)} type="password" placeholder="sk-..." className="mt-1 bg-zinc-50 border-zinc-200 font-mono text-xs" />

默认参数

OSS 存储

handleChange('ossEndpoint', e.target.value)} placeholder="https://oss-cn-hangzhou.aliyuncs.com" className="mt-1 bg-zinc-50 border-zinc-200 font-mono text-xs" />
handleChange('ossBucket', e.target.value)} placeholder="my-bucket" className="mt-1 bg-zinc-50 border-zinc-200" />
); }