From 3717787cc829b5319f69fefde39dd1379329089b Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Sun, 16 Aug 2026 00:40:29 +0800 Subject: [PATCH 1/2] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8DPR#1382=E5=BC=95?= =?UTF-8?q?=E5=85=A5=E7=9A=84TypeScript=E7=BC=96=E8=AF=91=E9=94=99?= =?UTF-8?q?=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - PreviewVideoPanel: 删除重复的 showTitlePreview 声明,添加 TitlePreviewCanvas import - Step4TitleSettings: 删除未使用的 TitlePreviewCanvas import - GeneratePage: 补充 useQuery / getAssetsByKind / AssetItem import,修复回调参数类型标注 修复 CI Run#30879 阻断的 TS 编译错误 --- apps/web/src/pages/generate/GeneratePage.tsx | 5 ++++- apps/web/src/pages/generate/components/PreviewVideoPanel.tsx | 2 +- .../web/src/pages/generate/components/Step4TitleSettings.tsx | 1 - 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/apps/web/src/pages/generate/GeneratePage.tsx b/apps/web/src/pages/generate/GeneratePage.tsx index 492f13680..34934478f 100644 --- a/apps/web/src/pages/generate/GeneratePage.tsx +++ b/apps/web/src/pages/generate/GeneratePage.tsx @@ -12,7 +12,10 @@ import React, { useState, useMemo } from "react" import { Modal, message } from "antd" import { useNavigate } from "react-router-dom" +import { useQuery } from "@tanstack/react-query" import type { VoiceClone } from "@/api/voice-clone" +import { getAssetsByKind } from "@/api/assets/assets" +import type { AssetItem } from "@/api/assets/types" import { useCloneProgress } from "@/hooks/useCloneProgress" import CloneModal from "@/components/voice/CloneModal" import GenerateHeader from "./components/GenerateHeader" @@ -81,7 +84,7 @@ const GeneratePage: React.FC = () => { const sourceVideoUrl = useMemo(() => { const firstId = selectedMaterials[0] if (!firstId) return undefined - const asset = videoAssets.find((a) => a.id === firstId) + const asset = videoAssets.find((a: AssetItem) => a.id === firstId) return asset?.file_url }, [selectedMaterials, videoAssets]) diff --git a/apps/web/src/pages/generate/components/PreviewVideoPanel.tsx b/apps/web/src/pages/generate/components/PreviewVideoPanel.tsx index 03d63024e..090486395 100644 --- a/apps/web/src/pages/generate/components/PreviewVideoPanel.tsx +++ b/apps/web/src/pages/generate/components/PreviewVideoPanel.tsx @@ -16,6 +16,7 @@ import { PlayCircleOutlined, LoadingOutlined } from "@ant-design/icons" import type { PreviewResult, PreviewStatus } from "../hooks/useStep5Preview" import type { TitleSettings } from "../types" import { drawTitleOnCanvas } from "../utils/drawTitleOnCanvas" +import TitlePreviewCanvas from "./title/TitlePreviewCanvas" interface PreviewVideoPanelProps { previewStatus: PreviewStatus @@ -51,7 +52,6 @@ export const PreviewVideoPanel: React.FC = ({ const hasPreview = previewStatus === "ready" && previewResult const isLoading = previewStatus === "pending" || previewStatus === "generating" const isError = previewStatus === "error" - const showTitlePreview = !!titleSettings const videoAspectStyle = { aspectRatio: (videoRatio || "16:9").replace(":", "/") } // video 模式 refs diff --git a/apps/web/src/pages/generate/components/Step4TitleSettings.tsx b/apps/web/src/pages/generate/components/Step4TitleSettings.tsx index 131548fb1..698dbe5d0 100644 --- a/apps/web/src/pages/generate/components/Step4TitleSettings.tsx +++ b/apps/web/src/pages/generate/components/Step4TitleSettings.tsx @@ -8,7 +8,6 @@ import type { TitleSettings } from "../types" import { useStep4Title } from "../hooks/useStep4Title" import AiTitleGenerator from "./title/AiTitleGenerator" import TitleStylePanel from "./title/TitleStylePanel" -import TitlePreviewCanvas from "./title/TitlePreviewCanvas" interface Step4TitleSettingsProps { titleSettings: TitleSettings -- 2.54.0 From 157ebd4ef20c1489cb153624c200659b82e41129 Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Sun, 16 Aug 2026 00:46:25 +0800 Subject: [PATCH 2/2] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8DPreviewVideoPanel?= =?UTF-8?q?=20JSX=E7=BB=93=E6=9E=84-=E5=B0=86=E8=A7=86=E9=A2=91+Canvas?= =?UTF-8?q?=E5=8F=A0=E5=8A=A0=E5=B1=82=E7=A7=BB=E5=87=BA!showTitlePreview?= =?UTF-8?q?=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 预览成功+Canvas标题叠加层提升到顶层,仅在 hasPreview 条件下渲染 - 空状态/生成中/生成失败/预览信息添加 !showTitlePreview 守卫 - 修复 Canvas overlay 在 showTitlePreview=true 时永远不渲染的死代码问题 --- .../generate/components/PreviewVideoPanel.tsx | 178 +++++++++--------- 1 file changed, 85 insertions(+), 93 deletions(-) diff --git a/apps/web/src/pages/generate/components/PreviewVideoPanel.tsx b/apps/web/src/pages/generate/components/PreviewVideoPanel.tsx index 090486395..a5502e9dc 100644 --- a/apps/web/src/pages/generate/components/PreviewVideoPanel.tsx +++ b/apps/web/src/pages/generate/components/PreviewVideoPanel.tsx @@ -203,105 +203,97 @@ export const PreviewVideoPanel: React.FC = ({ )} - {/* 非 Step4 模式才显示以下内容 */} - {!showTitlePreview && ( - <> - {/* 空状态:还没生成预览 */} - {previewStatus === "idle" && ( -
- -

