import { DynamicFormItemType, IDynamicFormItemSchema, } from '@/app/infra/entities/form/dynamic'; import { Input } from '@/components/ui/input'; import { Select, SelectContent, SelectGroup, SelectItem, SelectTrigger, SelectValue, } from '@/components/ui/select'; import { Switch } from '@/components/ui/switch'; import { ControllerRenderProps } from 'react-hook-form'; import { Button } from '@/components/ui/button'; import { use, useEffect, useState } from 'react'; import { httpClient } from '@/app/infra/http/HttpClient'; import { LLMModel } from '@/app/infra/entities/api'; import { KnowledgeBase } from '@/app/infra/entities/api'; import { toast } from 'sonner'; import { HoverCard, HoverCardContent, HoverCardTrigger, } from '@/components/ui/hover-card'; import { useTranslation } from 'react-i18next'; import { i18nObj } from '@/i18n/I18nProvider'; export default function DynamicFormItemComponent({ config, field, }: { config: IDynamicFormItemSchema; // eslint-disable-next-line @typescript-eslint/no-explicit-any field: ControllerRenderProps; }) { const [llmModels, setLlmModels] = useState([]); const [knowledgeBases, setKnowledgeBases] = useState([]); const { t } = useTranslation(); useEffect(() => { if (config.type === DynamicFormItemType.LLM_MODEL_SELECTOR) { httpClient .getProviderLLMModels() .then((resp) => { setLlmModels(resp.models); }) .catch((err) => { toast.error('获取 LLM 模型列表失败:' + err.message); }); } }, [config.type]); useEffect(() => { if (config.type === DynamicFormItemType.KNOWLEDGE_BASE_SELECTOR) { httpClient .getKnowledgeBases() .then((resp) => { setKnowledgeBases(resp.bases); }) .catch((err) => { toast.error('获取知识库列表失败:' + err.message); }); } }, [config.type]); switch (config.type) { case DynamicFormItemType.INT: case DynamicFormItemType.FLOAT: return ( field.onChange(Number(e.target.value))} /> ); case DynamicFormItemType.STRING: return ; case DynamicFormItemType.BOOLEAN: return ; case DynamicFormItemType.STRING_ARRAY: return (
{field.value.map((item: string, index: number) => (
{ const newValue = [...field.value]; newValue[index] = e.target.value; field.onChange(newValue); }} />
))}
); case DynamicFormItemType.SELECT: return ( ); case DynamicFormItemType.LLM_MODEL_SELECTOR: return ( ); case DynamicFormItemType.KNOWLEDGE_BASE_SELECTOR: return ( ); case DynamicFormItemType.PROMPT_EDITOR: return (
{field.value.map( (item: { role: string; content: string }, index: number) => (
{/* 角色选择 */} {index === 0 ? (
system
) : ( )} {/* 内容输入 */} { const newValue = [...field.value]; newValue[index] = { ...newValue[index], content: e.target.value, }; field.onChange(newValue); }} /> {/* 删除按钮,第一轮不显示 */} {index !== 0 && ( )}
), )}
); default: return ; } }