书籍页:手工书单为空时隐藏统计行和搜索/筛选条

books.json 是空的,所以「书籍」页顶上挂着一排
「0 本已读 / 0 本推荐 / 0 个领域」加搜索框、领域和评价筛选 ——
没数据可显示也没东西可筛,纯占地方。

改成 hasManualBooks = allBooks.length > 0 控制:
- 为空时整块(统计行 + 搜索框 + 领域筛选 + 评价筛选)不渲染
- 往 books.json 加了书自动回来,不用改代码
- 顺带补一个兜底空态:手工书单和微信读书都已读完都为空时,
  显示「书架还是空的」并提示两条填充路径

验证(双向都测了)
- books.json 为空时构建:本已读 / data-bookshelf-search /
  data-filter-books-category / data-filter-books-status 在产物里均 0 次;
  已读完分组和 6 张卡片不受影响
- 临时往 books.json 注入 1 本假书再构建:统计行、搜索框、领域筛选、
  评价筛选、手工书卡全部出现(测完已 git checkout 还原)
- 在读页未受影响:20 张卡 / 20 条进度条
This commit is contained in:
dsh
2026-09-15 11:05:39 +08:00
parent 95e5111fd8
commit a88bb536ab
3 changed files with 24 additions and 2 deletions
+2
View File
@@ -328,6 +328,8 @@ src/components/bookshelf-content.astro
**2. 书籍** —— 来自 `public/data/books.json`,由 `bookshelf-content.astro` 在构建时 import(文件必须存在)。另外两个文件 `papers.json` / `comics.json` 对应的漫画、论文分类已经移除,文件保留但不再被引用。
`books.json` 为空时,**统计行(N 本已读 / N 本推荐 / N 个领域)、搜索框、领域和评价筛选条会整块隐藏** —— 一排「0」加一排没东西可筛的按钮纯占地方。往 `books.json` 加了书它们会自动回来,不用改代码。手工书单和微信读书都已读完都为空时,会显示一句兜底提示。
**两个页面共用同一个组件**,不会出现样式跑偏:`bookshelf-content.astro` 收一个 `view: "reading" | "books"`,只是决定渲染哪一块。侧栏那两行是**真链接**(带 `aria-current` 和主色高亮表示当前页),不再是页内锚点。
## 部署