import React, { useState } from 'react'; import { Prompt } from '../../types'; import Input from '../common/Input'; import TextArea from '../common/TextArea'; import Button from '../common/Button'; interface PromptFormProps { initialPrompt?: Partial; onSubmit: (prompt: { title: string; content: string; tags: string[] }) => void; onCancel: () => void; } const PromptForm: React.FC = ({ initialPrompt = {}, onSubmit, onCancel }) => { const [title, setTitle] = useState(initialPrompt.title || ''); const [content, setContent] = useState(initialPrompt.content || ''); const [tagInput, setTagInput] = useState(''); const [tags, setTags] = useState(initialPrompt.tags || []); const [errors, setErrors] = useState({ title: '', content: '' }); const handleAddTag = () => { if (!tagInput.trim()) return; // 如果标签已存在,则不添加 if (tags.includes(tagInput.trim())) { setTagInput(''); return; } setTags([...tags, tagInput.trim()]); setTagInput(''); }; const handleKeyDown = (e: React.KeyboardEvent) => { if (e.key === 'Enter') { e.preventDefault(); handleAddTag(); } }; const handleRemoveTag = (tagToRemove: string) => { setTags(tags.filter(tag => tag !== tagToRemove)); }; const validate = (): boolean => { const newErrors = { title: '', content: '' }; if (!title.trim()) { newErrors.title = '请输入提示词标题'; } if (!content.trim()) { newErrors.content = '请输入提示词内容'; } setErrors(newErrors); return !newErrors.title && !newErrors.content; }; const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); if (!validate()) return; onSubmit({ title: title.trim(), content: content.trim(), tags }); }; return (
setTitle(e.target.value)} error={errors.title} required />