diff --git a/apps/web/src/components/cover/useSharedCover.ts b/apps/web/src/components/cover/useSharedCover.ts index 29a174c15..eac74e189 100644 --- a/apps/web/src/components/cover/useSharedCover.ts +++ b/apps/web/src/components/cover/useSharedCover.ts @@ -104,7 +104,18 @@ export function useSharedCover(opts: UseSharedCoverOptions): UseSharedCoverRetur }, []) const handleEditTemplate = useCallback((tpl: CoverTemplate) => { - setEditingTemplate(tpl) + // 系统模板不可修改:复制为新模板草稿,走另存为流程 + if (tpl.is_system) { + setEditingTemplate({ + ...tpl, + id: "", + name: tpl.name + " 副本", + is_system: false, + created_at: "", + }) + } else { + setEditingTemplate(tpl) + } setShowCoverEditor(true) }, []) @@ -116,15 +127,22 @@ export function useSharedCover(opts: UseSharedCoverOptions): UseSharedCoverRetur const handleSaveTemplate = useCallback( async (tpl: CoverTemplate) => { try { - if (tpl.id && templates.some((t) => t.id === tpl.id)) { - const updated = await updateCoverTemplate(tpl.id, { name: tpl.name, config: tpl.config }) - setTemplates((prev) => prev.map((t) => (t.id === tpl.id ? { ...t, ...updated } : t))) - } else { - const created = await createCoverTemplate({ name: tpl.name, config: tpl.config }) + // 系统模板或无 id(新建/副本)→ 走创建分支;否则走更新 + const isSystem = templates.find((t) => t.id === tpl.id)?.is_system === true + const shouldCreate = !tpl.id || isSystem + if (shouldCreate) { + const created = await createCoverTemplate({ + name: tpl.name || "我的封面模板", + config: tpl.config, + }) setTemplates((prev) => [...prev, created]) setSelectedTemplateId(created.id || tpl.id) + } else { + const updated = await updateCoverTemplate(tpl.id, { name: tpl.name, config: tpl.config }) + setTemplates((prev) => prev.map((t) => (t.id === tpl.id ? { ...t, ...updated } : t))) } setShowCoverEditor(false) + setEditingTemplate(null) } catch (err) { console.error("[SharedCover] 保存模板失败:", err) message.error("保存模板失败,请稍后重试") diff --git a/apps/web/src/pages/generate/components/cover-settings/CoverSettingsModal.tsx b/apps/web/src/pages/generate/components/cover-settings/CoverSettingsModal.tsx index c4e4423bf..9877c909e 100644 --- a/apps/web/src/pages/generate/components/cover-settings/CoverSettingsModal.tsx +++ b/apps/web/src/pages/generate/components/cover-settings/CoverSettingsModal.tsx @@ -111,7 +111,7 @@ const CoverSettingsModal: React.FC = ({
e.stopPropagation()}> {!tpl.is_system && (