From ec12db15c7d7b961a6944cc2fdb8e179cc103c2a Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Fri, 7 Aug 2026 19:18:38 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=80=89=E6=8B=A9=E8=A7=86=E9=A2=91?= =?UTF-8?q?=E5=BA=93=E5=90=8E=E8=87=AA=E5=8A=A8=E8=A7=A6=E5=8F=91=20AI=20?= =?UTF-8?q?=E6=99=BA=E8=83=BD=E5=8C=B9=E9=85=8D=20(#1256=20=E5=89=8D?= =?UTF-8?q?=E7=AB=AF=E9=83=A8=E5=88=86)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - useStep2Materials 添加 useEffect,auto 模式下选择视频库自动调用 handleSmartMatch - 触发条件:auto 模式 + 视频库已选 + 素材加载完成 + 素材数>0 - 离开 auto 模式时重置 autoTriggeredRef,确保模式切换后重新触发 - handleSmartMatch 由 useCallback 包装,引用稳定,安全加入依赖项 - 用户不再需要手动点击「让AI帮你选」按钮 Related to #1256 --- .../pages/generate/hooks/useStep2Materials.ts | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/apps/web/src/pages/generate/hooks/useStep2Materials.ts b/apps/web/src/pages/generate/hooks/useStep2Materials.ts index 085825162..0d5a8c406 100755 --- a/apps/web/src/pages/generate/hooks/useStep2Materials.ts +++ b/apps/web/src/pages/generate/hooks/useStep2Materials.ts @@ -2,7 +2,7 @@ * Step 2 素材选择 Hook * 组合素材库加载 + 智能匹配两个子 Hook */ -import { useCallback } from "react" +import { useCallback, useEffect, useRef } from "react" import { formatDuration } from "../utils/formatDuration" import { useMaterialLibrary } from "./step2-materials/useMaterialLibrary" import { useSmartMatch } from "./step2-materials/useSmartMatch" @@ -34,6 +34,25 @@ export function useStep2Materials({ onSmartSelectedIdsChange, }) + /* ── 自动触发智能匹配:选择视频库后自动调用 ── */ + const autoTriggeredRef = useRef("") + const { handleSmartMatch } = smartMatch + useEffect(() => { + // 离开 auto 模式时重置,确保下次进入 auto 模式能重新触发 + if (materialMode !== "auto") { + autoTriggeredRef.current = "" + return + } + if (!selectedLibraryId) return + if (materialsLoading) return + if (materials.items.length === 0) return + // 防止同一视频库重复触发 + if (autoTriggeredRef.current === selectedLibraryId) return + + autoTriggeredRef.current = selectedLibraryId + handleSmartMatch() + }, [selectedLibraryId, materialMode, materialsLoading, materials.items, handleSmartMatch]) + /* ── 手动选择素材 ── */ const handleToggleMaterial = useCallback( (materialId: string) => {