import type { ConfigFieldDto } from '@/services/configService'; import { Input } from '@/components/ui/input'; import { Switch } from '@/components/ui/switch'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; import { Textarea } from '@/components/ui/textarea'; import { Badge } from '@/components/ui/badge'; import { Label } from '@/components/ui/label'; interface ConfigFieldInputProps { field: ConfigFieldDto; value: any; onChange: (value: any) => void; } export function ConfigFieldInput({ field, value, onChange }: ConfigFieldInputProps) { const renderInput = () => { const baseInputClasses = "bg-muted/50 border-border focus-visible:ring-primary focus-visible:border-primary transition-all duration-200"; switch (field.type) { case 'boolean': return ( ); case 'enum': return ( {field.enumValues?.map((val) => ( {val} ))} ); case 'text': return ( onChange(e.target.value)} placeholder={field.sensitive && field.hasValue ? '••••••••' : ''} className={`min-h-[100px] ${baseInputClasses}`} /> ); case 'number': return ( onChange(e.target.value)} placeholder={field.sensitive && field.hasValue ? '••••••••' : ''} min={field.min} max={field.max} className={baseInputClasses} /> ); case 'string': case 'url': default: return ( onChange(e.target.value)} placeholder={field.sensitive && field.hasValue ? '••••••••' : ''} className={baseInputClasses} /> ); } }; const getSourceBadge = () => { switch (field.source) { case 'db': return 已配置; case 'default': default: return 默认值; } }; return ( {field.label || field.envKey} {getSourceBadge()} {field.description} {field.envKey} {renderInput()} ); }