feat: 增加知识库新类型FAQ知识库
This commit is contained in:
@@ -1,19 +1,21 @@
|
||||
<script setup lang="ts">
|
||||
import { onMounted, ref } from 'vue';
|
||||
import { useRoute, useRouter } from 'vue-router';
|
||||
import {computed, onMounted, ref} from 'vue';
|
||||
import {useRoute, useRouter} from 'vue-router';
|
||||
|
||||
import { $t } from '@easyflow/locales';
|
||||
import {$t} from '@easyflow/locales';
|
||||
|
||||
import { ArrowLeft, Plus } from '@element-plus/icons-vue';
|
||||
import { ElIcon, ElImage } from 'element-plus';
|
||||
import {ArrowLeft, Plus} from '@element-plus/icons-vue';
|
||||
import {ElIcon, ElImage} from 'element-plus';
|
||||
|
||||
import { api } from '#/api/request';
|
||||
import {api} from '#/api/request';
|
||||
import bookIcon from '#/assets/ai/knowledge/book.svg';
|
||||
import HeaderSearch from '#/components/headerSearch/HeaderSearch.vue';
|
||||
import PageSide from '#/components/page/PageSide.vue';
|
||||
import ChunkDocumentTable from '#/views/ai/documentCollection/ChunkDocumentTable.vue';
|
||||
import DocumentCollectionDataConfig from '#/views/ai/documentCollection/DocumentCollectionDataConfig.vue';
|
||||
import DocumentCollectionDataConfig
|
||||
from '#/views/ai/documentCollection/DocumentCollectionDataConfig.vue';
|
||||
import DocumentTable from '#/views/ai/documentCollection/DocumentTable.vue';
|
||||
import FaqTable from '#/views/ai/documentCollection/FaqTable.vue';
|
||||
import ImportKnowledgeDocFile from '#/views/ai/documentCollection/ImportKnowledgeDocFile.vue';
|
||||
import KnowledgeSearch from '#/views/ai/documentCollection/KnowledgeSearch.vue';
|
||||
import KnowledgeSearchConfig from '#/views/ai/documentCollection/KnowledgeSearchConfig.vue';
|
||||
@@ -24,6 +26,21 @@ const router = useRouter();
|
||||
const knowledgeId = ref<string>((route.query.id as string) || '');
|
||||
const activeMenu = ref<string>((route.query.activeMenu as string) || '');
|
||||
const knowledgeInfo = ref<any>({});
|
||||
const selectedCategory = ref('');
|
||||
const defaultSelectedMenu = ref('');
|
||||
|
||||
const resolveDefaultMenu = (collectionType: string, menuKey: string) => {
|
||||
const faqMenus = new Set(['faqList', 'knowledgeSearch', 'config']);
|
||||
const documentMenus = new Set(['documentList', 'knowledgeSearch', 'config']);
|
||||
const fallbackMenu = collectionType === 'FAQ' ? 'faqList' : 'documentList';
|
||||
|
||||
if (!menuKey) {
|
||||
return fallbackMenu;
|
||||
}
|
||||
const validMenuSet = collectionType === 'FAQ' ? faqMenus : documentMenus;
|
||||
return validMenuSet.has(menuKey) ? menuKey : fallbackMenu;
|
||||
};
|
||||
|
||||
const getKnowledge = () => {
|
||||
api
|
||||
.get('/api/v1/documentCollection/detail', {
|
||||
@@ -32,23 +49,36 @@ const getKnowledge = () => {
|
||||
.then((res) => {
|
||||
if (res.errorCode === 0) {
|
||||
knowledgeInfo.value = res.data;
|
||||
const initialMenu = resolveDefaultMenu(
|
||||
res.data.collectionType || 'DOCUMENT',
|
||||
activeMenu.value,
|
||||
);
|
||||
defaultSelectedMenu.value = initialMenu;
|
||||
selectedCategory.value = initialMenu;
|
||||
}
|
||||
});
|
||||
};
|
||||
onMounted(() => {
|
||||
if (activeMenu.value) {
|
||||
defaultSelectedMenu.value = activeMenu.value;
|
||||
}
|
||||
getKnowledge();
|
||||
});
|
||||
const back = () => {
|
||||
router.push({ path: '/ai/documentCollection' });
|
||||
};
|
||||
const categoryData = [
|
||||
{ key: 'documentList', name: $t('documentCollection.documentList') },
|
||||
{ key: 'knowledgeSearch', name: $t('documentCollection.knowledgeRetrieval') },
|
||||
{ key: 'config', name: $t('documentCollection.config') },
|
||||
];
|
||||
const isFaqCollection = computed(() => knowledgeInfo.value.collectionType === 'FAQ');
|
||||
const categoryData = computed(() => {
|
||||
if (isFaqCollection.value) {
|
||||
return [
|
||||
{ key: 'faqList', name: $t('documentCollection.faq.faqList') },
|
||||
{ key: 'knowledgeSearch', name: $t('documentCollection.knowledgeRetrieval') },
|
||||
{ key: 'config', name: $t('documentCollection.config') },
|
||||
];
|
||||
}
|
||||
return [
|
||||
{ key: 'documentList', name: $t('documentCollection.documentList') },
|
||||
{ key: 'knowledgeSearch', name: $t('documentCollection.knowledgeRetrieval') },
|
||||
{ key: 'config', name: $t('documentCollection.config') },
|
||||
];
|
||||
});
|
||||
const headerButtons = [
|
||||
{
|
||||
key: 'importFile',
|
||||
@@ -59,7 +89,6 @@ const headerButtons = [
|
||||
},
|
||||
];
|
||||
const isImportFileVisible = ref(false);
|
||||
const selectedCategory = ref('documentList');
|
||||
const documentTableRef = ref();
|
||||
const handleSearch = (searchParams: string) => {
|
||||
documentTableRef.value.search(searchParams);
|
||||
@@ -91,7 +120,6 @@ const viewDoc = (docId: string) => {
|
||||
const backDoc = () => {
|
||||
isImportFileVisible.value = false;
|
||||
};
|
||||
const defaultSelectedMenu = ref('documentList');
|
||||
</script>
|
||||
|
||||
<template>
|
||||
@@ -127,6 +155,7 @@ const defaultSelectedMenu = ref('documentList');
|
||||
<div v-if="selectedCategory === 'documentList'" class="doc-table">
|
||||
<div class="doc-header" v-if="!viewDocVisible">
|
||||
<HeaderSearch
|
||||
v-if="!isFaqCollection"
|
||||
:buttons="headerButtons"
|
||||
@search="handleSearch"
|
||||
@button-click="handleButtonClick"
|
||||
@@ -145,6 +174,9 @@ const defaultSelectedMenu = ref('documentList');
|
||||
:default-summary-prompt="knowledgeInfo.summaryPrompt"
|
||||
/>
|
||||
</div>
|
||||
<div v-if="selectedCategory === 'faqList'" class="doc-table">
|
||||
<FaqTable :knowledge-id="knowledgeId" />
|
||||
</div>
|
||||
<!--知识检索-->
|
||||
<div
|
||||
v-if="selectedCategory === 'knowledgeSearch'"
|
||||
|
||||
Reference in New Issue
Block a user