feat(update-center): 添加全选功能及状态管理

添加全选复选框组件及相关状态管理逻辑
实现全选/取消全选功能
添加部分选中状态显示
更新工具栏组件以支持新功能
This commit is contained in:
2026-04-12 22:02:01 +08:00
parent ca7520cb2e
commit 763af5c37e
4 changed files with 66 additions and 1 deletions

View File

@@ -23,11 +23,14 @@ export interface UpdateCenterStore {
selectedTaskKeys: Ref<Set<string>>;
snapshot: Ref<UpdateCenterSnapshot>;
filteredItems: ComputedRef<UpdateCenterItem[]>;
allSelected: ComputedRef<boolean>;
someSelected: ComputedRef<boolean>;
bind: () => void;
unbind: () => void;
open: () => Promise<void>;
refresh: () => Promise<void>;
toggleSelection: (taskKey: string) => void;
toggleSelectAll: () => void;
getSelectedItems: () => UpdateCenterItem[];
closeNow: () => void;
startSelected: () => Promise<void>;
@@ -74,11 +77,25 @@ export const createUpdateCenterStore = (): UpdateCenterStore => {
snapshot.value = nextSnapshot;
};
const selectableItems = computed(() =>
snapshot.value.items.filter((item) => item.ignored !== true),
);
const filteredItems = computed(() => {
const query = searchQuery.value.trim();
return snapshot.value.items.filter((item) => matchesSearch(item, query));
});
const allSelected = computed(() => {
const selectable = selectableItems.value;
return selectable.length > 0 && selectable.every((item) => selectedTaskKeys.value.has(item.taskKey));
});
const someSelected = computed(() => {
const selectable = selectableItems.value;
return selectable.length > 0 && selectable.some((item) => selectedTaskKeys.value.has(item.taskKey));
});
const handleState = (nextSnapshot: UpdateCenterSnapshot): void => {
applySnapshot(nextSnapshot);
};
@@ -133,6 +150,15 @@ export const createUpdateCenterStore = (): UpdateCenterStore => {
selectedTaskKeys.value = nextSelection;
};
const toggleSelectAll = (): void => {
const selectable = selectableItems.value;
if (allSelected.value) {
selectedTaskKeys.value = new Set();
} else {
selectedTaskKeys.value = new Set(selectable.map((item) => item.taskKey));
}
};
const getSelectedItems = (): UpdateCenterItem[] => {
return snapshot.value.items.filter(
(item) =>
@@ -217,11 +243,14 @@ export const createUpdateCenterStore = (): UpdateCenterStore => {
selectedTaskKeys,
snapshot,
filteredItems,
allSelected,
someSelected,
bind,
unbind,
open,
refresh,
toggleSelection,
toggleSelectAll,
getSelectedItems,
closeNow,
startSelected,