Files
reader/docs/ui-review

UI 评审截图

由 npm run ui:review 生成:真实 Chromium(390×844,2x)加载生产产物, 对着一个替身 API 逐屏截图并测量。

截图 场景 看什么
01-shelf.png 书架 第一屏:先看到书,再看到控件
02-reader.png 阅读页 顶部书名 / 日夜快捷按钮 / 正文 / 本章滑杆与四个底部入口
03-reader-no-chrome.png 阅读页 · 收起工具栏 工具栏一起收起,正文保持原位置,底部只留书名、页码与进度
04-panel-toc.png 目录 · 半屏 下半屏,上半屏正文仍可见
05-panel-settings.png 阅读设置 · 半屏 一行式行:标签在左、控件在右
06-reader-paged.png 阅读页 · 翻页模式 分栏后的一页,页数应与可翻次数一致
07-reader-sepia.png 阅读页 · 米黄 主题切换后的同一页
08-reader-dark.png 阅读页 · 夜间 暗色下的正文与工具栏
09-panel-txt.png TXT · 正文排版 纯文本专属的缩进/段间距/编码三行,且面板仍是半屏
10-shelf-paged.png 书架 · 第二页 没有「继续阅读」横排;默认按最近阅读排序(第一个 chip 是填充态);分页器在封面下方;书库与书源入口在标题下方
11-library.png 书库 · 浏览 搜索框与封面网格;「加入书架」只画在不在书架的书上,管理员可进入文件管理;没有上传或书架设置入口
12-library-files.png 书库 · 文件管理 管理员文件页:面包屑与文件行、书籍状态徽章、上传与新建;返回按钮在子目录回上级,在根目录回书库浏览页
17-shelf-unshelve.png 书架 · 从书架拿掉 封面右上角的「⋯」打开后的动作菜单,以及「从书架拿掉」的确认框:写清只是从书架拿掉、磁盘上的文件不动
15-library-preview-shelve.png 书库 · 浏览 · 上架 点了某本书的「加入书架」之后:报告、目录重读,以及角标消失的那一本
16-library-search.png 书库 · 浏览 · 搜索 商城式布局的搜索框:输入之后 URL 带上查询、网格只剩匹配的书,字段两边的留白让控件不贴着封面
13-reader-paged-scrub.png 阅读页 · 滑杆拖到本章第 3 页 分栏模式下拖动底部滑杆:读数与画面都停在本章内,不换章
14-reader-epub-image.png EPUB · 插图 章节文档里的图片真的画出来了,而不是浏览器的破图占位符;比页面宽的那张也在栏内

自动测量

检查 结果 说明
手机阅读交互回归 ✅ reader-regression.mjs: 显隐、翻页、面板、主题、EPUB、漫画、PDF 加载、320px 窄屏
翻页不再每次都发两次 sync ✅ 8 次翻页 + 6 秒静默:2 次 POST / 0 次 GET(共 2 次 sync 请求)
EPUB: 章节里的图片真的画出来了 ✅ naturalWidth=240 显示 240x160 src="/api/v1/books/review-illustrated/assets?reader-book-resource=1&ref=OEBPS%2FI"
EPUB: 插图下面的正文也在 ✅ 正文开头="台版 转自 天使动漫

插图下面还有正文,这样图片没显示出来的时候,空出来的位置也是看得见的。" | | EPUB: 比页面宽的插图被收进栏内 | ✅ | 出版方写的是 1400px,画出来 342px / 栏宽 342px(布局 342x39,dpr=2) | | EPUB: 收窄插图没有改变它的比例 | ✅ | 原图 8.750 / 画出来 8.752 | | EPUB: 宽插图没有让页面横向溢出 | ✅ | document 溢出 0px / 阅读面溢出 0px | | 搜索框: 两边都从封面列内缩,且左右相等 | ✅ | 左 14px / 右 14px(字段 0 则为贴着封面) | | 搜索框: 放大镜与输入框中线对齐 | ✅ | 放大镜中线 173.0 / 输入框中线 173.0(偏差 -0.0px,字形 16.796875px,框高 48px) | | 书架: 第一个排序是「最近阅读」且默认选中 | ✅ | chips=最近阅读* / 最近入库 / 书名 / 作者 | | 书架: 「最近入库」仍然在排序里 | ✅ | chips=最近阅读 / 最近入库 / 书名 / 作者 | | 书架: 排在最前的是最近读过的那本 | ✅ | 前两本:剑来 第1卷 / 剑来 第2卷 | | 书架: 没有「继续阅读」横排 | ✅ | continue-row=false 卡片 0 张 | | 书架: 每张封面有一个「⋯」操作入口,按得着也看得见 | ✅ | 28.0×28.0 在卡片内=true / 开书区覆盖整卡=true / 静止不透明度 0.55 | | 书库: 浏览页是封面网格,没有文件行 | ✅ | 封面 60 张 / 文件行 0 行 | | 书库: 浏览页有搜索框(商城式布局) | ✅ | 搜索框=true label="搜索书库" | | 书库: 搜索框两边留白,不贴着封面 | ✅ | 字段左 12px / 右 12px,封面比字段再内缩 14px | | 书库: 浏览页的网格铺满窗口,而不是被书架的宽度上限截住 | ✅ | 网格 390px / 窗口 390px,封面占 30 行 | | 书库: 浏览页提供文件管理入口,不放上传、新建或书架设置 | ✅ | 头部控件=返回 / 文件管理 | | 书库: 浏览页只给不在书架的书画「加入书架」,且不是全给 | ✅ | 角标 1 个 / 卡片 60 张,提示="这一页有 1 本还不在书架上,点封面上的按钮可以加进去" | | 书库: 输入搜索词后 URL 与网格一起变,只剩匹配的书 | ✅ | 前 60 张 → 后 2 张(剑来 第1卷 / 第一卷 插图),hash=#/library?q=%E7%AC%AC1%E5%8D%B7 | | 书库: 搜索词进 URL,成为可以发给别人的链接 | ✅ | hash=#/library?q=%E7%AC%AC1%E5%8D%B7 字段="第1卷" | | 书库: 文件管理页画的是文件行,没有封面网格 | ✅ | view=files 行 4 / 封面 0,hash=#/library/files | | 书库: 文件管理页有上传/新建,没有搜索框 | ✅ | 右上角=返回 / 上传书籍 / 新建文件夹 / 书库,搜索框=false | | 书库: 文件管理页提供返回按钮,不使用浏览页签 | ✅ | 头部控件=返回 / 上传书籍 / 新建文件夹 / 书库 | | 书库: 文件管理页没有「下架 / 从书架拿掉 / 加入书架」任何一处 | ✅ | 页面文本命中=无 | | 书库: 文件管理页仍然标出不在书架的书(徽章不是控件) | ✅ | 徽章=true | | 书库: 从文件管理回到浏览是换页,URL 也跟着换 | ✅ | 浏览=true 文件=false hash=#/library 封面 60 张 | | 书架标题栏: 书架设置图标可见,且不超出按钮 | ✅ | 书架设置 · 适中: 18.4×18.4 in 44 box, inside=true | | 书架标题栏: 图标不比标题大(同一行的视觉重量) | ✅ | 图标 18.4 vs 标题 28 |

全部通过。