+
{{ selectedRowKeys.length }} 项
@@ -383,6 +389,46 @@ const selectedRowKeys = computed({
const isSelectionMode = ref(false);
+const allSelectableFiles = computed(() => {
+ const nameFilter = filenameFilter.value.trim().toLowerCase();
+ const status = statusFilter.value;
+
+ return files.value.filter(file => {
+ if (file.is_folder) return false;
+ // Follow getCheckboxProps logic
+ if (lock.value || file.status === 'processing' || file.status === 'waiting') return false;
+
+ if (nameFilter || status) {
+ const nameMatch = !nameFilter || (file.filename && file.filename.toLowerCase().includes(nameFilter));
+ const statusMatch = !status || file.status === status ||
+ (status === 'indexed' && file.status === 'done') ||
+ (status === 'error_indexing' && file.status === 'failed');
+ return nameMatch && statusMatch;
+ }
+ return true;
+ });
+});
+
+const isAllSelected = computed(() => {
+ const selectableIds = allSelectableFiles.value.map(f => f.file_id);
+ if (selectableIds.length === 0) return false;
+ return selectableIds.every(id => selectedRowKeys.value.includes(id));
+});
+
+const isPartiallySelected = computed(() => {
+ const selectableIds = allSelectableFiles.value.map(f => f.file_id);
+ const selectedCount = selectableIds.filter(id => selectedRowKeys.value.includes(id)).length;
+ return selectedCount > 0 && selectedCount < selectableIds.length;
+});
+
+const onSelectAllChange = (e) => {
+ if (e.target.checked) {
+ selectedRowKeys.value = allSelectableFiles.value.map(f => f.file_id);
+ } else {
+ selectedRowKeys.value = [];
+ }
+};
+
const expandedRowKeys = ref([]);
const popoverVisibleMap = ref({});
diff --git a/web/src/stores/info.js b/web/src/stores/info.js
index d4e5e53d..e9704f3f 100644
--- a/web/src/stores/info.js
+++ b/web/src/stores/info.js
@@ -27,7 +27,7 @@ export const useInfoStore = defineStore('info', () => {
// 计算属性 - 功能特性
const features = computed(() => infoConfig.value.features || [{
label: "GitHub Stars",
- value: "3000+",
+ value: "3200+",
description: "开发者社区的认可与支持",
icon: "stars"
}, {
@@ -37,7 +37,7 @@ export const useInfoStore = defineStore('info', () => {
icon: "issues"
}, {
label: "累计 Commits",
- value: "1100+",
+ value: "1200+",
description: "活跃的开发迭代和功能更新",
icon: "commits"
}, {