From 8b6ce9fc41e0e4943ba1f5c4ad60eb1d29f77aeb Mon Sep 17 00:00:00 2001 From: wangdan-fit2cloud Date: Wed, 4 Jun 2025 20:41:30 +0800 Subject: [PATCH] feat: knowledge --- ui/src/api/folder.ts | 24 +++- .../folder-tree/CreateFolderDialog.vue | 110 ++++++++++++++++++ ui/src/locales/lang/en-US/components.ts | 5 +- ui/src/locales/lang/zh-CN/components.ts | 9 +- ui/src/locales/lang/zh-Hant/components.ts | 9 +- ui/src/router/modules/document.ts | 12 +- .../knowledge/component/ResultSuccess.vue | 2 +- .../CreateKnowledgeDialog.vue | 2 +- .../CreateWebKnowledgeDialog.vue | 2 +- ui/src/views/knowledge/index.vue | 18 ++- 10 files changed, 173 insertions(+), 20 deletions(-) create mode 100644 ui/src/components/folder-tree/CreateFolderDialog.vue diff --git a/ui/src/api/folder.ts b/ui/src/api/folder.ts index 51f2d7d24..5b092528f 100644 --- a/ui/src/api/folder.ts +++ b/ui/src/api/folder.ts @@ -5,10 +5,10 @@ import type { pageRequest } from '@/api/type/common' const prefix = '/workspace' /** - * 获得知识库文件夹列表 + * 获得文件夹列表 * @params 参数 * source : APPLICATION, KNOWLEDGE, TOOL - * {name: string} + * data : {name: string} */ const getFolder: ( wordspace_id: string, @@ -19,6 +19,26 @@ const getFolder: ( return get(`${prefix}/${wordspace_id}/${source}/folder`, data, loading) } +/** + * 添加文件夹 + * @params 参数 + * source : APPLICATION, KNOWLEDGE, TOOL +{ + "name": "string", + "desc": "string", + "parent_id": "root" +} + */ +const postFolder: ( + wordspace_id: string, + source: string, + data?: any, + loading?: Ref, +) => Promise>> = (wordspace_id, source, data, loading) => { + return post(`${prefix}/${wordspace_id}/${source}/folder`, data, loading) +} + export default { getFolder, + postFolder, } diff --git a/ui/src/components/folder-tree/CreateFolderDialog.vue b/ui/src/components/folder-tree/CreateFolderDialog.vue new file mode 100644 index 000000000..b4b1cdc33 --- /dev/null +++ b/ui/src/components/folder-tree/CreateFolderDialog.vue @@ -0,0 +1,110 @@ + + + diff --git a/ui/src/locales/lang/en-US/components.ts b/ui/src/locales/lang/en-US/components.ts index ee840bb04..d35e5eddc 100644 --- a/ui/src/locales/lang/en-US/components.ts +++ b/ui/src/locales/lang/en-US/components.ts @@ -10,6 +10,9 @@ export default { all: 'All Segments' }, folder: { - addFolder:'Add Folder' + addFolder: 'Add Folder', + folderNamePlaceholder: 'Please enter a name', + description: 'Description', + descriptionPlaceholder: 'Please enter a description', } } diff --git a/ui/src/locales/lang/zh-CN/components.ts b/ui/src/locales/lang/zh-CN/components.ts index 64699afa0..14c13c110 100644 --- a/ui/src/locales/lang/zh-CN/components.ts +++ b/ui/src/locales/lang/zh-CN/components.ts @@ -7,9 +7,12 @@ export default { selectParagraph: { title: '选择分段', error: '仅执行未成功分段', - all: '全部分段' + all: '全部分段', }, folder: { - addFolder:'添加文件夹' - } + addFolder: '添加文件夹', + folderNamePlaceholder: '请输入名称', + description: '描述', + descriptionPlaceholder: '请输入描述', + }, } diff --git a/ui/src/locales/lang/zh-Hant/components.ts b/ui/src/locales/lang/zh-Hant/components.ts index c8af911af..f4be4bf2b 100644 --- a/ui/src/locales/lang/zh-Hant/components.ts +++ b/ui/src/locales/lang/zh-Hant/components.ts @@ -7,9 +7,12 @@ export default { selectParagraph: { title: '選擇分段', error: '僅執行未成功分段', - all: '全部分段' + all: '全部分段', }, folder: { - addFolder:'添加文件夾' - } + addFolder: '添加文件夾', + folderNamePlaceholder: '請輸入名稱', + description: '描述', + descriptionPlaceholder: '請輸入描述', + }, } diff --git a/ui/src/router/modules/document.ts b/ui/src/router/modules/document.ts index b542b46b5..00f2cf2f0 100644 --- a/ui/src/router/modules/document.ts +++ b/ui/src/router/modules/document.ts @@ -1,5 +1,5 @@ const DocumentRouter = { - path: '/knowledge/:id', + path: '/knowledge/:id/:folderId', name: 'KnowledgeDetail', meta: { title: 'common.fileUpload.document', activeMenu: '/knowledge', breadcrumb: true }, component: () => import('@/layout/layout-template/MainLayout.vue'), @@ -13,7 +13,7 @@ const DocumentRouter = { iconActive: 'app-document-active', title: 'common.fileUpload.document', active: 'document', - parentPath: '/knowledge/:id', + parentPath: '/knowledge/:id/:folderId', parentName: 'KnowledgeDetail', }, component: () => import('@/views/document/index.vue'), @@ -26,7 +26,7 @@ const DocumentRouter = { iconActive: 'QuestionFilled', title: 'views.problem.title', active: 'problem', - parentPath: '/knowledge/:id', + parentPath: '/knowledge/:id/:folderId', parentName: 'KnowledgeDetail' }, component: () => import('@/views/problem/index.vue') @@ -38,7 +38,7 @@ const DocumentRouter = { icon: 'app-hit-test', title: 'views.application.hitTest.title', active: 'hit-test', - parentPath: '/knowledge/:id', + parentPath: '/knowledge/:id/:folderId', parentName: 'KnowledgeDetail' }, component: () => import('@/views/hit-test/index.vue') @@ -51,8 +51,8 @@ const DocumentRouter = { // iconActive: 'app-setting-active', // title: 'common.setting', // active: 'setting', - // parentPath: '/dataset/:id', - // parentName: 'DatasetDetail' + // parentPath: '/knowledge/:id/:folderId', + // parentName: 'KnowledgeDetail' // }, // component: () => import('@/views/dataset/DatasetSetting.vue') // } diff --git a/ui/src/views/knowledge/component/ResultSuccess.vue b/ui/src/views/knowledge/component/ResultSuccess.vue index f1d1087cc..e61b101de 100644 --- a/ui/src/views/knowledge/component/ResultSuccess.vue +++ b/ui/src/views/knowledge/component/ResultSuccess.vue @@ -19,7 +19,7 @@ {{ $t('views.dataset.ResultSuccess.buttons.toDataset') }} - {{ + {{ $t('views.dataset.ResultSuccess.buttons.toDocument') }} diff --git a/ui/src/views/knowledge/create-component/CreateKnowledgeDialog.vue b/ui/src/views/knowledge/create-component/CreateKnowledgeDialog.vue index a2c9f4712..167494640 100644 --- a/ui/src/views/knowledge/create-component/CreateKnowledgeDialog.vue +++ b/ui/src/views/knowledge/create-component/CreateKnowledgeDialog.vue @@ -57,7 +57,7 @@ const submitHandle = async () => { } KnowledgeApi.postDataset('default', obj, loading).then((res) => { MsgSuccess(t('common.createSuccess')) - // router.push({ path: `/knowledge/${res.data.id}/document` }) + // router.push({ path: `/knowledge/${res.data.id}/${currentFolder.value.id}/document` }) emit('refresh') }) } else { diff --git a/ui/src/views/knowledge/create-component/CreateWebKnowledgeDialog.vue b/ui/src/views/knowledge/create-component/CreateWebKnowledgeDialog.vue index b2523c4a5..a717848f0 100644 --- a/ui/src/views/knowledge/create-component/CreateWebKnowledgeDialog.vue +++ b/ui/src/views/knowledge/create-component/CreateWebKnowledgeDialog.vue @@ -103,7 +103,7 @@ const submitHandle = async () => { } KnowledgeApi.postWebDataset('default', obj, loading).then((res) => { MsgSuccess(t('common.createSuccess')) - router.push({ path: `/knowledge/${res.data.id}/document` }) + router.push({ path: `/knowledge/${res.data.id}/${currentFolder.value.id}/document` }) emit('refresh') }) } else { diff --git a/ui/src/views/knowledge/index.vue b/ui/src/views/knowledge/index.vue index 945de562d..8122c444e 100644 --- a/ui/src/views/knowledge/index.vue +++ b/ui/src/views/knowledge/index.vue @@ -117,7 +117,7 @@ - +
@@ -174,7 +174,9 @@ :title="item.name" :description="item.desc" class="cursor" - @click="router.push({ path: `/knowledge/${item.id}/document` })" + @click=" + router.push({ path: `/knowledge/${item.id}/${currentFolder.id}/document` }) + " > @@ -268,6 +271,7 @@ import { onMounted, ref, reactive, shallowRef, nextTick } from 'vue' import KnowledgeIcon from '@/views/knowledge/component/KnowledgeIcon.vue' import CreateKnowledgeDialog from './create-component/CreateKnowledgeDialog.vue' import CreateWebKnowledgeDialog from './create-component/CreateWebKnowledgeDialog.vue' +import CreateFolderDialog from '@/components/folder-tree/CreateFolderDialog.vue' import KnowledgeApi from '@/api/knowledge/knowledge' import { MsgSuccess, MsgConfirm } from '@/utils/message' import useStore from '@/stores' @@ -365,6 +369,16 @@ function folderClickHandel(row: any) { knowledgeList.value = [] getList() } +const CreateFolderDialogRef = ref() + +function openCreateFolder() { + CreateFolderDialogRef.value.open('KNOWLEDGE', currentFolder.value.parent_id) +} + +function refreshFolder() { + getFolder() + getList() +} onMounted(() => { getFolder()