From 0aea791c3d3d2d045c55e442d813b79525f9190e Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Fri, 25 Sep 2026 22:20:43 +0800 Subject: [PATCH] =?UTF-8?q?fix(cover):=20=E7=B3=BB=E7=BB=9F=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF=E7=82=B9=E5=87=BB'=E5=A5=97=E7=94=A8'=E8=B5=B0?= =?UTF-8?q?=E6=96=B0=E5=BB=BA=E8=B7=AF=E5=BE=84=EF=BC=9B403/401=E9=94=99?= =?UTF-8?q?=E8=AF=AF=E6=8F=90=E7=A4=BA=E5=A2=9E=E5=BC=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. CoverSettingsModal: 系统模板按钮从'编辑'改为'套用',语义更清晰 2. useSharedCover.handleEditTemplate: 系统模板传入时自动清掉id+is_system,让handleSaveTemplate走create分支而非update,避免触发后端'系统模板不可修改'403 3. useSharedCover错误处理增强:提取axios response的detail/message信息,区分401(登录过期)/403(权限不足)/其他错误,提示更明确 4. 所有CRUD操作的console.error补充status和detail信息,便于后续问题定位 --- .../src/components/cover/useSharedCover.ts | 65 +++++++++++++++++-- .../cover-settings/CoverSettingsModal.tsx | 7 +- 2 files changed, 65 insertions(+), 7 deletions(-) diff --git a/apps/web/src/components/cover/useSharedCover.ts b/apps/web/src/components/cover/useSharedCover.ts index eac74e189..4db30d162 100644 --- a/apps/web/src/components/cover/useSharedCover.ts +++ b/apps/web/src/components/cover/useSharedCover.ts @@ -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], 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 9877c909e..c03ae826c 100644 --- a/apps/web/src/pages/generate/components/cover-settings/CoverSettingsModal.tsx +++ b/apps/web/src/pages/generate/components/cover-settings/CoverSettingsModal.tsx @@ -110,7 +110,12 @@ const CoverSettingsModal: React.FC = ({ {tpl.is_system && ✨ 系统}
e.stopPropagation()}> - {!tpl.is_system && (