Files
photo-live/docs/plans/2026-09-22-UI06-全端视觉统一实施方案.md
T
浅念 37d88da4bc docs(ui05,ui06): admin analysis+HTML preview, app-preview evidence, UI06 unified visual plan
- admin-preview-2026-09-22/ 20页新版后台HTML原型+截图+validation(UI05 交付)
- app-preview-2026-09-22/ 截图/validation/check 脚本入库及小改
- admin-redesign-concept 概念图
- UI05 管理后台分析与新版设计说明、用户列表分页计划文档
- UI06 全端视觉统一实施方案(以两个 HTML 预览为唯一视觉基准)
- services/api g4-sync-once 手动同步脚本

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-22 22:42:00 +08:00

19 KiB
Raw Blame History

UI-06:全端视觉统一实施方案(管理后台 + App,以 HTML 示例为唯一视觉基准)

版本:1.0 日期:2026-09-22 状态:待执行。本文只规划,不代表页面已还原。 目标:把 apps/admin(Vue3 + Element Plus / Art Design Pro 裁剪版)与 apps/mobile(Flutter)的实际界面,逐页还原到两个 HTML 示例的视觉效果,并以截图对照 + 测试服务器部署作为验收证据。

0. 给执行者的强制说明

两个 HTML 预览目录是唯一视觉真相源。 用户已明确:「要以示例 HTML 效果为主」。任何规格表、旧方案、设计板、组件库默认值与示例冲突时,一律以示例为准。

  • 管理后台示例(20 页,screenshots/01.png–20.png 为渲染证据)
  • App 示例(20 页,screenshots/01.png–20.png 为渲染证据)

裁决优先级(高→低):

  1. HTML 示例的实际渲染效果(以 screenshots/ 与浏览器打开实物为准)
  2. UI-05(后台)/ UI-03R(App)中与示例一致的数值规格、契约对齐项、保护项
  3. 组件库(Element Plus / Material)默认值——不得作为不还原的理由

还原 = 修改真实代码。两个预览目录本身只读,不得为迁就实现反向修改示例。

其他强制项:

  • 不得用「测试/类型检查通过」代替视觉验收;每页必须真实截图并对照示例。
  • 不得只换颜色不改结构:示例中相册封面卡、照片网格、整页表单、菜单分组均为结构性改动,必须落地。
  • 不得覆盖用户当前未提交改动;每批开工前核对 git status,异常先停下确认。
  • 不自动提交推送打标签;每批完成提交需用户可见信息。不自动部署生产、不操作云资源;测试服务器部署按 §4.3 既有流程。
  • 示例中的样例数据(人数、文件名、"82 uploaded"、演示二维码)不得抄进生产默认值。

1. 基线与前置

1.1 基线提交

开工前把工作树中未入库的成果先提交(属上一阶段产物,不属本方案改动):

  • docs/designs/admin-preview-2026-09-22/(含 screenshots、validation.json、image-prompt.txt)
  • docs/designs/app-preview-2026-09-22/(含 screenshots、validation.json、check-preview.cjs 及 app.js/styles.css 未提交小改)
  • docs/designs/admin-redesign-concept-2026-09-22.png
  • docs/plans/2026-09-22-UI05-管理后台分析与新版设计说明.md
  • docs/plans/2026-09-22-用户列表分页与同步信息展示-实施计划.md
  • services/api/src/scripts/g4-sync-once.ts

基线提交后新建 docs/plans/progress/UI06-验收记录.md 骨架。

1.2 Before 截图

本地起 admin(pnpm --filter @photo/admin dev,接口指向测试服务器 cn API),用 Playwright 对现有页面截图存入 docs/designs/ui06-implementation/before/,命名与示例编号对齐(02-albums.png 等)。App 侧 before 不直接复用 UI-03 截图作为证据(仅覆盖 10/20 页且为 540×960 设备分辨率)——A0 阶段在固定 390×844 画布对全部 20 页补拍当前态。

2. 管理后台线(先行)

