From 554db191e1d01136f1d96e0a7a6c35f9ebd4d0d4 Mon Sep 17 00:00:00 2001 From: wangdan-fit2cloud Date: Wed, 30 Sep 2026 14:13:11 +0800 Subject: [PATCH] feat: document export --- ui/src/api/API_README.md | 13 +++- ui/src/api/admin/core/request.ts | 4 +- .../api/admin/workspace/knowledge/document.ts | 72 +++++++++++-------- ui/src/api/admin/workspace/knowledge/tags.ts | 10 +++ ui/src/assets/iconfont.js | 2 +- .../GenerateQuestionsDialog.vue | 2 +- ui/src/constants/CONSTANT_README.md | 2 +- ui/src/router/ROUTE_README.md | 2 + .../workspace/modules/knowledge-shared.ts | 2 +- .../admin/workspace/modules/knowledge.ts | 6 +- ui/src/styles/element-plus.scss | 3 + ui/src/views/VIEW_README.md | 28 ++++++-- .../action-dropdown/ExportDocumentAction.vue | 34 --------- .../action-dropdown/SyncDocumentAction.vue | 54 -------------- .../action-dropdown/BatchCancelTaskAction.vue | 0 .../action-dropdown/DeleteDocumentAction.vue | 0 .../action-dropdown/DocumentTagsAction.vue | 0 .../DownloadDocumentAction.vue | 0 .../action-dropdown/MigrateDocumentAction.vue | 0 .../action-dropdown/ReplaceDocumentAction.vue | 4 +- .../action-dropdown/SettingDocumentAction.vue | 0 .../embedding/BatchEmbeddingAction.vue | 0 .../embedding/DocumentEmbeddingDialog.vue | 0 .../embedding/EmbeddingDocumentAction.vue | 0 .../export/BatchExportDocumentAction.vue | 51 +++++++++++++ .../export/ExportDocumentAction.vue | 53 ++++++++++++++ .../BatchGenerateQuestionsAction.vue | 4 +- .../GenerateQuestionsAction.vue | 6 +- .../document/action-dropdown/index.ts | 6 +- .../sync/BatchSyncDocumentAction.vue | 50 +++++++++++++ .../sync/SyncDocumentAction.vue | 63 ++++++++++++++++ .../tokenize/BatchTokenizeAction.vue | 0 .../tokenize/TokenizeDocumentAction.vue | 0 .../document/components/DocumentStatus.vue | 0 .../document/components/DocumentTags.vue | 3 +- .../{ => library}/document/index.vue | 63 ++++++---------- .../{ => library}/document/status.ts | 0 .../{ => library}/image/index.vue | 0 .../{ => library}/tag/index.vue | 0 .../action-dropdown/ExportKnowledgeAction.vue | 31 ++------ .../tool-form/tool-custom/ToolFormDrawer.vue | 2 +- .../trigger-form/TriggerFormDrawer.vue | 26 +++---- 42 files changed, 366 insertions(+), 230 deletions(-) create mode 100644 ui/src/api/admin/workspace/knowledge/tags.ts delete mode 100644 ui/src/views/knowledge-detail/document/action-dropdown/ExportDocumentAction.vue delete mode 100644 ui/src/views/knowledge-detail/document/action-dropdown/SyncDocumentAction.vue rename ui/src/views/knowledge-detail/{ => library}/document/action-dropdown/BatchCancelTaskAction.vue (100%) rename ui/src/views/knowledge-detail/{ => library}/document/action-dropdown/DeleteDocumentAction.vue (100%) rename ui/src/views/knowledge-detail/{ => library}/document/action-dropdown/DocumentTagsAction.vue (100%) rename ui/src/views/knowledge-detail/{ => library}/document/action-dropdown/DownloadDocumentAction.vue (100%) rename ui/src/views/knowledge-detail/{ => library}/document/action-dropdown/MigrateDocumentAction.vue (100%) rename ui/src/views/knowledge-detail/{ => library}/document/action-dropdown/ReplaceDocumentAction.vue (91%) rename ui/src/views/knowledge-detail/{ => library}/document/action-dropdown/SettingDocumentAction.vue (100%) rename ui/src/views/knowledge-detail/{ => library}/document/action-dropdown/embedding/BatchEmbeddingAction.vue (100%) rename ui/src/views/knowledge-detail/{ => library}/document/action-dropdown/embedding/DocumentEmbeddingDialog.vue (100%) rename ui/src/views/knowledge-detail/{ => library}/document/action-dropdown/embedding/EmbeddingDocumentAction.vue (100%) create mode 100644 ui/src/views/knowledge-detail/library/document/action-dropdown/export/BatchExportDocumentAction.vue create mode 100644 ui/src/views/knowledge-detail/library/document/action-dropdown/export/ExportDocumentAction.vue rename ui/src/views/knowledge-detail/{ => library}/document/action-dropdown/generate-questions/BatchGenerateQuestionsAction.vue (93%) rename ui/src/views/knowledge-detail/{ => library}/document/action-dropdown/generate-questions/GenerateQuestionsAction.vue (95%) rename ui/src/views/knowledge-detail/{ => library}/document/action-dropdown/index.ts (76%) create mode 100644 ui/src/views/knowledge-detail/library/document/action-dropdown/sync/BatchSyncDocumentAction.vue create mode 100644 ui/src/views/knowledge-detail/library/document/action-dropdown/sync/SyncDocumentAction.vue rename ui/src/views/knowledge-detail/{ => library}/document/action-dropdown/tokenize/BatchTokenizeAction.vue (100%) rename ui/src/views/knowledge-detail/{ => library}/document/action-dropdown/tokenize/TokenizeDocumentAction.vue (100%) rename ui/src/views/knowledge-detail/{ => library}/document/components/DocumentStatus.vue (100%) rename ui/src/views/knowledge-detail/{ => library}/document/components/DocumentTags.vue (95%) rename ui/src/views/knowledge-detail/{ => library}/document/index.vue (93%) rename ui/src/views/knowledge-detail/{ => library}/document/status.ts (100%) rename ui/src/views/knowledge-detail/{ => library}/image/index.vue (100%) rename ui/src/views/knowledge-detail/{ => library}/tag/index.vue (100%) diff --git a/ui/src/api/API_README.md b/ui/src/api/API_README.md index 19a771e89d1..6e36c56307f 100644 --- a/ui/src/api/API_README.md +++ b/ui/src/api/API_README.md @@ -311,6 +311,7 @@ API 枚举与类型统一在 `src/api` 范围内管理,相关规则由本文 - GET 文件导出使用 `getExportFile`;需要通过 POST 同时传递查询参数和可选请求体的 Excel 导出 使用 `postExportExcel`;Skill 压缩包等指定请求方法的文件下载使用 `downloadRequest`。请求层统一 获取 Blob、解析 `Content-Disposition` 文件名并触发浏览器下载;业务 API 只需传入接口地址及业务参数。 + `downloadRequest` 的第五个参数可指定回退文件名,缺省为 `download`;服务端文件名始终优先。 - 业务代码通过 `api.method().then(...)` 处理接口成功后的状态变化;通用接口错误由请求层统一 提示,不在调用处重复使用 `try/catch` 或 `.catch()` 提示相同错误。只有业务降级、状态恢复等 非提示类失败处理可以按需保留失败分支。 @@ -520,6 +521,11 @@ System 接口由资源管理服务提供;本地开源后端没有对应扩展 任务取消、生成问题、迁移、同步、导出、原文件下载/替换及标签关联。 批量任务沿用 v2 的 `id_list` / `state_list`;生成问题使用 `document_id_list`, 添加标签使用 `document_ids` / `tag_ids`,迁移和批量导出直接提交文档 ID 数组。 +文档导出分别提供四个接口,不以单元素批量请求代替单项接口: +`exportDocument`、`exportDocumentZip` 使用 GET 请求 `//export`、`//export_zip`; +`exportMulDocument`、`exportMulDocumentZip` 使用 POST 请求 `batch_export`、`batch_export_zip`,请求体直接为 ID 数组。 +单项参数为知识库 ID、文档 ID、文档名称;批量参数为知识库 ID、文档 ID 数组、知识库名称。 +服务端未提供文件名时,分别以文档名称或知识库名称加 `.xlsx` / `.zip` 回退,沿用 v2 下载命名。 向量化、生成问题默认排除成功分段,也可选择全部分段。任务类型使用 `DOCUMENT_TASK_TYPE`。 单项向量化使用 `putDocumentRefresh(knowledgeId, documentId, stateList)` 请求 `//refresh`; 单项取消使用 `putCancelTask(knowledgeId, documentId, taskType)` 请求 `//cancel_task`,提交 `{ type }`。 @@ -529,7 +535,12 @@ System 接口由资源管理服务提供;本地开源后端没有对应扩展 提交 `{ id_list, state_list }`。两者均包含全部七种分段状态;单项取消分词复用 `putCancelTask`,任务类型为 `TOKENIZE`。 文档设置的共享载荷为 `DocumentSettingPayload`,生成问题使用 `DocumentGeneratePayload`; 单项设置通过 `meta` 保留来源数据,批量设置将 `allow_download` 放在顶层。 -飞书同步沿用 v2 扩展接口 `/knowledge/lark//_batch`,需部署环境支持。 +文档同步区分单项和批量,不以单元素批量请求代替单项接口: +`putDocumentSync` 请求 `//document//sync`, +`putMulSyncDocument` 请求 `//document/batch_sync`; +`putLarkDocumentSync` 请求 `/lark//document//sync`, +`putMulLarkSyncDocument` 请求 `/lark//_batch`。上述路径均相对工作空间的 `knowledge` 前缀, +全部使用 PUT;单项不传请求体,批量提交 `{ id_list }`。飞书接口需部署环境支持。 共享文档 API 继续仅提供查询,不增加写入方法。 `workspace/knowledge/document.ts` 维护文档分页查询,路径为 diff --git a/ui/src/api/admin/core/request.ts b/ui/src/api/admin/core/request.ts index 8f03404c21a..674a94f8df9 100644 --- a/ui/src/api/admin/core/request.ts +++ b/ui/src/api/admin/core/request.ts @@ -178,7 +178,7 @@ export async function postExportExcel(fileName: string, url: st } /** 发送指定方法的 Blob 请求并触发浏览器下载。 */ -export async function downloadRequest(url: string, method: string, data?: unknown, params?: Dict): Promise { +export async function downloadRequest(url: string, method: string, data?: unknown, params?: Dict, fileName = 'download'): Promise { const response = await request.request({ url, method, @@ -188,7 +188,7 @@ export async function downloadRequest(url: string, method: string, data?: unknow skipGlobalErrorMessage: true, } as ExportRequestConfig) - return downloadExportResponse(response, 'download') + return downloadExportResponse(response, fileName) } /** 发送 POST 请求并返回可逐块读取的原始响应。 */ diff --git a/ui/src/api/admin/workspace/knowledge/document.ts b/ui/src/api/admin/workspace/knowledge/document.ts index cf64fdf13c9..42f19550dac 100644 --- a/ui/src/api/admin/workspace/knowledge/document.ts +++ b/ui/src/api/admin/workspace/knowledge/document.ts @@ -1,4 +1,4 @@ -import { del, downloadRequest, get, getExportFile, post, put } from '../../core/request' +import { del, downloadRequest, get, getExportFile, post, postExportExcel, put } from '../../core/request' import type { ParamsPage, ResponsePage } from '../../core/types' import type { Dict, @@ -8,7 +8,6 @@ import type { DocumentSettingPayload, DocumentTaskState, DocumentTaskType, - KnowledgeTagGroup, } from '@/api/types' import { getWorkspaceId } from '@/utils/resource-context' @@ -49,6 +48,10 @@ const putDocumentTokenize = (knowledgeId: string, documentId: string, stateList: const putBatchTokenizeDocuments = (knowledgeId: string, documentIds: string[], stateList: DocumentTaskState[]) => put(`${getPrefix(knowledgeId)}/batch_tokenize`, { id_list: documentIds, state_list: stateList }) +/** 单个/批量生成关联问题。 */ +const putGenerateDocumentQuestions = (knowledgeId: string, data: DocumentGeneratePayload) => + put(`${getPrefix(knowledgeId)}/batch_generate_related`, data) + /** 单个取消文档任务。 */ const putCancelTask = (knowledgeId: string, documentId: string, taskType: DocumentTaskType) => put(`${getPrefix(knowledgeId)}/${documentId}/cancel_task`, { type: taskType }) @@ -57,6 +60,21 @@ const putCancelTask = (knowledgeId: string, documentId: string, taskType: Docume const putBatchCancelDocumentTask = (knowledgeId: string, documentIds: string[], taskType: DocumentTaskType) => put(`${getPrefix(knowledgeId)}/batch_cancel_task`, { id_list: documentIds, type: taskType }) +/** 同步单个 Web 文档。 */ +const putDocumentSync = (knowledgeId: string, documentId: string) => put(`${getPrefix(knowledgeId)}/${documentId}/sync`) + +/** 批量同步 Web 文档。 */ +const putMulSyncDocument = (knowledgeId: string, documentIds: string[]) => + put<{ id_list: string[] }, boolean>(`${getPrefix(knowledgeId)}/batch_sync`, { id_list: documentIds }) + +/** 同步单个飞书文档。 */ +const putLarkDocumentSync = (knowledgeId: string, documentId: string) => + put(`/workspace/${getWorkspaceId()}/knowledge/lark/${knowledgeId}/document/${documentId}/sync`) + +/** 批量同步飞书文档。 */ +const putMulLarkSyncDocument = (knowledgeId: string, documentIds: string[]) => + put<{ id_list: string[] }, boolean>(`/workspace/${getWorkspaceId()}/knowledge/lark/${knowledgeId}/_batch`, { id_list: documentIds }) + /** 保存单个文档的召回及来源设置。 */ const putDocumentSetting = (knowledgeId: string, documentId: string, data: DocumentSettingPayload) => put(`${getPrefix(knowledgeId)}/${documentId}`, data) @@ -65,24 +83,25 @@ const putDocumentSetting = (knowledgeId: string, documentId: string, data: Docum const putBatchDocumentSetting = (knowledgeId: string, documentIds: string[], data: DocumentSettingPayload) => put(`${getPrefix(knowledgeId)}/batch_hit_handling`, { ...data, id_list: documentIds }) -/** 根据文档内容生成关联问题。 */ -const putGenerateDocumentQuestions = (knowledgeId: string, data: DocumentGeneratePayload) => - put(`${getPrefix(knowledgeId)}/batch_generate_related`, data) - /** 将选中文档迁移至目标知识库。 */ const putMigrateDocuments = (knowledgeId: string, targetKnowledgeId: string, documentIds: string[]) => put(`${getPrefix(knowledgeId)}/migrate/${targetKnowledgeId}`, documentIds) -/** 同步 Web 文档。 */ -const putSyncDocuments = (knowledgeId: string, documentIds: string[]) => put(`${getPrefix(knowledgeId)}/batch_sync`, { id_list: documentIds }) +/** 将单个文档导出为 Excel。 */ +const exportDocument = (knowledgeId: string, documentId: string, documentName: string) => + getExportFile(`${documentName.trim()}.xlsx`, `${getPrefix(knowledgeId)}/${documentId}/export`) + +/** 将选中文档批量导出为 Excel。 */ +const exportMulDocument = (knowledgeId: string, documentIds: string[], knowledgeName: string) => + postExportExcel(`${knowledgeName.trim()}.xlsx`, `${getPrefix(knowledgeId)}/batch_export`, undefined, documentIds) -/** 同步飞书文档。 */ -const putSyncLarkDocuments = (knowledgeId: string, documentIds: string[]) => - put(`/workspace/${getWorkspaceId()}/knowledge/lark/${knowledgeId}/_batch`, { id_list: documentIds }) +/** 将单个文档及图片导出为 ZIP。 */ +const exportDocumentZip = (knowledgeId: string, documentId: string, documentName: string) => + getExportFile(`${documentName.trim()}.zip`, `${getPrefix(knowledgeId)}/${documentId}/export_zip`) -/** 导出所选文档为 Excel 或 ZIP。 */ -const exportDocuments = (knowledgeId: string, documentIds: string[], format: 'excel' | 'zip') => - downloadRequest(`${getPrefix(knowledgeId)}/${format === 'excel' ? 'batch_export' : 'batch_export_zip'}`, 'POST', documentIds) +/** 将选中文档及图片批量导出为 ZIP。 */ +const exportMulDocumentZip = (knowledgeId: string, documentIds: string[], knowledgeName: string) => + downloadRequest(`${getPrefix(knowledgeId)}/batch_export_zip`, 'POST', documentIds, undefined, `${knowledgeName.trim()}.zip`) /** 下载文档原文件。 */ const downloadDocumentSource = (knowledgeId: string, document: DocumentItem) => @@ -95,17 +114,6 @@ const postReplaceDocumentSource = (knowledgeId: string, documentId: string, file return post(`${getPrefix(knowledgeId)}/${documentId}/replace_source_file`, data) } -/** 查询文档当前标签。 */ -const getDocumentTags = (knowledgeId: string, documentId: string) => get(`${getPrefix(knowledgeId)}/${documentId}/tags`) - -/** 批量添加文档标签。 */ -const postAddDocumentTags = (knowledgeId: string, documentIds: string[], tagIds: string[]) => - post(`${getPrefix(knowledgeId)}/batch_add_tag`, { document_ids: documentIds, tag_ids: tagIds }) - -/** 移除文档标签关联。 */ -const putDeleteDocumentTags = (knowledgeId: string, documentId: string, tagIds: string[]) => - put(`${getPrefix(knowledgeId)}/${documentId}/tags/batch_delete`, tagIds) - export default { getDocumentPage, putQuickCreateDocuments, @@ -122,12 +130,14 @@ export default { putBatchDocumentSetting, putGenerateDocumentQuestions, putMigrateDocuments, - putSyncDocuments, - putSyncLarkDocuments, - exportDocuments, + putDocumentSync, + putMulSyncDocument, + putLarkDocumentSync, + putMulLarkSyncDocument, + exportDocument, + exportMulDocument, + exportDocumentZip, + exportMulDocumentZip, downloadDocumentSource, postReplaceDocumentSource, - getDocumentTags, - postAddDocumentTags, - putDeleteDocumentTags, } diff --git a/ui/src/api/admin/workspace/knowledge/tags.ts b/ui/src/api/admin/workspace/knowledge/tags.ts new file mode 100644 index 00000000000..3c159e0fa03 --- /dev/null +++ b/ui/src/api/admin/workspace/knowledge/tags.ts @@ -0,0 +1,10 @@ +/** 查询文档当前标签。 */ +const getDocumentTags = (knowledgeId: string, documentId: string) => get(`${getPrefix(knowledgeId)}/${documentId}/tags`) + +/** 批量添加文档标签。 */ +const postAddDocumentTags = (knowledgeId: string, documentIds: string[], tagIds: string[]) => + post(`${getPrefix(knowledgeId)}/batch_add_tag`, { document_ids: documentIds, tag_ids: tagIds }) + +/** 移除文档标签关联。 */ +const putDeleteDocumentTags = (knowledgeId: string, documentId: string, tagIds: string[]) => + put(`${getPrefix(knowledgeId)}/${documentId}/tags/batch_delete`, tagIds) diff --git a/ui/src/assets/iconfont.js b/ui/src/assets/iconfont.js index 75a9ad14b9f..d1cb49c4cde 100644 --- a/ui/src/assets/iconfont.js +++ b/ui/src/assets/iconfont.js @@ -1 +1 @@ -window._iconfont_svg_string_5200172='',(h=>{var a=(l=(l=document.getElementsByTagName("script"))[l.length-1]).getAttribute("data-injectcss"),l=l.getAttribute("data-disable-injectsvg");if(!l){var o,v,t,i,c,d=function(a,l){l.parentNode.insertBefore(a,l)};if(a&&!h.__iconfont__svg__cssinject__){h.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(a){console&&console.log(a)}}o=function(){var a,l=document.createElement("div");l.innerHTML=h._iconfont_svg_string_5200172,(l=l.getElementsByTagName("svg")[0])&&(l.setAttribute("aria-hidden","true"),l.style.position="absolute",l.style.width=0,l.style.height=0,l.style.overflow="hidden",l=l,(a=document.body).firstChild?d(l,a.firstChild):a.appendChild(l))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(o,0):(v=function(){document.removeEventListener("DOMContentLoaded",v,!1),o()},document.addEventListener("DOMContentLoaded",v,!1)):document.attachEvent&&(t=o,i=h.document,c=!1,m(),i.onreadystatechange=function(){"complete"==i.readyState&&(i.onreadystatechange=null,e())})}function e(){c||(c=!0,t())}function m(){try{i.documentElement.doScroll("left")}catch(a){return void setTimeout(m,50)}e()}})(window); \ No newline at end of file +window._iconfont_svg_string_5200172='',(h=>{var a=(l=(l=document.getElementsByTagName("script"))[l.length-1]).getAttribute("data-injectcss"),l=l.getAttribute("data-disable-injectsvg");if(!l){var o,v,t,i,c,d=function(a,l){l.parentNode.insertBefore(a,l)};if(a&&!h.__iconfont__svg__cssinject__){h.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(a){console&&console.log(a)}}o=function(){var a,l=document.createElement("div");l.innerHTML=h._iconfont_svg_string_5200172,(l=l.getElementsByTagName("svg")[0])&&(l.setAttribute("aria-hidden","true"),l.style.position="absolute",l.style.width=0,l.style.height=0,l.style.overflow="hidden",l=l,(a=document.body).firstChild?d(l,a.firstChild):a.appendChild(l))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(o,0):(v=function(){document.removeEventListener("DOMContentLoaded",v,!1),o()},document.addEventListener("DOMContentLoaded",v,!1)):document.attachEvent&&(t=o,i=h.document,c=!1,e(),i.onreadystatechange=function(){"complete"==i.readyState&&(i.onreadystatechange=null,z())})}function z(){c||(c=!0,t())}function e(){try{i.documentElement.doScroll("left")}catch(a){return void setTimeout(e,50)}z()}})(window); \ No newline at end of file diff --git a/ui/src/components/business/generate-questions/GenerateQuestionsDialog.vue b/ui/src/components/business/generate-questions/GenerateQuestionsDialog.vue index 9ec8278c709..bcc7f9012df 100644 --- a/ui/src/components/business/generate-questions/GenerateQuestionsDialog.vue +++ b/ui/src/components/business/generate-questions/GenerateQuestionsDialog.vue @@ -95,7 +95,7 @@ defineExpose({ open, close }) diff --git a/ui/src/views/knowledge-detail/document/action-dropdown/SettingDocumentAction.vue b/ui/src/views/knowledge-detail/library/document/action-dropdown/SettingDocumentAction.vue similarity index 100% rename from ui/src/views/knowledge-detail/document/action-dropdown/SettingDocumentAction.vue rename to ui/src/views/knowledge-detail/library/document/action-dropdown/SettingDocumentAction.vue diff --git a/ui/src/views/knowledge-detail/document/action-dropdown/embedding/BatchEmbeddingAction.vue b/ui/src/views/knowledge-detail/library/document/action-dropdown/embedding/BatchEmbeddingAction.vue similarity index 100% rename from ui/src/views/knowledge-detail/document/action-dropdown/embedding/BatchEmbeddingAction.vue rename to ui/src/views/knowledge-detail/library/document/action-dropdown/embedding/BatchEmbeddingAction.vue diff --git a/ui/src/views/knowledge-detail/document/action-dropdown/embedding/DocumentEmbeddingDialog.vue b/ui/src/views/knowledge-detail/library/document/action-dropdown/embedding/DocumentEmbeddingDialog.vue similarity index 100% rename from ui/src/views/knowledge-detail/document/action-dropdown/embedding/DocumentEmbeddingDialog.vue rename to ui/src/views/knowledge-detail/library/document/action-dropdown/embedding/DocumentEmbeddingDialog.vue diff --git a/ui/src/views/knowledge-detail/document/action-dropdown/embedding/EmbeddingDocumentAction.vue b/ui/src/views/knowledge-detail/library/document/action-dropdown/embedding/EmbeddingDocumentAction.vue similarity index 100% rename from ui/src/views/knowledge-detail/document/action-dropdown/embedding/EmbeddingDocumentAction.vue rename to ui/src/views/knowledge-detail/library/document/action-dropdown/embedding/EmbeddingDocumentAction.vue diff --git a/ui/src/views/knowledge-detail/library/document/action-dropdown/export/BatchExportDocumentAction.vue b/ui/src/views/knowledge-detail/library/document/action-dropdown/export/BatchExportDocumentAction.vue new file mode 100644 index 00000000000..489558b98f1 --- /dev/null +++ b/ui/src/views/knowledge-detail/library/document/action-dropdown/export/BatchExportDocumentAction.vue @@ -0,0 +1,51 @@ + + + diff --git a/ui/src/views/knowledge-detail/library/document/action-dropdown/export/ExportDocumentAction.vue b/ui/src/views/knowledge-detail/library/document/action-dropdown/export/ExportDocumentAction.vue new file mode 100644 index 00000000000..aa4951117b6 --- /dev/null +++ b/ui/src/views/knowledge-detail/library/document/action-dropdown/export/ExportDocumentAction.vue @@ -0,0 +1,53 @@ + + + diff --git a/ui/src/views/knowledge-detail/document/action-dropdown/generate-questions/BatchGenerateQuestionsAction.vue b/ui/src/views/knowledge-detail/library/document/action-dropdown/generate-questions/BatchGenerateQuestionsAction.vue similarity index 93% rename from ui/src/views/knowledge-detail/document/action-dropdown/generate-questions/BatchGenerateQuestionsAction.vue rename to ui/src/views/knowledge-detail/library/document/action-dropdown/generate-questions/BatchGenerateQuestionsAction.vue index 263ddc579e0..3f1c29bb842 100644 --- a/ui/src/views/knowledge-detail/document/action-dropdown/generate-questions/BatchGenerateQuestionsAction.vue +++ b/ui/src/views/knowledge-detail/library/document/action-dropdown/generate-questions/BatchGenerateQuestionsAction.vue @@ -40,7 +40,7 @@ function handleSubmit(config: RelatedQuestionsConfig, stateList: DocumentTaskSta state_list: stateList, }) .then(() => { - MsgSuccess('任务已提交') + MsgSuccess('操作成功') dialogRef.value?.close() emit('refresh') }) @@ -59,6 +59,6 @@ function handleClosed() { diff --git a/ui/src/views/knowledge-detail/document/action-dropdown/generate-questions/GenerateQuestionsAction.vue b/ui/src/views/knowledge-detail/library/document/action-dropdown/generate-questions/GenerateQuestionsAction.vue similarity index 95% rename from ui/src/views/knowledge-detail/document/action-dropdown/generate-questions/GenerateQuestionsAction.vue rename to ui/src/views/knowledge-detail/library/document/action-dropdown/generate-questions/GenerateQuestionsAction.vue index aaf7b8cde15..718f9e14a47 100644 --- a/ui/src/views/knowledge-detail/document/action-dropdown/generate-questions/GenerateQuestionsAction.vue +++ b/ui/src/views/knowledge-detail/library/document/action-dropdown/generate-questions/GenerateQuestionsAction.vue @@ -62,7 +62,7 @@ function handleSubmit(config: RelatedQuestionsConfig, stateList: DocumentTaskSta state_list: stateList, }) .then(() => { - MsgSuccess('任务已提交') + MsgSuccess('操作成功') dialogRef.value?.close() emit('refresh') }) @@ -84,8 +84,8 @@ function handleClosed() { diff --git a/ui/src/views/knowledge-detail/document/action-dropdown/index.ts b/ui/src/views/knowledge-detail/library/document/action-dropdown/index.ts similarity index 76% rename from ui/src/views/knowledge-detail/document/action-dropdown/index.ts rename to ui/src/views/knowledge-detail/library/document/action-dropdown/index.ts index 595f793308f..111c587865c 100644 --- a/ui/src/views/knowledge-detail/document/action-dropdown/index.ts +++ b/ui/src/views/knowledge-detail/library/document/action-dropdown/index.ts @@ -6,10 +6,12 @@ export { default as EmbeddingDocumentAction } from './embedding/EmbeddingDocumen export { default as GenerateQuestionsAction } from './generate-questions/GenerateQuestionsAction.vue' export { default as BatchGenerateQuestionsAction } from './generate-questions/BatchGenerateQuestionsAction.vue' export { default as DownloadDocumentAction } from './DownloadDocumentAction.vue' -export { default as ExportDocumentAction } from './ExportDocumentAction.vue' +export { default as ExportDocumentAction } from './export/ExportDocumentAction.vue' +export { default as BatchExportDocumentAction } from './export/BatchExportDocumentAction.vue' export { default as MigrateDocumentAction } from './MigrateDocumentAction.vue' export { default as ReplaceDocumentAction } from './ReplaceDocumentAction.vue' export { default as SettingDocumentAction } from './SettingDocumentAction.vue' -export { default as SyncDocumentAction } from './SyncDocumentAction.vue' +export { default as SyncDocumentAction } from './sync/SyncDocumentAction.vue' +export { default as BatchSyncDocumentAction } from './sync/BatchSyncDocumentAction.vue' export { default as TokenizeDocumentAction } from './tokenize/TokenizeDocumentAction.vue' export { default as BatchTokenizeAction } from './tokenize/BatchTokenizeAction.vue' diff --git a/ui/src/views/knowledge-detail/library/document/action-dropdown/sync/BatchSyncDocumentAction.vue b/ui/src/views/knowledge-detail/library/document/action-dropdown/sync/BatchSyncDocumentAction.vue new file mode 100644 index 00000000000..8b1cf251af8 --- /dev/null +++ b/ui/src/views/knowledge-detail/library/document/action-dropdown/sync/BatchSyncDocumentAction.vue @@ -0,0 +1,50 @@ + + + diff --git a/ui/src/views/knowledge-detail/library/document/action-dropdown/sync/SyncDocumentAction.vue b/ui/src/views/knowledge-detail/library/document/action-dropdown/sync/SyncDocumentAction.vue new file mode 100644 index 00000000000..2989c79578a --- /dev/null +++ b/ui/src/views/knowledge-detail/library/document/action-dropdown/sync/SyncDocumentAction.vue @@ -0,0 +1,63 @@ + + + diff --git a/ui/src/views/knowledge-detail/document/action-dropdown/tokenize/BatchTokenizeAction.vue b/ui/src/views/knowledge-detail/library/document/action-dropdown/tokenize/BatchTokenizeAction.vue similarity index 100% rename from ui/src/views/knowledge-detail/document/action-dropdown/tokenize/BatchTokenizeAction.vue rename to ui/src/views/knowledge-detail/library/document/action-dropdown/tokenize/BatchTokenizeAction.vue diff --git a/ui/src/views/knowledge-detail/document/action-dropdown/tokenize/TokenizeDocumentAction.vue b/ui/src/views/knowledge-detail/library/document/action-dropdown/tokenize/TokenizeDocumentAction.vue similarity index 100% rename from ui/src/views/knowledge-detail/document/action-dropdown/tokenize/TokenizeDocumentAction.vue rename to ui/src/views/knowledge-detail/library/document/action-dropdown/tokenize/TokenizeDocumentAction.vue diff --git a/ui/src/views/knowledge-detail/document/components/DocumentStatus.vue b/ui/src/views/knowledge-detail/library/document/components/DocumentStatus.vue similarity index 100% rename from ui/src/views/knowledge-detail/document/components/DocumentStatus.vue rename to ui/src/views/knowledge-detail/library/document/components/DocumentStatus.vue diff --git a/ui/src/views/knowledge-detail/document/components/DocumentTags.vue b/ui/src/views/knowledge-detail/library/document/components/DocumentTags.vue similarity index 95% rename from ui/src/views/knowledge-detail/document/components/DocumentTags.vue rename to ui/src/views/knowledge-detail/library/document/components/DocumentTags.vue index 2e0a66b1a9c..14d0565e73e 100644 --- a/ui/src/views/knowledge-detail/document/components/DocumentTags.vue +++ b/ui/src/views/knowledge-detail/library/document/components/DocumentTags.vue @@ -18,8 +18,7 @@ const tagCount = computed(() => props.document.tag_count ?? props.document.tags? - - {{ tagCount }} + {{ tagCount }} diff --git a/ui/src/views/knowledge-detail/document/index.vue b/ui/src/views/knowledge-detail/library/document/index.vue similarity index 93% rename from ui/src/views/knowledge-detail/document/index.vue rename to ui/src/views/knowledge-detail/library/document/index.vue index 0a644133acf..0d9eb0d0ed5 100644 --- a/ui/src/views/knowledge-detail/document/index.vue +++ b/ui/src/views/knowledge-detail/library/document/index.vue @@ -31,10 +31,12 @@ import { BatchGenerateQuestionsAction, DownloadDocumentAction, ExportDocumentAction, + BatchExportDocumentAction, MigrateDocumentAction, ReplaceDocumentAction, SettingDocumentAction, SyncDocumentAction, + BatchSyncDocumentAction, TokenizeDocumentAction, BatchTokenizeAction, } from './action-dropdown' @@ -384,13 +386,14 @@ onBeforeUnmount(() => { /> - + @@ -426,22 +429,9 @@ onBeforeUnmount(() => { :disabled="operationLoading" @refresh="refreshAfterOperation" /> - - - - + + +