fix(editor): 片段同步失败加提示 + 删除片段加二次确认
AI Code Review / AI Code Review (pull_request) Successful in 1m30s
CI/CD Pipeline / Integration Tests (pull_request) Failing after 1468h33m32s
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Failing after 1468h33m34s
CI Build & Deploy Pipeline / Production Browser E2E (pull_request) Failing after 1468h33m52s
CI Build & Deploy Pipeline / Deploy Production (pull_request) Failing after 1468h33m54s
CI Build & Deploy Pipeline / Staging API Integration Tests (pull_request) Failing after 1468h33m56s
CI Build & Deploy Pipeline / Build Production Worker Image (pull_request) Failing after 1468h33m56s
CI Build & Deploy Pipeline / Build Production Web Image (pull_request) Failing after 1468h33m56s
CI Build & Deploy Pipeline / Build Production API Image (pull_request) Failing after 1468h33m57s
CI Build & Deploy Pipeline / Build Staging Worker Image (pull_request) Failing after 1468h33m59s
CI Build & Deploy Pipeline / Build Staging Web Image (pull_request) Failing after 1468h33m59s
CI Build & Deploy Pipeline / Build Staging API Image (pull_request) Failing after 1468h33m59s
CI/CD Pipeline / Check if frontend-only change (pull_request) Has been skipped
CI/CD Pipeline / Frontend Lint (pull_request) Has been skipped
CI/CD Pipeline / Unit Tests (pull_request) Failing after 1469h5m32s
CI Build & Deploy Pipeline / Staging E2E Tests (pull_request) Failing after 1469h5m54s
CI Build & Deploy Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Failing after 1469h5m55s

- syncClipsToBackend 失败时提示用户,不再静默吞错
- 删除片段统一走 Modal.confirm 二次确认(时间轴✕按钮/右键菜单/顶栏退格/片段列表 4处入口全部生效)
This commit is contained in:
2026-07-17 10:55:08 +08:00
parent abe854be76
commit 7b577a283d
@@ -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<void> => {
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("片段同步失败,将使用模板默认配置生成");
// 同步失败不阻塞生成,后端有模板兜底
}