视觉规范依据示例与 UI-05 §5:主色 #1A73E8;工作区背景 #F5F7FA;边框 #E5EAF1;卡片圆角 12、控件 8;左侧导航 216px、顶部 64px、内容最大宽 1660px、常规左右边距 30px、卡间距 20–22px;页面标题 27px、卡片标题 17px、正文 12–13px、辅助 10–11px;字体为系统无衬线栈、Windows 中文优先 Microsoft YaHei;状态色绿=成功/公开、橙=待处理、红=危险/失败、灰=非活跃,且必须同时有文字。

2.1 二十页映射与结构性改动

# 示例页 代码入口 结构性改动(以示例为准)
01 登录 views/auth/login/index.vue 整页重做:摄影拼贴主视觉 + 居中表单;摄影素材先以示例 assets 概念图裁片作占位入库,标记为占位,待用户提供正式品牌素材后替换
02 相册列表 views/albums/manage/index.vue 默认封面卡片三列(1440 宽),可切表格;搜索按当前已加载过滤(契约无全局搜索,UI-05 §4.3);token 收敛进分享/高级区
03 照片网格 views/albums/detail/AlbumPhotos.vue 新增照片网格视图 + 管理大图,保留表格/筛选/批量语义切换
04 成员 detail/AlbumMembers.vue + AlbumTransferDialog.vue 列表视觉简化;交接独立确认步骤
05 分类 detail/AlbumCategories.vue 双语同屏编辑,禁止全量替换丢语言
06 水印 detail/AlbumWatermark.vue 参数左、摄影预览右双栏;即时预览
07 分享 detail/AlbumShareCard.vue 分享卡视觉对齐:封面、二维码、复制链接布局
08 新建表单 manage/AlbumFormDialog.vue → 改为整页表单路由 从对话框改整页(示例 08);新增隐藏路由(沿用相册详情隐藏路由先例,保持父菜单高亮);字段分组、footer 按钮对齐;manage/index.vue 与 detail/index.vue 两处消费入口一并改造
09 编辑表单 同上(edit 模式,含 detail/index.vue:153 编辑入口重接) 整页 + 资料/访问分区;translations 合并保留其他语言
10 账号治理 system/users/ 状态分列(凭据/来源/锁定);保留 2026-09-22 刚上线的分页 + 同步档案列,仅重排视觉
11 用户同步 system/user-sync/ 状态摘要卡 + 历史 + 失败明细弹层视觉对齐
12 用量 system/usage/ 汇总卡单位一致、资产构成、阈值对话框对齐
13 展示位列表 system/embed-slots/index.vue 列表视觉对齐;启停/绑定/收起语义不变
14 展示位配置 SlotFormDialog.vue 等 参数与预览复用 UI-04 真实组件(v2 固定 195×280);不搬示例里的简化 CSS 预览(UI-05 §4.4)
15 品牌资产 detail/AlbumBannerUpload.vue 收进相册详情资产页签,独立视觉区
16 照片大图 AlbumPhotos 新增 PhotoPreview 深色舞台 + 元信息 + 隐藏/恢复/软删除动作条
17–19 403/404/500 views/exception/ 品牌统一、回退路径视觉对齐
20 同步批次详情 system/user-sync/index.vue 失败明细抽屉(:165 ElDrawer) 抽屉视觉对齐示例 20

菜单分组(仅展示层重排,路由与权限不动,UI-05 §6):工作空间(相册管理、网站展示位)/ 组织与治理(账号管理、用户同步、存储与用量)。

2.2 契约核对(B0 内完成,结论写进验收记录)

对测试服务器实际响应核对,不得凭空发明:

  • Album cover(可空签名 URL 摘要):核对测试服务器 fetchAlbumList 实际响应 → 补 apps/admin/src/types/api/album.d.ts Summary.cover → 卡片使用。分支处理:(a) 服务端已返回、仅部分相册无封面 → 中性占位验收;(b) 服务端响应根本无此字段(未实现)→ 属服务端补齐(OpenAPI 已定义、超出纯前端范围),停下向用户确认后再做,不得假造封面或 N+1 拉详情。
  • AdminPhoto.preview(thumb/browse 可空):核对响应 → 补类型 → 网格/大图使用;为空呈现真实空态;签名过期经受控重取。
  • 相册创建载荷仅下载开关;公开/上传开关属更新载荷:整页表单按契约禁用或解释,不得塞进创建请求。
  • 展示位 v2 displayMode/scrollSpeed/reactionsEnabled 已有类型;实施前重核 SlotFormDialog.vue 最新版本(工作树 UI-04 改动已提交,以 HEAD 为准)。

