/** * 生成数量选择弹窗(Issue #1677) * Step1 选完模板点「下一步」时弹出:要生成几个视频?(1~10) * 默认 1,回车 = 1(零额外操作) */ import React, { useState, useEffect, useRef } from "react" import { MAX_PREVIEW_COUNT } from "../constants" interface PreviewCountModalProps { open: boolean /** 默认值(上次选择,默认1) */ defaultCount?: number onConfirm: (count: number) => void onCancel: () => void } const PreviewCountModal: React.FC = ({ open, defaultCount = 1, onConfirm, onCancel, }) => { const [count, setCount] = useState(defaultCount) const inputRef = useRef(null) useEffect(() => { if (open) { setCount(defaultCount) // 弹窗打开后聚焦并选中,方便直接回车=默认1 setTimeout(() => inputRef.current?.focus(), 50) } }, [open, defaultCount]) const clamp = (n: number) => Math.max(1, Math.min(MAX_PREVIEW_COUNT, n || 1)) const handleConfirm = () => { onConfirm(clamp(count)) } const handleKeyDown = (e: React.KeyboardEvent) => { if (e.key === "Enter") { e.preventDefault() handleConfirm() } if (e.key === "Escape") { onCancel() } } if (!open) return null return (
e.stopPropagation()}>

要生成几个视频?

素材共用,AI 随机剪辑出不同版本,每个视频可独立设置标题、配音和封面

setCount(clamp(parseInt(e.target.value, 10) || 1))} onKeyDown={handleKeyDown} className="xx-count-input" />
{[1, 3, 5, 10].map((n) => ( ))}

直接按回车 = 生成 1 个

) } export default PreviewCountModal