feat: improve custom provider configuration UX

- Show API key input field for custom mode
- Initialize default custom mode with JSON template on modal open
- Change default API key from placeholder to empty string
- Remove Save icon from submit button for cleaner UI
- Ensure consistent behavior between default and manually selected custom mode
This commit is contained in:
Jason
2025-09-12 15:20:49 +08:00
parent 876605e983
commit 687c7de111

View File

@@ -15,7 +15,7 @@ import ApiKeyInput from "./ProviderForm/ApiKeyInput";
import ClaudeConfigEditor from "./ProviderForm/ClaudeConfigEditor"; import ClaudeConfigEditor from "./ProviderForm/ClaudeConfigEditor";
import CodexConfigEditor from "./ProviderForm/CodexConfigEditor"; import CodexConfigEditor from "./ProviderForm/CodexConfigEditor";
import KimiModelSelector from "./ProviderForm/KimiModelSelector"; import KimiModelSelector from "./ProviderForm/KimiModelSelector";
import { X, AlertCircle, Save } from "lucide-react"; import { X, AlertCircle } from "lucide-react";
// 分类仅用于控制少量交互(如官方禁用 API Key不显示介绍组件 // 分类仅用于控制少量交互(如官方禁用 API Key不显示介绍组件
interface ProviderFormProps { interface ProviderFormProps {
@@ -95,6 +95,28 @@ const ProviderForm: React.FC<ProviderFormProps> = ({
const [kimiAnthropicModel, setKimiAnthropicModel] = useState(""); const [kimiAnthropicModel, setKimiAnthropicModel] = useState("");
const [kimiAnthropicSmallFastModel, setKimiAnthropicSmallFastModel] = const [kimiAnthropicSmallFastModel, setKimiAnthropicSmallFastModel] =
useState(""); useState("");
// 初始化自定义模式的默认配置
useEffect(() => {
if (showPresets && selectedPreset === -1 && !initialData && formData.settingsConfig === "") {
// 设置自定义模板
const customTemplate = {
env: {
ANTHROPIC_BASE_URL: "https://your-api-endpoint.com",
ANTHROPIC_AUTH_TOKEN: "",
// 可选配置
// ANTHROPIC_MODEL: "your-model-name",
// ANTHROPIC_SMALL_FAST_MODEL: "your-fast-model-name"
}
};
setFormData(prev => ({
...prev,
settingsConfig: JSON.stringify(customTemplate, null, 2),
}));
setApiKey("");
}
}, []); // 只在组件挂载时执行一次
// 初始化时检查禁用签名状态 // 初始化时检查禁用签名状态
useEffect(() => { useEffect(() => {
@@ -303,7 +325,7 @@ const ProviderForm: React.FC<ProviderFormProps> = ({
const customTemplate = { const customTemplate = {
env: { env: {
ANTHROPIC_BASE_URL: "https://your-api-endpoint.com", ANTHROPIC_BASE_URL: "https://your-api-endpoint.com",
ANTHROPIC_AUTH_TOKEN: "sk-your-api-key-here", ANTHROPIC_AUTH_TOKEN: "",
// 可选配置 // 可选配置
// ANTHROPIC_MODEL: "your-model-name", // ANTHROPIC_MODEL: "your-model-name",
// ANTHROPIC_SMALL_FAST_MODEL: "your-fast-model-name" // ANTHROPIC_SMALL_FAST_MODEL: "your-fast-model-name"
@@ -315,7 +337,7 @@ const ProviderForm: React.FC<ProviderFormProps> = ({
websiteUrl: "", websiteUrl: "",
settingsConfig: JSON.stringify(customTemplate, null, 2), settingsConfig: JSON.stringify(customTemplate, null, 2),
}); });
setApiKey("sk-your-api-key-here"); setApiKey("");
setDisableCoAuthored(false); setDisableCoAuthored(false);
setClaudeModel(""); setClaudeModel("");
setClaudeSmallFastModel(""); setClaudeSmallFastModel("");
@@ -394,9 +416,9 @@ const ProviderForm: React.FC<ProviderFormProps> = ({
}; };
// 根据当前配置决定是否展示 API Key 输入框 // 根据当前配置决定是否展示 API Key 输入框
// 自定义模式(-1)不显示独立的 API Key 输入框 // 自定义模式(-1)也需要显示 API Key 输入框
const showApiKey = const showApiKey =
(selectedPreset !== null && selectedPreset !== -1) || (selectedPreset !== null) ||
(!showPresets && hasApiKeyField(formData.settingsConfig)); (!showPresets && hasApiKeyField(formData.settingsConfig));
// 判断当前选中的预设是否是官方 // 判断当前选中的预设是否是官方
@@ -760,9 +782,8 @@ const ProviderForm: React.FC<ProviderFormProps> = ({
</button> </button>
<button <button
type="submit" type="submit"
className="inline-flex items-center gap-2 px-4 py-2 bg-blue-500 text-white rounded-lg hover:bg-blue-600 transition-colors text-sm font-medium" className="px-4 py-2 bg-blue-500 text-white rounded-lg hover:bg-blue-600 transition-colors text-sm font-medium"
> >
<Save size={16} />
{submitText} {submitText}
</button> </button>
</div> </div>