后端 - widget_catalog 加 3 列:scope_type(三态可见范围)/ role_types(可见角色)/ role_alias(角色专属命名 JSON) - 新增两表:widget_catalog_school(点名表,uk_widget_school)、widget_school_setting(校级覆盖层,uk_widget_sch) - WidgetController 新增 GetWidgetCatalogList / SaveWidgetCatalog / DeleteWidgetCatalog / GetWidgetSchoolSetting / SaveWidgetSchoolSetting;权限拆 checkSuperAdmin(仅超管)与 checkSchAdmin(超管或 roleId∈{2,5,7}) - SaveWidgetSchoolSetting 强制 schId 取当前登录校,前端传参不采信(防越权) - 显示名三级链:校级别名 > 角色专属命名 > 组件名;role_alias 坏 JSON 降级不抛 - 启动期幂等 seeding(空库才写 3 条内置目录行) - 手工 DDL 脚本 resources/sql/widget_catalog_v2.sql(含回滚) 前端 - WidgetManage 重写为卡片网格:超管/校管双视角、类型页签 + 搜索、拖拽排序、启停、 删除、登记内置组件、空态引导 - 新增 WidgetCard / WidgetEditModal / WidgetRegisterModal - UserSettingApi 加 6 个方法;types 加 WidgetCatalog 接口 - 管理端列表整行回传(SaveWidgetCatalog 为整行 merge) 退役 - 删除 SysSetting.vue / SysTempManage.vue / AppSettingApi.ts 与后端 AppSettingController / AppCategory(SQL) 全链路,清理路由、Settings 导航与样式分支 - 保留 SysSettingApi.ts(壁纸/logo 池管理仍在使用)