diff --git a/apps/web/src/pages/editing-planner/EditingPlanner.tsx b/apps/web/src/pages/editing-planner/EditingPlanner.tsx index e5b456cb3..443b84a59 100755 --- a/apps/web/src/pages/editing-planner/EditingPlanner.tsx +++ b/apps/web/src/pages/editing-planner/EditingPlanner.tsx @@ -4,13 +4,7 @@ */ import React, { useState, useCallback, useEffect } from "react"; import { useSearchParams, useNavigate } from "react-router-dom"; -// 简易消息工具(UI 库未导出 message) -const msg = { - success: (s: string) => console.log(`✅ ${s}`), - error: (s: string) => console.error(`❌ ${s}`), - warning: (s: string) => console.warn(`⚠️ ${s}`), - info: (s: string) => console.info(`ℹ️ ${s}`), -}; +import { message } from "antd"; import type { EditingTemplate, TemplateCategory, @@ -20,6 +14,7 @@ import type { import { getEditingTemplates, getEditingTemplate, + createEditingTemplate, updateEditingTemplate, getTemplateCategories, generateFromTemplate, @@ -179,7 +174,7 @@ const EditingPlanner: React.FC = () => { setCategories(cats); setMediaAssets(assets); } catch { - msg.error("加载模板失败"); + message.error("加载模板失败"); } finally { setLoadingTemplates(false); } @@ -235,7 +230,7 @@ const EditingPlanner: React.FC = () => { setDraftCategory(tpl.category); setDraftTags(tpl.tags.join(", ")); }) - .catch(() => msg.error("加载模板详情失败")); + .catch(() => message.error("加载模板详情失败")); }, [loadedTemplateId, resetClips]); /* ──────────── 计算 ──────────── */ @@ -314,7 +309,7 @@ const EditingPlanner: React.FC = () => { if (!loadedTemplateId) return; const assetIds = selectedAssetIds; if (assetIds.length === 0) { - msg.warning("请先在素材库中选择素材"); + message.warning("请先在素材库中选择素材"); return; } setAiCoverLoading(true); @@ -326,29 +321,24 @@ const EditingPlanner: React.FC = () => { setCurrentCoverScheme( coverType === "ai_frame" ? "ai_frame" : "ai_reselect", ); - msg.success("AI 封面生成成功"); + message.success("AI 封面生成成功"); } catch { - msg.error("AI 封面生成失败"); + message.error("AI 封面生成失败"); } finally { setAiCoverLoading(false); } }; - /* 保存 */ + /* 保存 — 无论是否已加载模板,都打开保存弹窗;未加载时创建新模板 */ const handleOpenSaveModal = () => { - if (!loadedTemplateId) { - msg.warning("请先加载一个模板"); - return; - } setSaveModalOpen(true); }; const handleSave = async () => { if (!draftName.trim()) { - msg.warning("请输入模板名称"); + message.warning("请输入模板名称"); return; } - if (!loadedTemplateId) return; setSaveLoading(true); try { const payload: SaveTemplatePayload = { @@ -387,12 +377,16 @@ const EditingPlanner: React.FC = () => { material_type: c.type === "voice" ? "voiceover" : "video", })), }; - await updateEditingTemplate(loadedTemplateId, payload); - msg.success("模板保存成功"); + if (loadedTemplateId) { + await updateEditingTemplate(loadedTemplateId, payload); + } else { + await createEditingTemplate(payload); + } + message.success(loadedTemplateId ? "模板保存成功" : "模板创建成功"); setSaveModalOpen(false); loadTemplates(); } catch { - msg.error("保存失败"); + message.error("保存失败"); } finally { setSaveLoading(false); } @@ -404,10 +398,6 @@ const EditingPlanner: React.FC = () => { * 一键生成页面从 params 解析配置,无需重复请求接口 */ const handleGoToGenerate = () => { - if (!loadedTemplateId) { - msg.warning("请先加载一个模板"); - return; - } const planConfig = { title_config: { ai_auto_select: titleSettings.aiAutoSelect, @@ -442,7 +432,9 @@ const EditingPlanner: React.FC = () => { })), }; const params = new URLSearchParams(); - params.set("edit_plan_id", loadedTemplateId); + if (loadedTemplateId) { + params.set("edit_plan_id", loadedTemplateId); + } params.set("plan_config", JSON.stringify(planConfig)); navigate(`/app/generate?${params.toString()}`); }; @@ -470,9 +462,9 @@ const EditingPlanner: React.FC = () => { const task = await getTask(res.id); setGenTask(task); setGenPhase("progress"); - msg.info("生成任务已创建"); + message.info("生成任务已创建"); } catch { - msg.error("创建生成任务失败"); + message.error("创建生成任务失败"); } finally { setGenSubmitting(false); } @@ -511,7 +503,7 @@ const EditingPlanner: React.FC = () => { setGenTask(t); setGenPhase("progress"); } catch { - msg.error("重试失败"); + message.error("重试失败"); } finally { setGenSubmitting(false); } @@ -527,7 +519,7 @@ const EditingPlanner: React.FC = () => { /* 查看生成历史 */ const handleViewGenHistory = async () => { if (!loadedTemplateId) { - msg.warning("请先加载一个模板"); + message.warning("请先加载一个模板"); return; } setGenHistoryOpen(true); @@ -536,7 +528,7 @@ const EditingPlanner: React.FC = () => { const items = await getEditPlanGenerations(loadedTemplateId); setGenHistory(items); } catch { - msg.error("加载生成历史失败"); + message.error("加载生成历史失败"); } finally { setGenHistoryLoading(false); }