From cabea3f83a8b6847e52c0a8cf5b30ffbea702202 Mon Sep 17 00:00:00 2001 From: yannyang Date: Mon, 3 Aug 2026 18:35:28 +0800 Subject: [PATCH] fix: change agent model to single --- ...oxDropdown.tsx => ModelSelectDropdown.tsx} | 45 +++++++++-------- .../capability/ModelSettingsCard.tsx | 17 ++++--- src/styles.css | 49 +++++++++++++++++-- 3 files changed, 77 insertions(+), 34 deletions(-) rename src/pages/AgentEditor/components/{ModelCheckboxDropdown.tsx => ModelSelectDropdown.tsx} (53%) diff --git a/src/pages/AgentEditor/components/ModelCheckboxDropdown.tsx b/src/pages/AgentEditor/components/ModelSelectDropdown.tsx similarity index 53% rename from src/pages/AgentEditor/components/ModelCheckboxDropdown.tsx rename to src/pages/AgentEditor/components/ModelSelectDropdown.tsx index f9e0be3..9fb4148 100644 --- a/src/pages/AgentEditor/components/ModelCheckboxDropdown.tsx +++ b/src/pages/AgentEditor/components/ModelSelectDropdown.tsx @@ -1,19 +1,21 @@ import { useState } from 'react'; -import { Button, Checkbox, Dropdown } from 'antd'; +import { Button, Radio, Dropdown } from 'antd'; import { DownOutlined } from '@ant-design/icons'; import { AiModel } from '../../../api'; import { DEFAULT_RH_40X40_GRAY } from '../../../constants'; -interface ModelCheckboxDropdownProps { - value?: string[]; - onChange?: (value: string[]) => void; +interface ModelSelectDropdownProps { + value?: string; + onChange?: (value: string) => void; models: AiModel[]; isMobile?: boolean; } -export default function ModelCheckboxDropdown({ value = [], onChange, models, isMobile = false }: ModelCheckboxDropdownProps) { +export default function ModelSelectDropdown({ value, onChange, models, isMobile = false }: ModelSelectDropdownProps) { const [open, setOpen] = useState(false); - const summary = value.length ? `${value.length} 个已选` : '选择模型'; + + const selectedModel = models.find(m => m.id === value); + const summary = selectedModel ? selectedModel.model_name : '选择模型'; return ( (
e.stopPropagation()}> - onChange?.(checked.map((item) => String(item)))} - className="agent-model-checkbox-group" + onChange={(e) => { + onChange?.(e.target.value); + setOpen(false); // 单选选中后自动关闭 + }} + className="agent-model-radio-group" > {models.map((m) => { const inputPrice = 2 * m.model_ratio; const outputPrice = inputPrice * m.completion_ratio; return ( - -
-
+ +
+
{m.model_name} - {m.model_name} + {m.model_name}
-
+
输入: ${inputPrice.toFixed(2)}/M 输出: ${outputPrice.toFixed(2)}/M
- + ); })} - +
)} > diff --git a/src/pages/AgentEditor/components/capability/ModelSettingsCard.tsx b/src/pages/AgentEditor/components/capability/ModelSettingsCard.tsx index 6fab55b..553be3b 100644 --- a/src/pages/AgentEditor/components/capability/ModelSettingsCard.tsx +++ b/src/pages/AgentEditor/components/capability/ModelSettingsCard.tsx @@ -1,7 +1,7 @@ import { Form, InputNumber } from 'antd'; import { SettingOutlined } from '@ant-design/icons'; import { parseModelSelections } from '../../constants'; -import ModelCheckboxDropdown from '../ModelCheckboxDropdown'; +import ModelSelectDropdown from '../ModelSelectDropdown'; interface ModelSettingsCardProps { models: any[]; @@ -22,17 +22,18 @@ export default function ModelSettingsCard({ models, isMobile = false }: ModelSet required rules={[ { - validator: async (_rule, value) => { - const selected = parseModelSelections(value); - if (selected.length > 0) return; - throw new Error('请选择至少一个模型'); - }, + required: true, + message: '请选择一个模型', }, ]} className="mb-0" - getValueProps={(value) => ({ value: parseModelSelections(value) })} + getValueProps={(value) => { + // 如果后端返回的是数组或 JSON 字符串,取第一个作为单选值 + const selected = parseModelSelections(value); + return { value: selected[0] || '' }; + }} > - +