2.3 任务清单

B0 基线(半天)

  • §1.1 基线提交;git status 干净后开工。
  • 编写可复用 Playwright 截图脚本(登录 → 逐页 capture → 存 docs/designs/ui06-implementation/),后续 before/comparisons 全部用它;需有效测试服务器管理员账号(向用户获取,凭据不写入仓库)。
  • before 截图(admin dev + 测试服务器 API)。
  • 契约核对 §2.2 四项,结论记入验收记录。
  • 核对 Element Plus 主题变量入口(assets/styles/core/el-light.scss、el-ui.scss)与 Art 布局组件(components/core/layouts/)现状。
  • 出口:偏差清单 + 契约结论齐,才进 B1。

B1 主题 + 布局壳(1 天)

  • token 落地:以 admin-preview styles.css 的 :root CSS 变量块为对照来源,映射到 Element Plus 主题变量(--el-color-primary 等)与 Art token;字体按 §2(系统无衬线栈,Windows 中文优先 Microsoft YaHei);同库双部署不受影响。
  • ArtSidebarMenu 216px + 菜单分组标题;ArtHeaderBar 64px;保留权限、响应式抽屉、语言切换、账号菜单行为。菜单分组实现 = 调整 router/modules 的 meta(标题/分组/顺序),路径与权限标识不变。
  • 全部新增文案(菜单分组名、状态标签、表单字段等)走 vue-i18n zh/en 双语 key,不得硬编码中文或英文。
  • 深色模式(Art 模板自带)保持可用不重设计——示例仅浅色;token 改动后在深色下做可用性抽查,偏差登记验收记录。
  • 全局卡片/表格/按钮/输入/开关/标签视觉对齐示例(状态色 + 文字)。
  • 01 登录页重做(摄影拼贴素材以示例概念图裁片占位入库,验收记录登记"素材为占位")。
  • 抽查截图:布局壳 + 登录页 vs screenshots/01.png。
  • 出口:全局壳一致;未动业务数据流。

B2 共享业务组件(1–2 天)

  • AlbumCoverCard:封面 16:9 区域、标题、日期地点、状态行(Public/Uploads on 语义分开)、主操作(进入相册/分享);无封面中性占位;不显示 owner 显示名(契约无投影、避免 N+1,UI-05 §4.3)。
  • 列表/表格视图切换(保留游标 useCursorList 数据源,不换随机分页)。
  • PhotoGrid(桌面四列、选择框、状态角标、文件回退名、上传者)+ PhotoPreview 大图(签名 URL、隐藏/恢复/软删除入口)。
  • AlbumSummaryHeader(300×144 封面 + 紧凑资料,编辑/分享固定主操作)。
  • 统一状态标签、表单 footer、危险操作确认、错误定位样式。
  • 出口:组件级截图核对;AlbumPhotos 仍共用一份照片序列,无重复状态存储。

B3 页面批次(每批:完成 → lint/test 绿 → 本地提交(不推送) → 构建部署测试服务器 → 用户 32005 验收 → 通过后进下一批;不通过则修复后重新提交部署)

部署构建用 git archive HEAD,只含已提交内容——所以必须先提交再部署。B1/B2 为本地截图验收,不部署服务器;部署从 B3 批次开始。

  • B3a 核心批:02 相册列表 + 03 照片网格/表格(含 16 大图)+ 详情页壳(AlbumSummaryHeader 落地 detail/index.vue、页签重组)——页签宿主先改好,B3b/c 的各页签内容才有稳定挂载点。
  • B3b 管理批:04 成员 + 05 分类 + 06 水印 + 07 分享。
  • B3c 表单批:08 新建 + 09 编辑(整页表单路由,含 15 资产页签收纳)。
  • B3d 治理批:10 账号 + 11 同步(含 20 批次明细)+ 12 用量。
  • B3e 收尾批:13/14 展示位(对齐 UI-04 组件)+ 17/18/19 异常页。
  • 每批出口:该批页面 1440×1000 截图与示例并排对照入 docs/designs/ui06-implementation/comparisons/;窄屏 390 抽查一页;pnpm --filter @photo/admin lint typecheck test 绿;admin 相关 e2e 保持绿(UI-04 已于 8c4906c 全绿收尾,无"既有失败"豁免——本方案改动若致 e2e 失败须当批修复或登记偏差,不得沿用旧豁免说法)。