暂无预览

-

在第 3 步生成预览后在此查看

-
- )} + {/* 空状态:还没生成预览(非 Step4 模式) */} + {!showTitlePreview && previewStatus === "idle" && ( +
+ +

暂无预览

+

在第 3 步生成预览后在此查看

+
+ )} - {/* 生成中 */} - {isLoading && ( -
-
-
- -

- {previewStatus === "pending" ? "排队中..." : `生成中 ${progress}%`} -

-
-
-
-
-
-
- )} - - {/* 生成失败 */} - {isError && ( -
-
-

预览生成失败

-
-

- {typeof previewError === "string" && previewError ? previewError : "请重试"} + {/* 生成中(非 Step4 模式) */} + {!showTitlePreview && isLoading && ( +

+
+
+ +

+ {previewStatus === "pending" ? "排队中..." : `生成中 ${progress}%`}

-
- )} +
+
+
+
+
+ )} - {/* 预览成功 + Canvas 标题叠加 */} - {hasPreview && ( -
-
-
- {showTitlePreview && ( - - )} -
- )} + {/* 生成失败(非 Step4 模式) */} + {!showTitlePreview && isError && ( +
+
+

预览生成失败

+
+

+ {typeof previewError === "string" && previewError ? previewError : "请重试"} +

+ +
+ )} - {/* 预览信息 */} - {hasPreview && previewResult && ( -
-
- 时长 - - {(typeof previewResult.duration === "number" - ? previewResult.duration - : 0 - ).toFixed(1)}{" "} - 秒 - -
-
- 片段数 - {previewResult.clipCount} 段 -
-
- 比例 - {videoRatio} -
-
+ {/* 预览成功 + Canvas 标题叠加 */} + {hasPreview && ( +
+
+
+ {showTitlePreview && ( + )} - +
+ )} + + {/* 预览信息(非 Step4 模式) */} + {!showTitlePreview && hasPreview && previewResult && ( +
+
+ 时长 + + {(typeof previewResult.duration === "number" ? previewResult.duration : 0).toFixed(1)}{" "} + 秒 + +
+
+ 片段数 + {previewResult.clipCount} 段 +
+
+ 比例 + {videoRatio} +
+
)}
) -- 2.54.0