| | |
| | | <addKnow @knowledgeData="knowledgeData"></addKnow> |
| | | </div> |
| | | <div class="lf-container-down"> |
| | | <div class="tabs"> |
| | | <a-scrollbar style="height:56rem;overflow: auto;"> |
| | | <div |
| | | class="tab" |
| | | v-for="(tab, index) in tabs" |
| | |
| | | <a-popconfirm content="确定删除吗?" @ok="deleteKnowledge(tab.id)" type="warning"> |
| | | <span style="cursor: pointer;color: #0960bd;font-size: 12px"><icon-delete />删除</span> |
| | | </a-popconfirm> |
| | | |
| | | </template> |
| | | </a-popover> |
| | | </div> |
| | | </a-scrollbar> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="rt-container"> |
| | | <a-tabs default-active-key="1"> |
| | | <a-tab-pane key="1" :title= "t('dmx.list.DataSet')"> |
| | | <div class="rt-container-main"> |
| | | <a-card ref="account" class="general-card" :title="$t('')" style="padding-top: 20px"> |
| | | <a-card ref="account" class="general-card" title="" style="padding-top: 20px"> |
| | | <a-row> |
| | | <a-col :flex="1" :span="12"> |
| | | <a-form |
| | |
| | | <a-input-search |
| | | :placeholder="$t('cardList.searchInput.placeholder')" |
| | | style="width: 200px;margin-right: 10px" |
| | | v-model="keywords" |
| | | @change="search" |
| | | /> |
| | | <!-- 新建--> |
| | | <!--新建--> |
| | | <add :kbobj="kbobj" @changeFetchData="changeFetchData"/> |
| | | </a-col> |
| | | </a-row> |
| | |
| | | <!-- {{ $t('searchTable.operation.download') }}--> |
| | | <!-- </a-button>--> |
| | | <a-tooltip :content="$t('searchTable.actions.refresh')"> |
| | | <div class="action-icon" @click="search" |
| | | <div class="action-icon" |
| | | ><icon-refresh size="18" |
| | | /></div> |
| | | </a-tooltip> |
| | |
| | | <!-- <span>{{ parser_ids[record.parser_id]}}</span>--> |
| | | <!-- </template>--> |
| | | <template #status="{ record }"> |
| | | <a-switch v-model="record.status" checked-value="1" unchecked-value="0" @change="handleChangeStatus(record)"/> |
| | | <a-switch v-model="record.status" size="small" checked-value="1" unchecked-value="0" @change="handleChangeStatus(record)"/> |
| | | </template> |
| | | <template #run="{ record }"> |
| | | <div style="display: flex;align-items: center;"> |
| | |
| | | </template> |
| | | </a-button> |
| | | </a-popconfirm> |
| | | <a-button type="text" size="small"> |
| | | <a-button type="text" size="small" @click="onDownloadDocument(record)"> |
| | | <template #icon> |
| | | <icon-download /> |
| | | </template> |
| | | </a-button> |
| | | |
| | | <a-button type="text" size="small" @click="seeload(record)"> |
| | | <template #icon> |
| | | <icon-eye /> |
| | | </template> |
| | | </a-button> |
| | | |
| | | </template> |
| | | </a-table> |
| | | </a-card> |
| | |
| | | </a-tab-pane> |
| | | <a-tab-pane key="2" :title="t('dmx.list.test')"> |
| | | <div class="rt-container-main"> |
| | | <test ></test> |
| | | <test ref="testForm"></test> |
| | | </div> |
| | | </a-tab-pane> |
| | | <a-tab-pane key="3" :title="t('dmx.list.disposition')"> |
| | | <div class="rt-container-main"> |
| | | <config ></config> |
| | | <config ref="configForm" :kbtenantInfo="kbtenantInfo" :kbobj="kbobj"></config> |
| | | </div> |
| | | </a-tab-pane> |
| | | </a-tabs> |
| | | <div v-if="detailsShow" class="details"> |
| | | <div class="details-header"> |
| | | <div style="display: flex;align-items: center"> |
| | | <span><icon-arrow-left size="20px" style="cursor: pointer;color: #0960bd;margin: 10px" @click="goBackClick" /></span> |
| | | <icon-file style="color: #0960bd;margin-right: 4px;" /> |
| | | <span style="">123.docx</span> |
| | | </div> |
| | | <div style="display: flex; align-items: center;"> |
| | | <a-radio-group v-model="position" type="button" style="margin-right: 10px"> |
| | | <a-radio value="top">{{'dmx.list.EntireArticle'}}</a-radio> |
| | | <a-radio value="right">{{'dmx.list.omit'}}</a-radio> |
| | | </a-radio-group> |
| | | <a-popover position="bottom"> |
| | | <a-button type="outline" class="button" style="margin-right: 10px">{{'dmx.list.batch'}} <icon-down style="margin-left: 4px" /></a-button> |
| | | <template #content> |
| | | <p>Here is the text content</p> |
| | | <p>Here is the text content</p> |
| | | </template> |
| | | </a-popover> |
| | | <a-button type="outline" class="button" style="margin-right: 10px"> |
| | | <template #icon> |
| | | <icon-search /> |
| | | </template> |
| | | </a-button> |
| | | <a-popover position="bottom"> |
| | | <a-button type="outline" class="button" style="margin-right: 10px"><icon-sort /></a-button> |
| | | <template #content> |
| | | <p>Here is the text content</p> |
| | | <p>Here is the text content</p> |
| | | </template> |
| | | </a-popover> |
| | | <addDetails></addDetails> |
| | | </div> |
| | | </div> |
| | | <a-divider style="margin-top: 10px" /> |
| | | </div> |
| | | <!-- <div v-if="detailsShow" class="details">--> |
| | | <!-- <div class="details-header">--> |
| | | <!-- <div style="display: flex;align-items: center">--> |
| | | <!-- <span><icon-arrow-left size="20px" style="cursor: pointer;color: #0960bd;margin: 10px" @click="goBackClick" /></span>--> |
| | | <!-- <icon-file style="color: #0960bd;margin-right: 4px;" />--> |
| | | <!-- <span style="">123.docx</span>--> |
| | | <!-- </div>--> |
| | | <!-- <div style="display: flex; align-items: center;">--> |
| | | <!-- <a-radio-group v-model="position" type="button" style="margin-right: 10px">--> |
| | | <!-- <a-radio value="top">{{'dmx.list.EntireArticle'}}</a-radio>--> |
| | | <!-- <a-radio value="right">{{'dmx.list.omit'}}</a-radio>--> |
| | | <!-- </a-radio-group>--> |
| | | <!-- <a-popover position="bottom">--> |
| | | <!-- <a-button type="outline" class="button" style="margin-right: 10px">{{'dmx.list.batch'}} <icon-down style="margin-left: 4px" /></a-button>--> |
| | | <!-- <template #content>--> |
| | | <!-- <p>Here is the text content</p>--> |
| | | <!-- <p>Here is the text content</p>--> |
| | | <!-- </template>--> |
| | | <!-- </a-popover>--> |
| | | <!-- <a-button type="outline" class="button" style="margin-right: 10px">--> |
| | | <!-- <template #icon>--> |
| | | <!-- <icon-search />--> |
| | | <!-- </template>--> |
| | | <!-- </a-button>--> |
| | | <!-- <a-popover position="bottom">--> |
| | | <!-- <a-button type="outline" class="button" style="margin-right: 10px"><icon-sort /></a-button>--> |
| | | <!-- <template #content>--> |
| | | <!-- <p>Here is the text content</p>--> |
| | | <!-- <p>Here is the text content</p>--> |
| | | <!-- </template>--> |
| | | <!-- </a-popover>--> |
| | | <!-- <addDetails></addDetails>--> |
| | | <!-- </div>--> |
| | | <!-- </div>--> |
| | | <!-- <a-divider style="margin-top: 10px" />--> |
| | | <!-- </div>--> |
| | | </div> |
| | | </div> |
| | | <a-modal title=" " v-model:visible="visible" :footer="false" fullscreen> |
| | | <!-- <docx v-if="documenttype=='docx'" previewSrc="http://192.168.20.116:1080/v1/document/get/405c3efa4d8c11ef97560242ac120006"></docx>--> |
| | | <docx v-if="documenttype=='docx'" :previewSrc="previewSrc"></docx> |
| | | <excel v-if="documenttype=='excel'" :previewSrc="previewSrc"></excel> |
| | | <txtPdf v-if="documenttype=='txtPdf'" :previewSrc="previewSrc"></txtPdf> |
| | | </a-modal> |
| | | </div> |
| | | </template> |
| | | |
| | | <script lang="ts" setup> |
| | | import { computed, ref, reactive, watch, nextTick, onBeforeMount } from "vue"; |
| | | import { computed, ref, reactive, watch, nextTick, onBeforeMount, onMounted } from "vue"; |
| | | import { useI18n } from 'vue-i18n'; |
| | | import useLoading from '@/hooks/loading'; |
| | | import { |
| | |
| | | queryKbDocumentList, |
| | | deleteKnow, |
| | | queryKbdetail, |
| | | queryKbtenantInfo, kbdocumentrm, kbdocumentchangeparser, kbdocumentrun, kbdocumentchangeStatus |
| | | queryKbtenantInfo, kbdocumentrm, kbdocumentchangeparser, kbdocumentrun, kbdocumentchangeStatus,downloadFile |
| | | } from "@/api/kbList"; |
| | | import { Pagination } from '@/types/global'; |
| | | import type { SelectOptionData } from '@arco-design/web-vue/es/select/interface'; |
| | |
| | | import config from '@/views/dmx/knowledgeLib/config.vue' |
| | | import test from '@/views/dmx/knowledgeLib/test.vue' |
| | | import tool from '@/views/dmx/knowledgeLib/tool.vue' |
| | | import addDetails from '@/views/dmx/knowledgeLib/addDetails.vue' |
| | | import { Message } from "@arco-design/web-vue"; |
| | | import { parseTime } from "@/utils"; |
| | | import docx from '@/views/dmx/knowledgeLib/components/docx.vue' |
| | | import excel from '@/views/dmx/knowledgeLib/components/excel.vue' |
| | | import txtPdf from '@/views/dmx/knowledgeLib/components/txtPdf.vue' |
| | | import { Message } from "@arco-design/web-vue"; |
| | | import { parseTime } from "@/utils"; |
| | | type SizeProps = 'mini' | 'small' | 'medium' | 'large'; |
| | | type Column = TableColumnData & { checked?: true }; |
| | | const account = ref(null) |
| | |
| | | |
| | | const size = ref<SizeProps>('medium'); |
| | | let visible = ref(false) |
| | | let keywords = ref('') |
| | | let detailsShow = ref(false) |
| | | let selectedTab = ref(0) |
| | | let testForm = ref(null) |
| | | let configForm = ref(null) |
| | | let documenttype = ref('docx') |
| | | let previewSrc = ref('') |
| | | let kbId = ref('') |
| | | let kbobj = reactive({}) |
| | | let kbdetail = reactive({}) |
| | | let parser_ids = reactive({}) |
| | | let seeObj = reactive({}) |
| | | let kbtenantInfo = reactive({ |
| | | "asr_id": "paraformer-realtime-8k-v1", |
| | | "embd_id": "BAAI/bge-large-zh-v1.5", |
| | |
| | | |
| | | const selectTab = (index,item) => { |
| | | selectedTab.value= index; |
| | | console.log(item.id); |
| | | kbobj= item |
| | | // console.log(item.id); |
| | | kbobj= item; |
| | | kbId = kbobj.id; |
| | | testForm.value.changekbid(kbId); |
| | | configForm.value.changekbObj(kbobj); |
| | | fetchData({ |
| | | kb_id: kbobj.id, |
| | | page: 1, |
| | |
| | | title: t('dmx.column.Operate'), |
| | | dataIndex: 'action', |
| | | slotName: 'action', |
| | | width: 150, |
| | | minWidth: 150, |
| | | width: 200, |
| | | minWidth: 200, |
| | | }, |
| | | ]); |
| | | const contentTypeOptions = computed<SelectOptionData[]>(() => [ |
| | |
| | | acc[key] = value; |
| | | return acc; |
| | | }, {}); |
| | | console.log(parser_ids, 'parser_ids'); |
| | | // console.log(parser_ids, 'parser_ids'); |
| | | kbtenantInfo.parser_idObj = parser_ids; |
| | | renderData.value = data.data.docs||[]; |
| | | renderData.value = renderData.value.map((item) => { |
| | |
| | | parser_id: parser_ids[item.parser_id], |
| | | }; |
| | | }); |
| | | console.log(renderData.value, 'renderData.value'); |
| | | console.log(renderData.value, 'renderData'); |
| | | |
| | | pagination.current = params.page; |
| | | pagination.total = data.data.total; |
| | |
| | | kbdetail = await queryKbdetail({ |
| | | kb_id:params.kb_id, |
| | | }); |
| | | |
| | | |
| | | |
| | | |
| | | } |
| | | } catch (err) { |
| | |
| | | }; |
| | | |
| | | const search = () => { |
| | | alert(1) |
| | | // fetchData({ |
| | | // ...basePagination, |
| | | // ...formModel.value, |
| | | // }); |
| | | fetchData({ |
| | | kb_id: kbobj.id, |
| | | page: 1, |
| | | page_size: 20, |
| | | keywords:keywords.value |
| | | }) |
| | | }; |
| | | |
| | | const handleClick = ()=>{ |
| | |
| | | console.log(tabs.value, 'tabs'); |
| | | if(tabs.value.length>0 && tabs.value[0]){ |
| | | kbobj = tabs.value[0] |
| | | kbId = kbobj.id; |
| | | testForm.value.changekbid(kbId); |
| | | configForm.value.changekbObj(kbobj); |
| | | fetchData({ |
| | | kb_id: kbobj.id, |
| | | page: 1, |
| | |
| | | }) |
| | | } |
| | | } |
| | | const onDownloadDocument = async (record)=>{ |
| | | console.log(record); |
| | | downloadFile({ |
| | | url: `/api/v1/document/get/${record.id}`, |
| | | filename: record.name, |
| | | }); |
| | | } |
| | | const seeload = async (row)=>{ |
| | | Object.assign(seeObj, row) |
| | | // console.log(seeObj.name, 'seeObj'); |
| | | let type = row.name.split('.')[1]; |
| | | console.log(type); |
| | | if(type=='pdf'){ |
| | | documenttype.value = 'txtPdf' |
| | | }else if(type=='docx'){ |
| | | documenttype.value = 'docx' |
| | | }else if(type=='xlsx'){ |
| | | documenttype.value = 'excel' |
| | | }else if(type=='txt'){ |
| | | documenttype.value = 'txtPdf' |
| | | }else { |
| | | return false |
| | | } |
| | | previewSrc.value = `${import.meta.env.VITE_API_BASE_URL}/v1/document/get/${row.id}` |
| | | visible.value = true; |
| | | |
| | | } |
| | | |
| | | const handleChangeStatus = async (row)=>{ |
| | | console.log(row); |
| | |
| | | doc_ids: [row.id], |
| | | run: run |
| | | }) |
| | | // let data = await kbdocumentchangeparser({ |
| | | // parser_id: row.parser_id, |
| | | // doc_id: row.id, |
| | | // parser_config: row.parser_config, |
| | | // }) |
| | | if(data.code == 0){ |
| | | Message.success('解析成功'); |
| | | row.run = '3'; |
| | |
| | | ); |
| | | |
| | | onBeforeMount(()=>{ |
| | | |
| | | }) |
| | | onMounted(()=>{ |
| | | knowledgeData() |
| | | }) |
| | | |
| | |
| | | padding: 0 20px 20px 20px; |
| | | .main-container{ |
| | | display: flex; |
| | | width: 100%; |
| | | height: 100%; |
| | | .lf-container{ |
| | | display: flex; |
| | | flex-direction: column; |
| | |
| | | width: 200px; |
| | | .lf-container-top{ |
| | | display: flex; |
| | | margin: 10px 0; |
| | | } |
| | | .lf-container-down{ |
| | | display: flex; |
| | | flex-direction: column; |
| | | box-sizing: border-box; |
| | | width: 90%; |
| | | height: calc(100% - 5rem); |
| | | //height: 56rem; |
| | | border: 1px solid #eeeeee; |
| | | overflow: auto; |
| | | padding: 10px; |
| | | .tabs .tab { |
| | | //padding: 10px; |
| | | margin-bottom: 10px; |
| | | //.tabs{ |
| | | // width: 100%; |
| | | // height: 100%; |
| | | // overflow: auto; |
| | | //} |
| | | .tab { |
| | | cursor: pointer; |
| | | box-sizing: border-box; |
| | | margin: 10px 0; |
| | | margin: 10px 10px; |
| | | padding:0 10px; |
| | | color: rgba(0, 0, 0, 0.88); |
| | | font-size: 14px; |
| | |
| | | border: 1px solid #f0f0f0; |
| | | border-radius: 8px; |
| | | } |
| | | .tabs .tab:hover { |
| | | .tab:hover { |
| | | border: 1px solid #ffffff; |
| | | background: #e8e8ea; |
| | | box-shadow: 0 1px 2px -2px rgba(0, 0, 0, 0.16), 0 3px 6px 0 rgba(0, 0, 0, 0.12), 0 5px 12px 4px rgba(0, 0, 0, 0.09); |
| | | } |
| | | .tabs .tab.active { |
| | | .tab.active { |
| | | border: 1px solid #e8e8ea; |
| | | background: #e8e8ea; |
| | | cursor: pointer; |
| | |
| | | //background: #626aea; |
| | | margin-left: 20px; |
| | | width: calc(100% - 200px); |
| | | height: calc(100% - 5rem); |
| | | height: 56rem; |
| | | .rt-container-main{ |
| | | height: 76vh; |
| | | } |