fix(cover): 系统模板套用走新建路径 + 403/401错误提示增强 #2044

Merged
auto-approve-bot merged 1 commits from fix/cover-templates-403-20260925 into develop 2026-09-25 22:47:20 +08:00
2 changed files with 65 additions and 7 deletions
@@ -86,8 +86,27 @@ export function useSharedCover(opts: UseSharedCoverOptions): UseSharedCoverRetur
}))
setTemplates(list)
} catch (err) {
console.error("[SharedCover] 加载封面模板失败:", err)
setTemplatesError("加载模板失败,请稍后重试")
const axiosErr = err as {
response?: {
status?: number
data?: { detail?: string; message?: string; error?: { message?: string } }
}
message?: string
}
const status = axiosErr?.response?.status
const detail =
axiosErr?.response?.data?.detail ||
axiosErr?.response?.data?.message ||
axiosErr?.response?.data?.error?.message ||
axiosErr?.message
console.error("[SharedCover] 加载封面模板失败:", err, "status=", status, "detail=", detail)
if (status === 401) {
setTemplatesError("登录已过期,请刷新页面重新登录")
} else if (status === 403) {
setTemplatesError(detail ? "权限不足:" + detail : "无权限访问封面模板")
} else {
setTemplatesError("加载模板失败:" + (detail || "请稍后重试"))
}
} finally {
setTemplatesLoading(false)
}
@@ -144,8 +163,25 @@ export function useSharedCover(opts: UseSharedCoverOptions): UseSharedCoverRetur
setShowCoverEditor(false)
setEditingTemplate(null)
} catch (err) {
console.error("[SharedCover] 保存模板失败:", err)
message.error("保存模板失败,请稍后重试")
const axiosErr = err as {
response?: {
status?: number
data?: { detail?: string; message?: string; error?: { message?: string } }
}
message?: string
}
const status = axiosErr?.response?.status
const detail =
axiosErr?.response?.data?.detail ||
axiosErr?.response?.data?.message ||
axiosErr?.response?.data?.error?.message ||
axiosErr?.message
console.error("[SharedCover] 保存模板失败:", err, "status=", status, "detail=", detail)
if (status === 403) {
message.error("保存失败(权限不足):" + (detail || "无权操作该模板"))
} else {
message.error("保存模板失败:" + (detail || "请稍后重试"))
}
}
},
[templates],
@@ -160,8 +196,25 @@ export function useSharedCover(opts: UseSharedCoverOptions): UseSharedCoverRetur
setSelectedTemplateId("default")
}
} catch (err) {
console.error("[SharedCover] 删除模板失败:", err)
message.error("删除模板失败,请稍后重试")
const axiosErr = err as {
response?: {
status?: number
data?: { detail?: string; message?: string; error?: { message?: string } }
}
message?: string
}
const status = axiosErr?.response?.status
const detail =
axiosErr?.response?.data?.detail ||
axiosErr?.response?.data?.message ||
axiosErr?.response?.data?.error?.message ||
axiosErr?.message
console.error("[SharedCover] 删除模板失败:", err, "status=", status, "detail=", detail)
if (status === 403) {
message.error("删除失败(权限不足):" + (detail || "无权操作该模板"))
} else {
message.error("删除模板失败:" + (detail || "请稍后重试"))
}
}
},
[selectedTemplateId],
@@ -110,7 +110,12 @@ const CoverSettingsModal: React.FC<CoverSettingsModalProps> = ({
{tpl.is_system && <span className="xx-cover-template-badge">✨ 系统</span>}
</div>
<div className="xx-cover-template-actions" onClick={(e) => e.stopPropagation()}>
<Button buttonType="ghost" buttonSize="sm" onClick={() => onEditTemplate(tpl)}>
<Button
buttonType="ghost"
buttonSize="sm"
onClick={() => onEditTemplate(tpl)}
title={tpl.is_system ? "基于此模板新建自定义模板" : "编辑模板"}
>
{tpl.is_system ? "复制" : "编辑"}
</Button>
{!tpl.is_system && (