feat(themes): 添加可编辑的站点外观和皮肤主题(#408)
This commit is contained in:
1 parent
c768fccbc2
commit
5e66cb7c45
70 files changed
+3654
-327
No files matched your search
@@ -1152,3 +1152,42 @@
|
||||
- 验证结果:目标文件定向 Prettier 与 `git diff --check` 通过;固定 Bun 1.3.13、提交的 `bun.lock` 和干净依赖环境运行外观、后台、对象存储与找回密码四组专项测试,23 项全部通过、194 个断言无失败,TypeScript `tsc --noEmit` 为 0 错误。生产 Docker 多阶段构建转换 13,499 个模块并成功生成镜像,只保留项目既有的大分块提示。独立前端烟测返回 200,确认初始 HTML 不含内置品牌与 `/logo.svg`,新尺寸选择器已进入打包 CSS;真实管理员页面的深浅主题截图仍按 `docs/content/docs/progress/pending-test.mdx` 保留为人工验证项,不伪造登录态或业务配置。
|
||||
- 潜在影响:关闭外框后,宽或高较小、透明留白较多的 Logo 会在原容器范围内明显变大,但仍保持自身比例且不会溢出;如素材文件本身带有透明边距,视觉内容不会强制裁切到满边。开关仍属于外观页面草稿,需要点击原有“保存修改”才写入服务端;没有改成即时保存。
|
||||
- 逐项回滚:先使用 `.local/ui-change-backups/batch-134/` 中对应原件逐项恢复本批六个源码/文档文件,再恢复本台账并执行其 `MANIFEST.sha256` 校验;恢复前如文件已包含后续批次,先复制当前版本。本批不依赖 Git 历史做本地回滚。
|
||||
|
||||
## 批次 135:站点及外观、全站皮肤、SEO/备案与品牌残留收口
|
||||
|
||||
- 日期时间:2026-09-03 12:45:00 +0800
|
||||
- 目的:将“外观管理”扩展并更名为“站点及外观”,让自定义站点名贯穿邮件、诊断、导出、插件和协议说明;新增 SEO、版权、ICP备案与可扩展皮肤主题库,同时保证自定义品牌首屏不会闪现内置品牌或默认皮肤。
|
||||
- 修改前状况:自定义站点名主要覆盖页面导航与登录场景,注册验证码和密码重置邮件仍写死内置品牌;SEO、页脚版权和备案没有统一配置;`skinId` 只保留占位且仅支持经典样式,颜色、控件状态和圆角散落在既有主题层。协议文档、诊断包、部分插件说明与画布导出仍存在可见内置品牌文案。
|
||||
- 涉及范围:后端外观 schema/公开投影、邮件与密码重置、诊断/LibTV/工作流插件、协议文档及其断言;前端外观 API/store/bootstrap、主题入口、皮肤注册表、公共页脚、登录场景、后台导航/表单/样式、插件/画布展示;功能文档、设计合同和本台账。仓库名、镜像/升级器路径、剪贴板与 localStorage key、插件 API version、数据库校验值和对象存储既有默认前缀继续作为技术兼容标识保留。
|
||||
- 具体改动:外观 schema 升级为 v4,新增 SEO 标题/描述/关键词、版权、备案开关/号码并对旧配置按当前品牌补全;邮件发件人留空或沿用历史内置名时自动继承当前站点名,注册与重置主题/正文动态品牌化。新增 `skin-themes.ts`,以 primitive、semantic、component 三层令牌定义经典黑白、创作室青橙、暖调柿棕、品牌紫蓝四套皮肤;经典皮肤覆盖表为空,三套扩展皮肤同时定义亮暗背景、文字、表面、边界、控件 hover/active/selected/focus、开关、管理端/登录页和三级圆角,并与 Ant Design token 合并。后台按品牌、登录内容与媒体、SEO、首页收尾与备案、皮肤主题五段排列,继续使用原保存/未保存保护;备案链接固定为工信部备案系统。动态 metadata 覆盖 title、description、可选 keywords、Open Graph、Twitter、theme-color、favicon 与 canonical;公共登录场景增加版权/备案页脚。协议和插件运行时说明改为中性“宿主”,默认品牌与“一键恢复影策默认”仍保留。
|
||||
- 验证结果:`git diff --check` 通过;固定 Bun 1.3.13 专项测试 28 项、265 个断言全部通过;隔离干净依赖的 TypeScript `tsc --noEmit` 为 0 错误;Go 1.25 中协议包、本次外观/邮件/密码重置相关测试全部通过并完成 gofmt 检查。后端和前端生产镜像构建成功,Vite 8.1.5 转换 13,513 个模块,仅有既有大分块提示。后端全量测试中的 3 个存储/公告原子性用例在未修改的线上 v1.2.5 源码中同样独立失败;前端全量 Bun 套件为 1,358 通过、27 失败、2 error,失败集中在既有全局 `window` 测试污染与未改动模块,均作为上游基线记录。生产浏览器覆盖 `/register` 与 `/forgot-password` 的 1440×900、1280×800、430×932、390×844,四档均 `scrollWidth === clientWidth`、无内置品牌正文、动态 SEO/版权正确;管理后台因浏览器无登录态按权限边界跳回登录页,真实后台亮暗与四皮肤保存仍保留为人工验收项。
|
||||
- 集成验证:在隔离容器环境完成 schema 6/6 迁移、前后端健康、公开路由、HTTP→HTTPS 和未登录管理员 API 权限边界检查;既有自定义品牌、英文标识、classic 皮肤与 appearance 配置摘要保持不变,新 SEO/版权按当前品牌补全,备案默认关闭。测试没有覆盖或改写运维平台、代理、证书及其他站点资源。
|
||||
- 潜在影响:首次读取旧 appearance JSON 时公开投影会即时补全新字段,但只有管理员保存后才写回;历史 `FromName = 影策` 现在被视为继承站点名,管理员明确填写其他发件人名称仍保持独立。关键词字段为兼容其他搜索引擎或站内扩展保留,界面不承诺 Google 排名效果。扩展皮肤覆盖共享语义层,因此尚未迁移到语义 token 的少数历史业务专用颜色不会随皮肤变化;后续皮肤应继续通过注册表扩展,不在页面按 ID 增加分支。
|
||||
- 逐项回滚:源码以基线提交 `f8e87bcc4ce3e6f7eae7a89dc8b9231801116072` 为准,按本批涉及范围逐项恢复并保留后续修改。本批不增加关系型数据库迁移,回滚外观代码时仍应先备份现有 appearance 配置;`project-memory/` 继续忽略且不进入 Git。
|
||||
|
||||
## 批次 136:可编辑皮肤主题库与组件令牌统一
|
||||
|
||||
- 日期时间:2026-09-03 14:08:28 CST
|
||||
- 目的:把批次 135 的固定皮肤注册表升级为真正可维护的主题库。默认经典主题继续精确保留项目原始外观并永久只读;其他主题允许新建、复制、改名、编辑、启用与删除,预置配色只作为初始数据,而不是写死的主题分支。
|
||||
- 领域与安全合同:外观 JSON schema 升级为 v5,新增 `skinThemes`,不增加关系型数据库迁移。主题库最多 16 套;每套包含浅色/深色各 41 项语义颜色,以及按钮、输入、卡片、弹层、菜单、复选框圆角、三档高度、描边、焦点环、图标尺寸、按钮字重、悬停抬升、两档动效和阴影在内的 17 项组件参数。颜色只接受 6/8 位 HEX,数值与相互关系由后端校验;不接受任意 CSS、选择器、URL 或脚本。公开接口只返回当前 `activeSkin`,管理接口才返回完整主题库。经典主题由服务端逐字段与规范值比对,伪造请求也不能修改或删除。
|
||||
- 后台交互:复用“站点及外观”原有卡片、表单、操作栏和统一草稿/保存模型。主题库卡片同时显示色板、名称、说明、锁定、选中、复制与删除动作;可“从默认新建”或“复制当前”。编辑区支持主题名称/说明、浅色/深色切换、实时控件组合预览、四组语义颜色和组件参数。删除当前主题时草稿切回经典主题;保存前允许继续编辑非法中间 HEX,但前端保存和后端权威校验都会阻止其生效。
|
||||
- 全站映射:自定义主题同时投影到根节点 CSS Custom Properties 与 Ant Design 全局/组件 token,统一按钮、输入、选择、菜单、开关、勾选框、卡片、弹层、图标、状态色、后台、登录页与工作区。默认主题不写任何覆盖变量,保持原 CSS 和 Ant 配置。应用仍先取得公开外观并应用主题后才动态导入 React,避免自定义主题首屏闪现经典色系。
|
||||
- 研究依据:采用 Design Tokens Community Group 的分组/类型思想、Style Dictionary 的平台无关层级、Ant Design 的 Seed/Map/Alias 与组件 token,以及浏览器原生 CSS Custom Properties。当前单应用不增加 Style Dictionary 构建依赖,保留未来标准令牌导入导出空间。
|
||||
- 验证结果:Go 1.25 外观专项测试通过并完成 gofmt 检查。固定 Bun 1.3.13 在独立工作卷中从提交的 `bun.lock` 安装依赖;外观、后台、对象存储与密码重置 5 组 28 项测试、235 个断言全部通过,完整 `tsc --noEmit` 为 0 错误。前后端生产镜像构建成功,Vite 8.1.5 转换 13,514 个模块,仅保留既有大分块提示。候选前端在 127.0.0.1:17301 健康、0 重启,初始 HTML 不含内置品牌或 `/logo.svg`;重建后的候选后端使用独立 SQLite 临时卷完成插件扫描、健康和 schema v5 `activeSkin` 启动烟测。
|
||||
- 集成验证:隔离环境迁移正常退出,schema 保持 6/6,前后端与持久服务健康;公开 `activeSkin` 仅返回经典主题当前投影、41 项颜色和 17 项组件参数,完整 `skinThemes` 未泄漏。既有自定义品牌、Logo、视频、SEO、备案和 appearance 数据摘要保持不变,公开路由、API、HTTPS 跳转及未登录权限边界均符合预期。
|
||||
- 打包防护:一次 macOS tar 上下文携带 `._*` AppleDouble 旁车文件,插件扫描将旁车误判为损坏插件包。候选镜像在进入可用发布前被拒绝;清除旁车、在 `.dockerignore` 增加 `._*`/`.DS_Store` 防护并重建后,独立后端启动烟测和插件扫描通过。此记录说明跨平台打包原因,不包含目标服务器信息。
|
||||
- 浏览器验收:注册页覆盖 1440×900、1280×800、430×932、390×844,四档 `scrollWidth === clientWidth`,无可见内置品牌残留;标题、description、favicon、theme-color、版权和当前经典主题正确。1440 与 430 截图完成视觉检查,媒体、层级、文字、表单和响应式无阻断。管理路由按权限正确跳转到 `/login?next=%2Fadmin%2Fsettings%2Fappearance`;测试会话无管理员登录态,因此真实主题增删改保存与后台亮暗截图继续列入人工验收,不伪造账号或写运营配置。
|
||||
- 回滚与残余风险:本批不增加关系型数据库迁移;源码回滚应成对恢复 schema v5 外观结构、后端校验、前端类型/编辑器和主题映射,并先备份当前 appearance JSON。`project-memory/` 继续忽略且不进入 Git。
|
||||
|
||||
## 批次 137:主题状态色、真实色板与管理员后台菜单圆角收口
|
||||
|
||||
- 日期时间:2026-09-03 15:26:03 CST
|
||||
- 目的:在批次 136 的可编辑主题库上补齐开关、警告/危险操作和同类控件状态,让颜色选择器只由色块触发,让主题卡片展示该主题真实使用的颜色,并确认“菜单圆角”只作用于管理员后台左侧菜单;同时重新设计三套非默认预置主题的配色。默认经典主题继续锁定且不可修改。
|
||||
- 令牌与兼容:外观 JSON schema 从 v5 升至 v6,不增加关系型数据库迁移。每个明暗模式由 41 项扩展为 50 项颜色令牌,新增开关开启背景/悬停/手柄、关闭背景/悬停/手柄,以及危险悬停、危险按下和危险前景 9 项。内置预置按规范值补齐;历史自定义主题缺失字段时从主色、控件和危险色确定性派生,既有主题无需手工迁移即可读取。CSS Custom Properties、Ant Design 全局状态色、Button 与 Switch 组件 token 使用同一语义来源。
|
||||
- 交互与视觉:删除主题按钮改为 `primary + danger`,普通、hover、focus、active 均使用主题自己的危险色;系统成功、警告、错误/危险和信息状态统一映射主题状态色。Switch 的开启/关闭背景、悬停和手柄分别可配,选中态同时保留边界与轻微焦点环,不再只靠几乎不可见的灰度差。颜色项外层改为普通容器,只有可见色块上的原生颜色输入会打开拾色器,文字、HEX 输入和留白不会触发。主题卡片从明暗两套 50 项真实角色中按注册表使用频次交错去重,固定单行溢出裁切,空间不足时自然只显示高频前色。
|
||||
- 预置主题:保留 `classic / 经典黑白` 不变;另外三套改为 `青瓷工作室(雾白青瓷 · 珊瑚点睛)`、`暖柿纸境(米纸暖棕 · 柿橙强调)`、`霓光紫境(冷白雾紫 · 夜幕电光)`,各自拥有独立的亮暗背景、主色、交互色、状态色、开关色和危险色,仍可改名、编辑、复制、删除。
|
||||
- 管理员菜单圆角:本批按用户澄清只处理管理员后台左侧菜单。既有 Ant `Menu.itemBorderRadius/subMenuItemBorderRadius` 继续读取 `skin.tokens.components.menuRadius`;自定义后台导航 `.admin-shell .app-workspace-nav-link` 从固定 `8px` 改为 `var(--menu-radius)`,主题预览新增“后台菜单”样例并直接使用当前草稿的 `menuRadius`。未改前台、普通用户工作区或其他无关导航圆角。
|
||||
- 验证结果:修改文件通过定向 Prettier 与 `git diff --check`。固定 Bun 1.3.13、提交的 `bun.lock` 和干净依赖环境运行外观主题专项测试 8 项全部通过、53 个断言无失败,完整 `tsc --noEmit` 为 0 错误;Go 1.25 外观与密码重置专项测试通过。生产后端镜像编译成功,Vite 8.1.5 转换 13,514 个模块并在约 8.69 秒完成,仅有既有大分块提示。隔离候选环境的 `/` 与 readiness 返回 200,schema v6 公开主题为明暗各 50 色、`menuRadius=8`。
|
||||
- 集成验证:隔离迁移正常退出,schema current/expected 6/6,公开主题可从 schema 5 配置读取并投影为 schema 6;既有 appearance 数据摘要保持不变。首页、注册、登录、找回密码、后台深链、liveness、readiness、公开外观与版本接口均通过,未登录管理员外观 API 返回 401。生产构建产物已确认包含 `.admin-shell .app-workspace-nav-link{border-radius:var(--menu-radius)}` 与“后台菜单”预览。
|
||||
- 浏览器验收:1440×900、1280×800、430×932、390×844 均无横向溢出、无可见内置品牌或仓库名残留,首屏直接显示当前自定义品牌。测试会话无管理员登录态,因此真实主题增删改保存、危险按钮/开关各状态和后台菜单圆角的登录后截图仍留作人工验收,不伪造账户或运营数据。
|
||||
- 回滚与残余风险:本批不增加关系型数据库迁移;源码回滚应成对恢复 schema v6 新增颜色字段、前后端兼容补全、Ant/CSS 映射、编辑器和测试。回滚前先备份当前 appearance JSON,避免丢失管理员在 schema v6 下保存的主题状态色。`project-memory/` 继续 Git 忽略且不进入 Git。
|
||||
Reference in new issue
Block a user