B4 回归与验收(半天)

  • 全 20 页截图对照齐;pnpm --filter @photo/admin lint typecheck test 全绿。
  • 部署测试服务器全量复核(§4.3);真实账号登录、相册卡片、照片大图、账号治理冒烟。
  • UI06 验收记录(后台部分)完成;偏差逐条列出(已修/接受+原因)。

3. App 线(管理后台验收后启动)

工程框架沿用 UI-03R(素材清单、固定 390×844 fixture、双轨证据、可量化阈值 ≤4dp、逐页截图流程);视觉参考从五张设计板切换为 app-preview HTML(20 页实物),两者同源,冲突以 HTML 为准。五张设计板降级为辅助参考。

页面映射沿用 UI-03 验收记录 §2(20 页 → lib/pages/ 各入口),不重复列出。

A0 复核基线

  • 固定 390×844 画布补拍当前 App 全部 20 页 before 截图(UI-03 截图仅 10/20 页且分辨率不符,只作历史参考)。
  • 逐页对照 app-preview screenshots/ 与补拍 before,重建「参考/当前/偏差/目标」表(UI-03R §1.2 表更新为 HTML 基准)。
  • 确认 Flutter(仓库固定版本)、字体、素材、截图工具可用。
  • 出口:不沿用 UI-03 全通过结论;新偏差表入库。

A1 素材与 fixture

  • 按 UI-03R §4/§7 建 docs/designs/ui03r-assets-manifest.md。素材分两轨:测试/fixture 素材可复用 app-preview assets/(低分辨率局部裁片,仅限固定画布验收);生产素材(登录拼贴、相册封面 ≥720px)必须另行准备合规资源——app-preview README 明确其素材"不作为生产图片素材",UI-03R §4.1 要求生产拼贴随包合规资源。生产素材未落实时在清单中列为阻塞项,不得以低清裁片顶替上线。
  • 固定英文数据、12 张照片、正常/异常状态 fixture 注入真实组件;生产隔离。

