feat: enhance Codex provider configuration wizard with display name field

- Add separate display name field for provider (supports Chinese)
- Keep provider code field for internal identifier (English only)
- Add onNameChange callback to update provider name from wizard
- Improve code formatting consistency in ProviderForm
This commit is contained in:
farion1231
2025-09-21 20:37:01 +08:00
parent d041ea7a56
commit 615c431875
2 changed files with 89 additions and 49 deletions

View File

@@ -39,6 +39,8 @@ interface CodexConfigEditorProps {
isTemplateModalOpen?: boolean; // 新增:模态框状态
setIsTemplateModalOpen?: (open: boolean) => void; // 新增:设置模态框状态
onNameChange?: (name: string) => void; // 新增:更新供应商名称回调
}
const CodexConfigEditor: React.FC<CodexConfigEditorProps> = ({
@@ -66,6 +68,8 @@ const CodexConfigEditor: React.FC<CodexConfigEditorProps> = ({
onWebsiteUrlChange,
onNameChange,
isTemplateModalOpen: externalTemplateModalOpen,
setIsTemplateModalOpen: externalSetTemplateModalOpen,
@@ -100,6 +104,8 @@ const CodexConfigEditor: React.FC<CodexConfigEditorProps> = ({
// 移除自动填充逻辑,因为现在在点击自定义按钮时就已经填充
const [templateDisplayName, setTemplateDisplayName] = useState("");
useEffect(() => {
if (commonConfigError && !isCommonConfigModalOpen) {
setIsCommonConfigModalOpen(true);
@@ -175,6 +181,13 @@ const CodexConfigEditor: React.FC<CodexConfigEditorProps> = ({
}
}
if (onNameChange) {
const trimmedName = templateDisplayName.trim();
if (trimmedName) {
onNameChange(trimmedName);
}
}
setTemplateApiKey("");
setTemplateProviderName("");
@@ -185,6 +198,8 @@ const CodexConfigEditor: React.FC<CodexConfigEditorProps> = ({
setTemplateModelName("gpt-5-codex");
setTemplateDisplayName("");
closeTemplateModal();
};
@@ -228,13 +243,7 @@ const CodexConfigEditor: React.FC<CodexConfigEditorProps> = ({
onChange={(e) => handleAuthChange(e.target.value)}
onBlur={onAuthBlur}
placeholder={`{
"OPENAI_API_KEY": "sk-your-api-key-here"
}`}
rows={6}
required
@@ -383,6 +392,30 @@ const CodexConfigEditor: React.FC<CodexConfigEditorProps> = ({
</label>
<input
type="text"
value={templateDisplayName}
onChange={(e) => {
setTemplateDisplayName(e.target.value);
if (onNameChange) {
onNameChange(e.target.value);
}
}}
onKeyDown={handleTemplateInputKeyDown}
placeholder="例如Codex 官方(可选)"
className="w-full rounded-lg border border-gray-200 px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-700 dark:bg-gray-800 dark:text-gray-100"
/>
<p className="mt-1 text-xs text-gray-500 dark:text-gray-400">
使
</p>
</div>
<div>
<label className="mb-1 block text-sm font-medium text-gray-900 dark:text-gray-100">
</label>
<input
type="text"
value={templateProviderName}
@@ -496,7 +529,6 @@ const CodexConfigEditor: React.FC<CodexConfigEditorProps> = ({
</div>
</div>
)}
</div>
<div className="flex items-center justify-end gap-3 border-t border-gray-200 bg-gray-100 p-6 dark:border-gray-800 dark:bg-gray-800">