import { Form, Input, Modal, Button, Upload } from 'antd'; import { RocketOutlined, UploadOutlined } from '@ant-design/icons'; import { DEFAULT_AVATAR, PRESET_AVATARS, isImageUrl } from '../constants'; interface InitModalProps { open: boolean; onCancel: () => void; onConfirm: (values: any) => Promise; avatarUploading: boolean; selectedAvatar: string; setSelectedAvatar: (url: string) => void; agentName: string; setAgentName: (name: string) => void; saving: boolean; beforeUploadInitAvatar: (file: any) => Promise; } export default function InitModal({ open, onCancel, onConfirm, avatarUploading, selectedAvatar, setSelectedAvatar, agentName, setAgentName, saving, beforeUploadInitAvatar, }: InitModalProps) { const [initForm] = Form.useForm(); return (
第一步 · 定义智能体形象
先给你的智能体一个更完整的开场
先决定它的形象、名字和一句话定位。确认后会进入三栏工作台,继续完成个性化、能力配置和实时预览。
{isImageUrl(selectedAvatar) ? ( avatar ) : ( (agentName?.charAt(0) || '?').toUpperCase() )}
{agentName || '你的新智能体'}
这里会实时映射你输入的名字与选择的形象。
{ if (changed.name !== undefined) setAgentName(changed.name); }} className="agent-editor-modal-card" style={{ padding: 20 }} > 智能体名称 } rules={[{ required: true, message: '请输入智能体名称' }]} > 描述(选填) } >
{['客服助理', '内容创作', '数据分析', '私人教练'].map((label) => ( initForm.setFieldsValue({ description: label })} style={{ padding: '6px 10px', borderRadius: 999, background: 'var(--color-surface-2)', color: 'var(--color-text-secondary)', fontSize: 12.5, cursor: 'pointer', transition: 'all 0.2s', }} onMouseEnter={(e) => { e.currentTarget.style.background = 'var(--color-border)'; e.currentTarget.style.color = 'var(--color-text)'; }} onMouseLeave={(e) => { e.currentTarget.style.background = 'var(--color-surface-2)'; e.currentTarget.style.color = 'var(--color-text-secondary)'; }} > {label} ))}
选择你的智能体形象
默认会使用系统头像,你也可以上传自己的图片替换。
{[DEFAULT_AVATAR, ...PRESET_AVATARS].map((url) => (
setSelectedAvatar(url)} className={`relative aspect-square rounded-full cursor-pointer transition-all duration-300 overflow-hidden border-2 ${selectedAvatar === url ? 'scale-110 shadow-lg z-10' : 'border-transparent opacity-70 hover:opacity-100 hover:scale-105'}`} style={{ borderColor: selectedAvatar === url ? 'var(--color-brand)' : 'transparent' }} > preset {selectedAvatar === url && (
)}
))}
); }