From f99ee8a2aaf2e59cab4b389be06a50e73fc121e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=81=B5=E5=BA=94?= Date: Mon, 6 Jul 2026 13:03:10 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=9F=A1=20P1-4:=20=E5=AD=97=E4=BD=93?= =?UTF-8?q?=E5=A4=A7=E5=B0=8F=E8=AE=BE=E7=BD=AE=E5=AE=9E=E6=97=B6=E9=A2=84?= =?UTF-8?q?=E8=A7=88=20=E2=80=94=20PreviewPlayer=E5=8F=A0=E5=8A=A0?= =?UTF-8?q?=E6=A0=87=E9=A2=98/=E5=AD=97=E5=B9=95=E9=A2=84=E8=A7=88?= =?UTF-8?q?=E5=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - PreviewPlayer新增titleSettings/subtitleSettings props - 手机预览区内叠加标题文字(位置/字体/大小/粗体/斜体/描边/阴影实时反映) - 字幕预览叠加层(位置/字体/大小实时反映) - EditingPlanner传递titleSettings/subtitleSettings到PreviewPlayer - 新增.ep-preview-title/.ep-preview-subtitle CSS样式 Co-Authored-By: Claude Fable 5 --- .../pages/editing-planner/EditingPlanner.css | 28 ++++++++ .../pages/editing-planner/EditingPlanner.tsx | 2 + .../components/PreviewPlayer.tsx | 64 +++++++++++++++++++ 3 files changed, 94 insertions(+) diff --git a/apps/web/src/pages/editing-planner/EditingPlanner.css b/apps/web/src/pages/editing-planner/EditingPlanner.css index 4c2de73f5..0e26382c6 100644 --- a/apps/web/src/pages/editing-planner/EditingPlanner.css +++ b/apps/web/src/pages/editing-planner/EditingPlanner.css @@ -601,6 +601,34 @@ color: var(--ep-text-secondary, #9ca3af); } +/* 标题/字幕实时预览叠加层 */ +.ep-preview-title, +.ep-preview-subtitle { + position: absolute; + left: 4px; + right: 4px; + text-align: center; + color: #fff; + line-height: 1.3; + pointer-events: none; + z-index: 5; + word-break: break-all; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.ep-preview-title { + text-shadow: 1px 1px 3px rgba(0, 0, 0, 0.7); +} + +.ep-preview-subtitle { + background: rgba(0, 0, 0, 0.55); + padding: 2px 4px; + border-radius: 3px; + text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.5); +} + /* 封面预览 */ .ep-cover-preview { width: 150px; diff --git a/apps/web/src/pages/editing-planner/EditingPlanner.tsx b/apps/web/src/pages/editing-planner/EditingPlanner.tsx index 51f45ff6e..a4ecc8cce 100755 --- a/apps/web/src/pages/editing-planner/EditingPlanner.tsx +++ b/apps/web/src/pages/editing-planner/EditingPlanner.tsx @@ -708,6 +708,8 @@ const EditingPlanner: React.FC = () => { currentCoverScheme={currentCoverScheme} coverSchemes={COVER_SCHEMES} aiCoverLoading={aiCoverLoading} + titleSettings={titleSettings} + subtitleSettings={subtitleSettings} onClipSelect={handleClipSelect} onCoverSchemeChange={setCurrentCoverScheme} onPlayPause={() => setIsPlaying(!isPlaying)} diff --git a/apps/web/src/pages/editing-planner/components/PreviewPlayer.tsx b/apps/web/src/pages/editing-planner/components/PreviewPlayer.tsx index e64d8f4b5..4842f66d9 100644 --- a/apps/web/src/pages/editing-planner/components/PreviewPlayer.tsx +++ b/apps/web/src/pages/editing-planner/components/PreviewPlayer.tsx @@ -19,6 +19,26 @@ interface CoverScheme { label: string; } +interface TitleSettings { + aiAutoSelect: boolean; + title: string; + position: string; + font: string; + size: number; + bold: boolean; + italic: boolean; + stroke: boolean; + shadow: boolean; +} + +interface SubtitleSettings { + enabled: boolean; + position: string; + font: string; + size: number; + animation: string; +} + interface PreviewPlayerProps { clips: ClipData[]; selectedClipId: string | null; @@ -26,6 +46,8 @@ interface PreviewPlayerProps { currentCoverScheme: string; coverSchemes: CoverScheme[]; aiCoverLoading: boolean; + titleSettings?: TitleSettings; + subtitleSettings?: SubtitleSettings; onClipSelect: (clipId: string) => void; onCoverSchemeChange: (scheme: string) => void; onPlayPause: () => void; @@ -46,6 +68,8 @@ const PreviewPlayer: React.FC = ({ currentCoverScheme, coverSchemes, aiCoverLoading, + titleSettings, + subtitleSettings, onCoverSchemeChange, onPlayPause, onAiGenerateCover, @@ -78,6 +102,46 @@ const PreviewPlayer: React.FC = ({ ) : ( 暂无片段 )} + + {/* 标题实时预览 */} + {titleSettings && !titleSettings.aiAutoSelect && titleSettings.title && ( +
+ {titleSettings.title} +
+ )} + + {/* 字幕实时预览 */} + {subtitleSettings?.enabled && ( +
+ 字幕预览文字 +
+ )}