A2 公共组件

  • theme/tokens 显式化。注意 UI-03R §5.1 色板与 app-preview CSS 存在五处色值差异(softBlue #EEF5FF↔#EDF4FF、textSecondary #647084↔#69778E、successText #16794B↔#279966、errorText #B42318↔#E74E58、waitingText #996300↔#D89020)——按 §0 优先级以 HTML 示例实测值为准,不得以"两处一致"为由跳过核对;无胶囊根导航、两种分段、输入、按钮、Sheet、封面卡按示例重核。

A3 三个样板页

  • 01 登录、05 相册列表、14 上传中心对照 app-preview 达 UI-03R §8.1 阈值后推广。

A4–A6 其余 17 页

  • 按 UI-03R R04(02/03/04/06/07/08)、R05(09–12)、R06(13/15/16)、R07(17–20)分组推进,每页固定画布截图 + 对照 + 测量。

A7 全量验收

  • 视口矩阵(390 全量;320/430/横屏/平板/大字体/zh-CN/dark 抽查按 UI-03R §10.1)。
  • flutter analyze / flutter test 全绿(执行前 source scripts/flutter-env.sh)。
  • UI06 验收记录(App 部分)+ UI-03R 记录衔接说明。

4. 验收方法

4.1 后台逐页对照

  1. 打开示例对应页(HTML 实物)与本页实现,1440×1000 截图并排存 docs/designs/ui06-implementation/comparisons/。
  2. 核对项:布局结构、色彩、字号层级、卡片/控件形态、状态语义、操作入口位置。
  3. 允许偏差:真实数据与示例样例数据的差异(如实际封面图不同);须记录,不得借「数据不同」掩饰布局偏差。
  4. 窄屏:每批抽 1 页 390 宽检查(侧栏抽屉、表格横滚,不整页缩略)。

4.2 App 逐页对照

UI-03R §8 流程不变(参考裁片等比 390、固定画布截图、左右对照、几何测量表),参考来源换为 app-preview 截图;§8.1 阈值(≤4dp、字号 ≤1sp 等)继续有效。

4.3 测试服务器部署(每批后台改动后)

后台前端产物在 web 镜像(docker/web.Dockerfile,nginx 承载 viewer + /admin/),不在 server 镜像(server.Dockerfile 不构建 apps/admin)。后台视觉批次的部署流程:

  1. git archive HEAD | docker build -f docker/web.Dockerfile -t photo-live-web:ui06-<sha>-<日期> -(git archive HEAD 只含已提交内容,部署前必须已提交该批改动;VITE_* 构建参数集见 docs/plans/2026-09-21-测试服务器部署方案.md)。
  2. save/gzip → scp → docker load(与既有流程相同)。
  3. SERVER_IMAGE=<保持当前 server tag> WEB_IMAGE=photo-live-web:ui06-<sha>-<日期> docker compose -f docker-compose.cn.yml up -d(WEB_IMAGE 须带完整 photo-live-web: 仓库名——compose 默认值 photo-live-web:latest 同格式)→ restart web 容器(否则 nginx 缓存旧上游 IP 502)。
  4. 验证入口 http://219.157.255.213:32005/admin/;仅当本批同时改了 API/服务端才重建 server 镜像。
  5. 回滚 = 用上一批 WEB_IMAGE tag 重复步骤 3(镜像均在服务器本地保留)。

App 线无服务器部署,走本地固定画布 + 模拟器双轨证据。

5. 红线与保护项(两端通用,违反即回退)

  • 游标分页 useCursorList 语义保留;后台用户页 page/pageSize 新分页不回退。
  • 批量操作逐项成功/失败结果保留,不得全成功动画掩盖。
  • 账号自保护(自身角色/锁定不可改)、来源状态只读。
  • 水印/同步等异步任务「受理≠完成」语义保留。
  • 展示位 settings 整体替换时保留全部字段;v1/v2 区分,v2 固定 195×280。
  • translations 全量替换时合并保留其他语言。
  • App 上传引擎、权限契约、凭证续签零语义改动(lib/features 不动,样式工程如触及控制逻辑须补测试并登记)。
  • 同步账本(outbox/sync_inbox/sync_state)任何情况不清理不重置。
  • viewer/embed(UI-02/UI-04 线)不在本方案范围。

6. 交付物

docs/plans/2026-09-22-UI06-全端视觉统一实施方案.md   (本文)
docs/plans/progress/UI06-验收记录.md
docs/designs/ui06-implementation/
  before/            后台改动前截图
  comparisons/       每页示例 vs 实现并排对照
  README.md          索引与复现命令
docs/designs/ui03r-assets-manifest.md                (App 线,沿用 UI-03R 要求)

完成门槛:

  • 后台 20 页对照证据齐 + 测试服务器部署复核通过;App 20 页固定画布截图与结论齐(双轨)。
  • 无本方案列明的默认样式残留(紫胶囊、黑框分段、灰占位主视觉、ID 裸露等)。
  • 全部测试与类型检查绿;保护项回归通过。
  • 素材/真机等外部关口未完成时如实标注「部分完成」,不得宣称 100%。

7. 给 Claude 的执行指令

请执行 docs/plans/2026-09-22-UI06-全端视觉统一实施方案.md。视觉唯一基准是 docs/designs/admin-preview-2026-09-22 与 app-preview-2026-09-22 两个 HTML 示例,冲突一律以示例为准。先做 §1.1 基线提交与 B0(截图脚本 + before 截图 + 契约核对),再按 B1→B2→B3a–B3e 顺序推进管理后台(B1/B2 本地验收;B3 每批:lint/test 绿 → 本地提交不推送 → 按 §4.3 构建部署 web 镜像(restart web 容器)→ 用户在 32005 验收 → 通过后进下一批)。后台 B4 验收后启动 App 线 A0–A7(继承 UI-03R 工程标准,参考换 HTML)。每页必须截图对照,不得以测试通过代替视觉验收;保护项(§5)零损失;不覆盖用户未提交改动,不自动部署生产。