From 202a037e1dffee9c6d4dac582b796b3db2855f3f Mon Sep 17 00:00:00 2001 From: "xinxin.wu" Date: Thu, 8 Oct 2026 15:47:44 +0800 Subject: [PATCH] feat: resource management knowledge --- .../knowledge/knowledge.ts | 84 +++++++ ui/src/router/admin/system/index.ts | 2 +- .../action-dropdown/DeleteKnowledgeAction.vue | 3 +- .../EmbeddingKnowledgeAction.vue | 19 +- .../action-dropdown/ExportKnowledgeAction.vue | 3 +- .../GenerateQuestionsAction.vue | 3 +- .../KeywordIndexKnowledgeAction.vue | 3 +- .../RelatedResourcesKnowledgeAction.vue | 3 +- .../McpConfigKnowledgeAction.vue | 3 +- .../KnowledgeSyncDialog.vue | 3 +- .../SyncKnowledgeAction.vue | 3 +- .../resource-management/knowledge/index.vue | 209 ++++++++++++++++++ 12 files changed, 324 insertions(+), 14 deletions(-) create mode 100644 ui/src/api/admin/system/resource-management/knowledge/knowledge.ts create mode 100644 ui/src/views/system/resource-management/knowledge/index.vue diff --git a/ui/src/api/admin/system/resource-management/knowledge/knowledge.ts b/ui/src/api/admin/system/resource-management/knowledge/knowledge.ts new file mode 100644 index 00000000000..3bd7fc62fd7 --- /dev/null +++ b/ui/src/api/admin/system/resource-management/knowledge/knowledge.ts @@ -0,0 +1,84 @@ +import { del, get, getExportFile, put } from '@/api/admin/core/request' +import type { ParamsPage, ResponsePage } from '@/api/admin/core/types' +import type { Dict, KnowledgeDetail, KnowledgeItem, KnowledgeGeneratePayload } from '@/api/types' + +const prefix = '/system/resource/knowledge' + +/** 获取系统资源管理不分页的知识库列表。 */ +const getAllKnowledge = (query?: Dict) => { + return get(prefix, query) +} +/** 获取系统资源管理知识库分页列表。 */ +const getKnowledgePage = (page: ParamsPage, query?: Dict) => { + return get>(`${prefix}/${page.currentPage}/${page.pageSize}`, query) +} + +/** 获取系统资源管理知识库详情。 */ +const getKnowledgeDetail = (knowledgeId: string) => { + return get(`${prefix}/${knowledgeId}`) +} + +/** 删除工作空间知识库。 */ +const deleteKnowledge = (knowledgeId: string) => { + return del(`${prefix}/${knowledgeId}`) +} + +/** 更新工作空间知识库信息。 */ +const putKnowledge = (knowledgeId: string, payload: Partial) => { + return put, KnowledgeItem>(`${prefix}/${knowledgeId}`, payload) +} + +/** 根据知识库中的分段生成关联问题。 */ +const putGenerateKnowledgeQuestions = (knowledgeId: string, payload: KnowledgeGeneratePayload) => { + return put(`${prefix}/${knowledgeId}/generate_related`, payload) +} + +/** 对知识库中的文档重新向量化。 */ +const putReEmbeddingKnowledge = (knowledgeId: string) => { + return put(`${prefix}/${knowledgeId}/embedding`) +} + +/** 同步 Web 知识库。 */ +const putSyncWebKnowledge = (knowledgeId: string, syncType: 'replace' | 'complete') => { + return put(`${prefix}/${knowledgeId}/sync`, undefined, { sync_type: syncType }) +} + +/** 将知识库文档导出为 Excel。 */ +const exportKnowledgeExcel = (knowledgeId: string, knowledgeName: string) => { + return getExportFile(`${knowledgeName}.xlsx`, `${prefix}/${knowledgeId}/export`) +} + +/** 将知识库文档及图片导出为 ZIP。 */ +const exportKnowledgeZip = (knowledgeId: string, knowledgeName: string) => { + return getExportFile(`${knowledgeName}.zip`, `${prefix}/${knowledgeId}/export_zip`) +} + +/** 导出可用于导入创建的知识库压缩包。 */ +const exportKnowledge = (knowledgeId: string, knowledgeName: string) => { + return getExportFile(`${knowledgeName}.zip`, `${prefix}/${knowledgeId}/export_knowledge`) +} + +/** 获取知识库外部检索服务生成的 MCP 连接配置。 */ +const getKnowledgeMcpConfig = (knowledgeId: string): Promise => + get<{ mcp_config: Record }>(`${prefix}/${knowledgeId}/external_service`).then(({ mcp_config }) => + JSON.stringify(mcp_config, null, 2), + ) + +/** 提交知识库分词索引任务。 */ +const putKnowledgeKeywordIndex = (knowledgeId: string) => put(`${prefix}/${knowledgeId}/tokenize`) + +export default { + putKnowledgeKeywordIndex, + exportKnowledgeExcel, + exportKnowledgeZip, + exportKnowledge, + deleteKnowledge, + getAllKnowledge, + getKnowledgeDetail, + getKnowledgePage, + putKnowledge, + putReEmbeddingKnowledge, + putGenerateKnowledgeQuestions, + getKnowledgeMcpConfig, + putSyncWebKnowledge, +} diff --git a/ui/src/router/admin/system/index.ts b/ui/src/router/admin/system/index.ts index 6eb8ad2da1d..48cad59be56 100644 --- a/ui/src/router/admin/system/index.ts +++ b/ui/src/router/admin/system/index.ts @@ -163,7 +163,7 @@ export const systemRoutes: RouteRecordRaw = { { path: 'knowledge', name: 'system-resource-knowledge', - component: () => import('@/views/system/index.vue'), + component: () => import('@/views/system/resource-management/knowledge/index.vue'), meta: { title: '知识库', order: 20, permission: perm.knowledge.system.read, next: 'system-resource-tools' }, }, { diff --git a/ui/src/views/knowledge/knowledge-card/action-dropdown/DeleteKnowledgeAction.vue b/ui/src/views/knowledge/knowledge-card/action-dropdown/DeleteKnowledgeAction.vue index c38a84dbbc4..2052788705b 100644 --- a/ui/src/views/knowledge/knowledge-card/action-dropdown/DeleteKnowledgeAction.vue +++ b/ui/src/views/knowledge/knowledge-card/action-dropdown/DeleteKnowledgeAction.vue @@ -2,10 +2,11 @@ import type KnowledgeApi from '@/api/admin/workspace/knowledge/knowledge' import type { KnowledgeItem } from '@/api/types' import { MsgConfirm, MsgSuccess } from '@/utils/message' +import type SystemResourceKnowledgeApi from '@/api/admin/system/resource-management/knowledge/knowledge' defineOptions({ name: 'DeleteKnowledgeAction' }) -const props = defineProps<{ api: typeof KnowledgeApi; knowledge: KnowledgeItem; label: string }>() +const props = defineProps<{ api: typeof KnowledgeApi | typeof SystemResourceKnowledgeApi; knowledge: KnowledgeItem; label: string }>() const loading = defineModel('loading', { default: false }) diff --git a/ui/src/views/knowledge/knowledge-card/action-dropdown/EmbeddingKnowledgeAction.vue b/ui/src/views/knowledge/knowledge-card/action-dropdown/EmbeddingKnowledgeAction.vue index 032d12ba128..e7975818b8e 100644 --- a/ui/src/views/knowledge/knowledge-card/action-dropdown/EmbeddingKnowledgeAction.vue +++ b/ui/src/views/knowledge/knowledge-card/action-dropdown/EmbeddingKnowledgeAction.vue @@ -2,10 +2,16 @@ import type KnowledgeApi from '@/api/admin/workspace/knowledge/knowledge' import type { KnowledgeItem } from '@/api/types' import { MsgSuccess } from '@/utils/message' +import type SystemResourceKnowledgeApi from '@/api/admin/system/resource-management/knowledge/knowledge' defineOptions({ name: 'EmbeddingKnowledgeAction' }) -const props = defineProps<{ api: typeof KnowledgeApi; knowledge: KnowledgeItem; label: string }>() +const props = defineProps<{ + api: typeof KnowledgeApi | typeof SystemResourceKnowledgeApi + display?: 'menu' | 'button' + knowledge: KnowledgeItem + label: string +}>() const loading = defineModel('loading', { default: false }) /* 知识库向量化 */ @@ -25,8 +31,11 @@ function handleEmbedding() { diff --git a/ui/src/views/knowledge/knowledge-card/action-dropdown/ExportKnowledgeAction.vue b/ui/src/views/knowledge/knowledge-card/action-dropdown/ExportKnowledgeAction.vue index fb25b8455c3..fc8fd39794f 100644 --- a/ui/src/views/knowledge/knowledge-card/action-dropdown/ExportKnowledgeAction.vue +++ b/ui/src/views/knowledge/knowledge-card/action-dropdown/ExportKnowledgeAction.vue @@ -1,10 +1,11 @@ + +