feat: 书库支持多选批量整理与移除,修正侧栏选中亮条

工具栏新增「选择」模式,卡片显示复选框,工具条提供全选、批量整理与
批量移除。多选时隐藏单卡操作并停用封面阅读入口,避免勾选途中误开
阅读器。全选只覆盖当前筛选结果,切换书架、标签或搜索后会剔除已不
可见的选中项,不对看不见的书执行批量操作。

批量标签用三态复选框:indeterminate 表示部分书持有,跳过即保持原样,
只有明确勾上或取消才统一应用。沿用单本的覆盖语义会静默抹掉其它书
已有的标签。所选书籍分属不同书架时,下拉默认「保持不变」。

侧栏行内的重命名与删除按钮改为绝对定位。此前它们虽然 opacity 为 0,
仍占据 flex 空间,使书架与标签的选中亮条比「全部书籍」窄 47px。书架
列表原为普通 block 无行间距,现与标签列表共用 .library-filter-list,
两处间距一致。
This commit is contained in:
lofyer
2026-08-03 17:18:33 +08:00
parent 381c07733a
commit 522b0f74a5
5 changed files with 488 additions and 17 deletions
+18 -4
View File
@@ -49,15 +49,17 @@
<h2>书架</h2>
<button id="addShelfBtn" class="notes-icon-btn" title="新建书架" aria-label="新建书架">+</button>
</div>
<button class="library-filter active" data-shelf="">全部书籍</button>
<button class="library-filter" data-shelf="__uncategorized__">未分类</button>
<div id="libraryShelfList"></div>
<div class="library-filter-list">
<button class="library-filter active" data-shelf="">全部书籍</button>
<button class="library-filter" data-shelf="__uncategorized__">未分类</button>
<div id="libraryShelfList" class="library-filter-list"></div>
</div>
<div class="library-sidebar-section">
<div class="library-sidebar-section-head">
<h3>标签</h3>
<button id="addTagBtn" class="notes-icon-btn" title="新建标签" aria-label="新建标签">+</button>
</div>
<div id="libraryTagList" class="library-tag-list"></div>
<div id="libraryTagList" class="library-filter-list"></div>
</div>
</aside>
<div class="library-content">
@@ -69,9 +71,21 @@
</div>
<span id="libStatus" class="status-bar"></span>
<div class="spacer"></div>
<button id="librarySelectModeBtn" class="tb-btn ghost" aria-pressed="false">选择</button>
<button id="rescanBtn" class="tb-btn ghost">重新扫描</button>
<button id="addLocalBtn" class="tb-btn">+ 添加本地</button>
</div>
<div id="librarySelectionBar" class="library-selection-bar hidden">
<label class="library-select-all">
<input type="checkbox" id="librarySelectAll" />
<span id="librarySelectAllLabel">全选</span>
</label>
<span id="librarySelectionCount" class="status-bar">未选择</span>
<div class="spacer"></div>
<button id="libraryBulkOrganizeBtn" class="tb-btn ghost" disabled>批量整理</button>
<button id="libraryBulkRemoveBtn" class="tb-btn danger" disabled>批量移除</button>
<button id="librarySelectExitBtn" class="tb-btn ghost">退出选择</button>
</div>
<div id="libGrid" class="grid"></div>
</div>
</div>