import type { AssetType } from '../api/types' import { useProjectStore } from '../stores/project' import { useTaskStore } from '../stores/task' import { mergeStyles, getCustomTags } from '../utils/style' import StyleSelector from './StyleSelector' import CustomTagsEditor from './CustomTagsEditor' import PromptEditor from './PromptEditor' const ASSET_TYPE_ICONS: Record = { sprite: ( ), background: ( ), ui: ( ), animation: ( ), } const ASSET_TYPES: { value: AssetType; label: string }[] = [ { value: 'sprite', label: '精灵' }, { value: 'background', label: '背景' }, { value: 'ui', label: 'UI' }, { value: 'animation', label: '动画' }, ] interface GenerateFormProps { onSubmit: (prompt: string) => void submitting: boolean } export default function GenerateForm({ onSubmit, submitting }: GenerateFormProps) { const { style: projectStyle } = useProjectStore() const { prompt, assetType, taskStyle, params, enableAI, optimizedPrompt, isOptimizing, setPrompt, setAssetType, toggleTaskStyle, setTaskStyle, setParams, setEnableAI, setOptimizedPrompt, runOptimize, } = useTaskStore() const mergedStyle = mergeStyles(projectStyle, taskStyle) const finalPrompt = enableAI && optimizedPrompt ? optimizedPrompt : prompt const handleOptimize = async () => { try { await runOptimize(projectStyle) } catch { // error handled in store } } const handleSubmit = () => { onSubmit(finalPrompt) } return (
{/* 素材类型 */}

素材类型

{ASSET_TYPES.map(t => { const isSelected = assetType === t.value return ( ) })}
{/* 素材风格配置 */}

素材风格

{/* 提示词(含 AI 优化) */}

提示词

{enableAI && ( )}
{/* 参数 */}

参数

{/* 提交 */}
) }