From f7892df9fc65abcb970b9e749f11cd74ad316f11 Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Tue, 4 Aug 2026 14:41:39 +0800 Subject: [PATCH 01/13] feat(title): add autoGenerateTitle for AI auto-select mode --- .../useStep4Title/useAiTitleGenerator.ts | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/apps/web/src/pages/generate/hooks/useStep4Title/useAiTitleGenerator.ts b/apps/web/src/pages/generate/hooks/useStep4Title/useAiTitleGenerator.ts index 0e2f778bd..8f5b1c5c0 100644 --- a/apps/web/src/pages/generate/hooks/useStep4Title/useAiTitleGenerator.ts +++ b/apps/web/src/pages/generate/hooks/useStep4Title/useAiTitleGenerator.ts @@ -72,9 +72,28 @@ export function useAiTitleGenerator({ setAiTitleGenerating(false) }, [aiTitleInput]) + /** + * 自动生成标题(供 AI 自动选择开关使用) + * 如果已有生成结果,直接从中选一个;否则用默认关键词生成 + */ + const autoGenerateTitle = useCallback((): string => { + if (aiTitleResults.length > 0) { + const picked = aiTitleResults[Math.floor(Math.random() * aiTitleResults.length)] + onTitleSettingsChange({ ...titleSettings, title: picked.title }) + return picked.title + } + // 没有已有结果,用默认关键词生成 + const results = generateTitlesFromTopic("短视频") + setAiTitleResults(results) + setHasGeneratedTitles(true) + const picked = results[Math.floor(Math.random() * results.length)] + onTitleSettingsChange({ ...titleSettings, title: picked.title }) + return picked.title + }, [aiTitleResults, titleSettings, onTitleSettingsChange]) + const handleSelectAiTitle = useCallback( (title: string) => { - onTitleSettingsChange({ ...titleSettings, title, aiAutoSelect: false }) + onTitleSettingsChange({ ...titleSettings, title }) message.success("已选用此标题") }, [titleSettings, onTitleSettingsChange], @@ -98,5 +117,6 @@ export function useAiTitleGenerator({ handleGenerateAiTitles, handleSelectAiTitle, handleRefreshAiTitles, + autoGenerateTitle, } } -- 2.54.0 From cfe4f5d195d3377dfa6470e90eb48f96992d05b7 Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Tue, 4 Aug 2026 14:41:39 +0800 Subject: [PATCH 02/13] feat(title): toggleAiAutoSelect triggers auto-generate + inject callback --- .../hooks/useStep4Title/useTitleStyleUpdaters.ts | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/apps/web/src/pages/generate/hooks/useStep4Title/useTitleStyleUpdaters.ts b/apps/web/src/pages/generate/hooks/useStep4Title/useTitleStyleUpdaters.ts index 49ef2685d..da50abba3 100644 --- a/apps/web/src/pages/generate/hooks/useStep4Title/useTitleStyleUpdaters.ts +++ b/apps/web/src/pages/generate/hooks/useStep4Title/useTitleStyleUpdaters.ts @@ -5,6 +5,8 @@ import type { TitleSettings } from "../../types" interface UseTitleStyleUpdatersOptions { titleSettings: TitleSettings onTitleSettingsChange: (settings: TitleSettings) => void + /** AI 自动生成标题函数(由 useStep4Title 从 aiGenerator 注入) */ + autoGenerateTitle?: () => string } /** @@ -14,6 +16,7 @@ interface UseTitleStyleUpdatersOptions { export function useTitleStyleUpdaters({ titleSettings, onTitleSettingsChange, + autoGenerateTitle, }: UseTitleStyleUpdatersOptions) { /** 匹配预设:只用 color/bold/italic/stroke/shadow,不再匹配 size */ const getActivePreset = (settings: TitleSettings): string | null => { @@ -41,8 +44,17 @@ export function useTitleStyleUpdaters({ ) const toggleAiAutoSelect = useCallback(() => { - onTitleSettingsChange({ ...titleSettings, aiAutoSelect: !titleSettings.aiAutoSelect }) - }, [titleSettings, onTitleSettingsChange]) + if (!titleSettings.aiAutoSelect) { + // 打开开关:自动生成标题 + if (autoGenerateTitle) { + autoGenerateTitle() + } + } + onTitleSettingsChange({ + ...titleSettings, + aiAutoSelect: !titleSettings.aiAutoSelect, + }) + }, [titleSettings, onTitleSettingsChange, autoGenerateTitle]) const updatePosition = useCallback( (position: string) => { -- 2.54.0 From a70e789cf4f011295abbeaacb8e8ff85ef079a50 Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Tue, 4 Aug 2026 14:41:40 +0800 Subject: [PATCH 03/13] feat(title): wire autoGenerateTitle into styleUpdaters --- apps/web/src/pages/generate/hooks/useStep4Title/index.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/apps/web/src/pages/generate/hooks/useStep4Title/index.ts b/apps/web/src/pages/generate/hooks/useStep4Title/index.ts index eb8114623..0343e2299 100644 --- a/apps/web/src/pages/generate/hooks/useStep4Title/index.ts +++ b/apps/web/src/pages/generate/hooks/useStep4Title/index.ts @@ -24,8 +24,12 @@ export function useStep4Title({ titleSettings, onTitleSettingsChange }: UseStep4 // AI 标题生成 const aiGenerator = useAiTitleGenerator({ titleSettings, onTitleSettingsChange }) - // 样式更新 - const styleUpdaters = useTitleStyleUpdaters({ titleSettings, onTitleSettingsChange }) + // 样式更新(注入 autoGenerateTitle 让 toggleAiAutoSelect 能调用) + const styleUpdaters = useTitleStyleUpdaters({ + titleSettings, + onTitleSettingsChange, + autoGenerateTitle: aiGenerator.autoGenerateTitle, + }) return { // 数据 @@ -43,6 +47,7 @@ export function useStep4Title({ titleSettings, onTitleSettingsChange }: UseStep4 handleGenerateAiTitles: aiGenerator.handleGenerateAiTitles, handleSelectAiTitle: aiGenerator.handleSelectAiTitle, handleRefreshAiTitles: aiGenerator.handleRefreshAiTitles, + autoGenerateTitle: aiGenerator.autoGenerateTitle, // 标题设置操作 updateTitle: styleUpdaters.updateTitle, toggleAiAutoSelect: styleUpdaters.toggleAiAutoSelect, -- 2.54.0 From e69911e6e01e46a9c6e9cd25f4df298337b47e76 Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Tue, 4 Aug 2026 14:41:40 +0800 Subject: [PATCH 04/13] feat(title): AI auto-select shows read-only title + swap button + style panel --- .../components/Step4TitleSettings.tsx | 111 +++++++++++++----- 1 file changed, 84 insertions(+), 27 deletions(-) diff --git a/apps/web/src/pages/generate/components/Step4TitleSettings.tsx b/apps/web/src/pages/generate/components/Step4TitleSettings.tsx index 1ceb6fc95..5f078d1f0 100644 --- a/apps/web/src/pages/generate/components/Step4TitleSettings.tsx +++ b/apps/web/src/pages/generate/components/Step4TitleSettings.tsx @@ -21,34 +21,91 @@ const Step4TitleSettings: React.FC = (props) => {

📝 选择标题

- - -
- 或手动选择 -
- -
- AI 自动选择标题 -
-
-
-
- - {!t.titleSettings.aiAutoSelect && ( + {/* AI 自动选择模式 */} + {t.titleSettings.aiAutoSelect ? ( <> +
+ AI 自动选择标题 +
+
+
+
+ + {/* 显示当前 AI 选中的标题(只读)+ 换一个按钮 */} +
+ +
+ {t.titleSettings.title || "AI 将自动为你选择标题"} + +
+
+ + {/* 样式面板始终可见 */} + + + ) : ( + <> + + +
+ 或手动选择 +
+ +
+ AI 自动选择标题 +
+
+
+
+