/** * Step 1 选择剪辑模式 + 生成设置(#1970 新流程第一步) * - 剪辑模式:🎲随机混剪 / 📖叙事剪辑,二选一,选中紫底紫框 * - 生成设置:生成数量(-/+ 1-10 默认1)、视频比例(9:16/16:9 默认9:16)、智能降重开关(默认开) */ import React from "react" import { MinusOutlined, PlusOutlined } from "@ant-design/icons" export type EditMode = "random" | "narrative" interface Step1EditModeProps { editMode: EditMode onEditModeChange: (mode: EditMode) => void /** 生成数量(1-10,默认1) */ previewCount: number onPreviewCountChange: (n: number) => void /** 视频比例 */ videoRatio: "9:16" | "16:9" onVideoRatioChange: (ratio: "9:16" | "16:9") => void /** 智能降重开关(默认 true) */ dedupEnabled: boolean onDedupEnabledChange: (v: boolean) => void } const PURPLE = "#7c3aed" const PURPLE_BG = "linear-gradient(135deg, #ede9fe, #ddd6fe)" const PURPLE_BORDER = "2px solid #7c3aed" const MODE_CARDS: Array<{ key: EditMode emoji: string title: string desc: string features: string[] }> = [ { key: "random", emoji: "🎲", title: "随机混剪", desc: "根据配音时长随机抽取素材片段,灵活组合", features: ["随机抽帧组合", "每次画面不同", "适合批量生成"], }, { key: "narrative", emoji: "📖", title: "叙事剪辑", desc: "按文案内容匹配相关画面,有逻辑组织镜头", features: ["画面匹配文案", "叙事感更强", "需要素材标签"], }, ] const Step1EditMode: React.FC = ({ editMode, onEditModeChange, previewCount, onPreviewCountChange, videoRatio, onVideoRatioChange, dedupEnabled, onDedupEnabledChange, }) => { return (

🎬 选择剪辑模式

选择适合您的剪辑方式,后续流程会根据模式自动调整

{MODE_CARDS.map((card) => { const selected = editMode === card.key return (
onEditModeChange(card.key)} style={{ padding: 20, borderRadius: 12, border: selected ? PURPLE_BORDER : "1px solid #e5e7eb", background: selected ? PURPLE_BG : "#fff", cursor: "pointer", transition: "all 0.2s", }} >
{card.emoji}
{card.title}
{card.desc}
{card.features.map((f) => (
✅ {f}
))}
) })}

⚙️ 生成设置

{previewCount}
最多一次生成 10 个
{[ { key: "9:16" as const, emoji: "📱", label: "竖屏 9:16" }, { key: "16:9" as const, emoji: "🖥️", label: "横屏 16:9" }, ].map((opt) => { const selected = videoRatio === opt.key return ( ) })}
🎯 智能降重 {dedupEnabled ? "已开启" : "已关闭"}
自动对画面做微调,避免查重不过
) } export default Step1EditMode