From 00bf0460ccc716dcce81bc4fe61f5c72c220b7fe Mon Sep 17 00:00:00 2001 From: wizardchen Date: Thu, 5 Mar 2026 12:02:22 +0800 Subject: [PATCH] feat: add pinning functionality for knowledge bases - Introduced a new API endpoint to toggle the pin status of knowledge bases, allowing users to pin important entries to the top of the list. - Updated the frontend to include UI elements for pinning and unpinning knowledge bases, with corresponding success and error messages. - Enhanced localization support by adding translations for pinning actions in English, Korean, Russian, and Chinese. - Modified the database schema to include `is_pinned` and `pinned_at` fields for knowledge bases, enabling persistent pinning status. These changes improve the organization and accessibility of knowledge bases, enhancing user experience by allowing quick access to prioritized entries. --- frontend/src/api/knowledge-base/index.ts | 4 ++ frontend/src/i18n/locales/en-US.ts | 7 +++ frontend/src/i18n/locales/ko-KR.ts | 7 +++ frontend/src/i18n/locales/ru-RU.ts | 7 +++ frontend/src/i18n/locales/zh-CN.ts | 7 +++ .../src/views/knowledge/KnowledgeBaseList.vue | 63 +++++++++++++++++-- .../application/repository/knowledgebase.go | 31 ++++++++- internal/application/service/knowledgebase.go | 17 +++++ internal/handler/knowledgebase.go | 37 +++++++++++ internal/router/router.go | 2 + internal/types/interfaces/knowledgebase.go | 6 ++ internal/types/knowledgebase.go | 4 ++ .../versioned/000016_add_kb_pinned.down.sql | 3 + .../versioned/000016_add_kb_pinned.up.sql | 3 + 14 files changed, 193 insertions(+), 5 deletions(-) create mode 100644 migrations/versioned/000016_add_kb_pinned.down.sql create mode 100644 migrations/versioned/000016_add_kb_pinned.up.sql diff --git a/frontend/src/api/knowledge-base/index.ts b/frontend/src/api/knowledge-base/index.ts index a0dea1ed3..d270b8a07 100644 --- a/frontend/src/api/knowledge-base/index.ts +++ b/frontend/src/api/knowledge-base/index.ts @@ -45,6 +45,10 @@ export function copyKnowledgeBase(data: { source_id: string; target_id?: string return post(`/api/v1/knowledge-bases/copy`, data); } +export function togglePinKnowledgeBase(id: string) { + return put(`/api/v1/knowledge-bases/${id}/pin`); +} + // 知识文件 API(基于具体知识库) // data.tag_id: 可选,指定知识所属的分类ID export function uploadKnowledgeFile(kbId: string, data: { file: File; tag_id?: string; [key: string]: any } = { file: new File([], '') }, onProgress?: (progressEvent: any) => void) { diff --git a/frontend/src/i18n/locales/en-US.ts b/frontend/src/i18n/locales/en-US.ts index 27b400da7..b9e4d9196 100755 --- a/frontend/src/i18n/locales/en-US.ts +++ b/frontend/src/i18n/locales/en-US.ts @@ -1173,6 +1173,13 @@ export default { menu: { viewDetails: 'View Details', }, + pin: { + pin: 'Pin to Top', + unpin: 'Unpin', + pinSuccess: 'Pinned', + unpinSuccess: 'Unpinned', + failed: 'Operation failed', + }, messages: { deleted: 'Knowledge base deleted', deleteFailed: 'Failed to delete knowledge base' diff --git a/frontend/src/i18n/locales/ko-KR.ts b/frontend/src/i18n/locales/ko-KR.ts index bd05e1e2c..b211b8c76 100755 --- a/frontend/src/i18n/locales/ko-KR.ts +++ b/frontend/src/i18n/locales/ko-KR.ts @@ -1603,6 +1603,13 @@ export default { menu: { viewDetails: "세부 사항을 확인하세요", }, + pin: { + pin: "상단 고정", + unpin: "고정 해제", + pinSuccess: "상단에 고정됨", + unpinSuccess: "고정 해제됨", + failed: "작업 실패", + }, detail: { title: "공유 지식베이스", overview: "개요", diff --git a/frontend/src/i18n/locales/ru-RU.ts b/frontend/src/i18n/locales/ru-RU.ts index 009121a25..903e83f16 100755 --- a/frontend/src/i18n/locales/ru-RU.ts +++ b/frontend/src/i18n/locales/ru-RU.ts @@ -1045,6 +1045,13 @@ export default { confirmMessage: 'Удалить базу знаний «{name}»? Отменить действие будет невозможно.', confirmButton: 'Удалить' }, + pin: { + pin: 'Закрепить', + unpin: 'Открепить', + pinSuccess: 'Закреплено', + unpinSuccess: 'Откреплено', + failed: 'Операция не удалась', + }, messages: { deleted: 'База знаний удалена', deleteFailed: 'Не удалось удалить базу знаний' diff --git a/frontend/src/i18n/locales/zh-CN.ts b/frontend/src/i18n/locales/zh-CN.ts index 3d4d00633..10c81ec12 100755 --- a/frontend/src/i18n/locales/zh-CN.ts +++ b/frontend/src/i18n/locales/zh-CN.ts @@ -1581,6 +1581,13 @@ export default { menu: { viewDetails: "查看详情", }, + pin: { + pin: "置顶", + unpin: "取消置顶", + pinSuccess: "已置顶", + unpinSuccess: "已取消置顶", + failed: "操作失败", + }, detail: { title: "共享知识库", overview: "概览", diff --git a/frontend/src/views/knowledge/KnowledgeBaseList.vue b/frontend/src/views/knowledge/KnowledgeBaseList.vue index 23811d2d7..cc9078a45 100644 --- a/frontend/src/views/knowledge/KnowledgeBaseList.vue +++ b/frontend/src/views/knowledge/KnowledgeBaseList.vue @@ -93,6 +93,10 @@ :ref="el => { if (highlightedKbId !== null && highlightedKbId === kb.id && el) highlightedCardRef = el as HTMLElement }" @click="handleCardClick(kb)" > + +
+ +
{{ kb.name }} @@ -107,6 +111,10 @@