diff --git a/apps/web/src/pages/editing-planner/EditingPlanner.tsx b/apps/web/src/pages/editing-planner/EditingPlanner.tsx index 472231131..6c46ff45b 100755 --- a/apps/web/src/pages/editing-planner/EditingPlanner.tsx +++ b/apps/web/src/pages/editing-planner/EditingPlanner.tsx @@ -622,8 +622,17 @@ const EditingPlanner: React.FC = () => { }; const handleClipRemove = (clipId: string) => { - setClips((prev) => prev.filter((c) => c.id !== clipId)); - if (selectedClipId === clipId) setSelectedClipId(null); + Modal.confirm({ + title: "删除片段", + content: "确定要删除这个片段吗?此操作可通过撤销恢复。", + okText: "删除", + okType: "danger", + cancelText: "取消", + onOk: () => { + setClips((prev) => prev.filter((c) => c.id !== clipId)); + if (selectedClipId === clipId) setSelectedClipId(null); + }, + }); }; const handleClipUpdate = useCallback( @@ -1009,17 +1018,13 @@ const EditingPlanner: React.FC = () => { const syncClipsToBackend = async (planId: string): Promise => { if (clips.length === 0) return; - // 1. 获取后端现有片段 ID - try { - const existing = await getEditPlanClips(planId, { limit: 500 }); - if (existing.items.length > 0) { - await batchDeleteEditPlanClips( - planId, - existing.items.map((c) => c.id), - ); - } - } catch (err) { - console.warn("[获取后端片段失败,跳过删除]", err); + // 1. 获取并删除后端现有片段 + const existing = await getEditPlanClips(planId, { limit: 500 }); + if (existing.items.length > 0) { + await batchDeleteEditPlanClips( + planId, + existing.items.map((c) => c.id), + ); } // 2. 批量创建新片段(并发 3 个) @@ -1118,6 +1123,7 @@ const EditingPlanner: React.FC = () => { await syncClipsToBackend(planId); } catch (syncErr) { console.warn("[片段同步失败]", syncErr); + message.warning("片段同步失败,将使用模板默认配置生成"); // 同步失败不阻塞生成,后端有模板兜底 }