Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions ui/src/views/VIEW_README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 导入及模板下载,失败保留文件。
Expand Down
20 changes: 16 additions & 4 deletions ui/src/views/knowledge-detail/library/tags/index.vue
Original file line number Diff line number Diff line change
Expand Up @@ -33,17 +33,29 @@ const tagTableRef = ref<{ clearSelection: () => void }>()
const selectedTags = ref<TagTableRow[]>([])
const hoveredTagKey = ref<string | null>(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<TagTableRow[]>(() => {
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() {
Expand All @@ -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(() => {
Expand Down
Loading