From 4de4fa43912c175fa45f666644531c107194bef6 Mon Sep 17 00:00:00 2001 From: jxxghp Date: Thu, 13 Aug 2026 22:06:22 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=8F=92=E4=BB=B6=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=A4=B9=E5=93=8D=E5=BA=94=E6=A8=A1=E5=9E=8B=E5=85=BC=E5=AE=B9?= =?UTF-8?q?=E6=96=B0=E7=89=88=E5=AF=B9=E8=B1=A1=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit GET /plugin/folders 的响应模型 PluginFoldersData 只能校验旧版 数组格式,前端实际保存的是含展示配置的对象格式,导致建文件夹/ 移入插件后刷新时响应校验失败(500),文件夹恢复为空。改为同时 兼容新旧两种格式。 --- app/schemas/plugin.py | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/app/schemas/plugin.py b/app/schemas/plugin.py index e06538675..f6035ee33 100644 --- a/app/schemas/plugin.py +++ b/app/schemas/plugin.py @@ -1,4 +1,4 @@ -from typing import Optional, List, Dict +from typing import Optional, List, Dict, Union from pydantic import BaseModel, Field, RootModel @@ -165,8 +165,27 @@ class PluginReleaseData(BaseModel): items: List[PluginReleaseItem] = Field(default_factory=list) -class PluginFoldersData(RootModel[Dict[str, List[str]]]): - """插件文件夹与插件 ID 列表映射。""" +class PluginFolderConfigData(BaseModel): + """新版插件文件夹配置(对象格式,含展示配置与插件列表)。""" + + # 文件夹内插件 ID 列表 + plugins: List[str] = Field(default_factory=list) + # 文件夹排序值 + order: Optional[int] = None + # 文件夹图标 + icon: Optional[str] = None + # 文件夹颜色 + color: Optional[str] = None + # 文件夹渐变 + gradient: Optional[str] = None + # 文件夹背景 + background: Optional[str] = None + # 是否显示图标(前端字段为驼峰命名) + show_icon: Optional[bool] = Field(default=None, alias="showIcon") + + +class PluginFoldersData(RootModel[Dict[str, Union[List[str], PluginFolderConfigData]]]): + """插件文件夹与插件配置映射,兼容旧版数组格式与新版对象格式。""" class PluginDashboardMetaItem(BaseModel):