From de262ba6dd46ffdc01df77550baaee18e352f93f Mon Sep 17 00:00:00 2001 From: Binks Riverton Date: Wed, 29 Jul 2026 20:59:20 +0800 Subject: [PATCH] fix(knowledge): pre-select common tags in batch tag dialog --- .../src/views/knowledge/KnowledgeBase.vue | 19 ++++++++++++++++++- .../knowledge/components/BatchTagDialog.vue | 3 ++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/frontend/src/views/knowledge/KnowledgeBase.vue b/frontend/src/views/knowledge/KnowledgeBase.vue index 80d294a83..17aaa3914 100644 --- a/frontend/src/views/knowledge/KnowledgeBase.vue +++ b/frontend/src/views/knowledge/KnowledgeBase.vue @@ -423,6 +423,22 @@ const batchDeleting = ref(false); const batchReparsing = ref(false); const batchTagging = ref(false); const batchTagDialogVisible = ref(false); +const batchTagPreSelectedIds = computed(() => { + const ids = Array.from(selectedIds.value); + if (ids.length === 0) return []; + const cards = ids + .map((id) => cardList.value.find((c) => c.id === id)) + .filter((c): c is KnowledgeCard => Boolean(c)); + if (cards.length === 0) return []; + const firstTagIds = new Set((cards[0].tags || []).map((t) => t.id)); + for (let i = 1; i < cards.length; i++) { + const cur = new Set((cards[i].tags || []).map((t) => t.id)); + for (const tid of firstTagIds) { + if (!cur.has(tid)) firstTagIds.delete(tid); + } + } + return Array.from(firstTagIds); +}); // IDs submitted for async batch reparse; hold optimistic pending until the worker updates DB. const pendingReparseAck = ref>(new Set()); @@ -2409,7 +2425,8 @@ async function createNewSession(value: string): Promise { diff --git a/frontend/src/views/knowledge/components/BatchTagDialog.vue b/frontend/src/views/knowledge/components/BatchTagDialog.vue index 17c8a3602..475da1fb4 100644 --- a/frontend/src/views/knowledge/components/BatchTagDialog.vue +++ b/frontend/src/views/knowledge/components/BatchTagDialog.vue @@ -104,6 +104,7 @@ const props = defineProps<{ count: number; kbId: string; tagList: Tag[]; + preSelectedTagIds?: string[]; canManage?: boolean; }>(); @@ -126,7 +127,7 @@ watch( () => props.visible, (val) => { if (val) { - selectedSet.value = new Set(); + selectedSet.value = new Set(props.preSelectedTagIds ?? []); searchQuery.value = ''; newTagName.value = ''; }