Files
NewBlog/src/data
dsh a88bb536ab 书籍页:手工书单为空时隐藏统计行和搜索/筛选条
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 条进度条
2026-09-15 11:05:39 +08:00
..
2026-09-14 20:44:12 +08:00
2026-09-14 20:44:12 +08:00
2026-09-14 20:44:12 +08:00