From ce700618ca3c54f9ea4f01a04e1df00c88174e00 Mon Sep 17 00:00:00 2001 From: "xinxin.wu" Date: Tue, 27 Oct 2026 17:54:08 +0800 Subject: [PATCH] fix: tags table pagesize --- ui/src/views/VIEW_README.md | 4 ++-- .../knowledge-detail/library/tags/index.vue | 20 +++++++++++++++---- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/ui/src/views/VIEW_README.md b/ui/src/views/VIEW_README.md index 12f5b41b47b..06ef4f2cc97 100644 --- a/ui/src/views/VIEW_README.md +++ b/ui/src/views/VIEW_README.md @@ -258,8 +258,8 @@ System 资源管理或 System 共享 Knowledge API 的 `postKnowledgeHitTest`; ### 标签管理 -`library/tags/` 按标签组前端分页,再展开标签值;`MkTable.selectionGroupKey="key"` -联动组内选择,统计与删除按实际标签值数量。普通查询将名称传后端,共享无参数查询后本地筛选。 +`library/tags/` 按标签值前端分页,当前页内按标签组展开并合并展示;`MkTable.selectionGroupKey="key"` +联动当前页内同组选择,统计与删除按实际标签值数量。普通查询将名称传后端,共享无参数查询后本地筛选。 `CreateTagDialog` 创建多行组合或为 `open(key)` 添加值;`EditTagDialog` 只重命名或编辑单值, 保留完整 id、key、value,不模拟多行保存。名称/值上限 64/128,提交清理可编辑文本并检查重复。 `ButtonImportTags` 内聚 XLS/XLSX 导入及模板下载,失败保留文件。 diff --git a/ui/src/views/knowledge-detail/library/tags/index.vue b/ui/src/views/knowledge-detail/library/tags/index.vue index 69f85e13e6e..cbbd6b2dbc9 100644 --- a/ui/src/views/knowledge-detail/library/tags/index.vue +++ b/ui/src/views/knowledge-detail/library/tags/index.vue @@ -33,17 +33,29 @@ const tagTableRef = ref<{ clearSelection: () => void }>() const selectedTags = ref([]) const hoveredTagKey = ref(null) +const tagValueCount = computed(() => tagGroups.value.reduce((count, group) => count + group.values.length, 0)) const paginationConfig = computed({ - get: () => ({ ...tagPage.value, total: tagGroups.value.length }), + get: () => ({ ...tagPage.value, total: tagValueCount.value }), set: ({ currentPage, pageSize }) => { tagPage.value = { currentPage, pageSize } }, }) const tagRows = computed(() => { const start = (tagPage.value.currentPage - 1) * tagPage.value.pageSize - return tagGroups.value + const pageRows = tagGroups.value + .flatMap((group) => group.values.map((tag) => ({ ...tag, key: group.key, rowspan: 0 }))) .slice(start, start + tagPage.value.pageSize) - .flatMap((group) => group.values.map((tag, index) => ({ ...tag, key: group.key, rowspan: index === 0 ? group.values.length : 0 }))) + + let rowIndex = 0 + while (rowIndex < pageRows.length) { + const currentRow = pageRows[rowIndex] + if (!currentRow) break + let groupEndIndex = rowIndex + 1 + while (pageRows[groupEndIndex]?.key === currentRow.key) groupEndIndex += 1 + currentRow.rowspan = groupEndIndex - rowIndex + rowIndex = groupEndIndex + } + return pageRows }) function clearSelection() { @@ -64,7 +76,7 @@ function loadTags() { .getKnowledgeTags(knowledgeId.value, params) .then((groups) => { tagGroups.value = keyword ? groups.filter((group) => group.key.includes(keyword)) : groups - const lastPage = Math.max(1, Math.ceil(tagGroups.value.length / tagPage.value.pageSize)) + const lastPage = Math.max(1, Math.ceil(tagValueCount.value / tagPage.value.pageSize)) tagPage.value.currentPage = Math.min(tagPage.value.currentPage, lastPage) }) .finally(() => {