From e8ef9b11210d256adc241a98d60370bf867e008e Mon Sep 17 00:00:00 2001 From: liudong <liudong> Date: 星期一, 05 八月 2024 14:21:03 +0800 Subject: [PATCH] 知识库智能体管理的页面开发和功能开发 --- src/views/dmx/knowledgeLib/test.vue | 345 +++++------ src/views/dmx/knowledgeLib/tool.vue | 862 +++++++++++---------------- src/views/dmx/knowledgeLib/index.vue | 630 ++++++++----------- 3 files changed, 777 insertions(+), 1,060 deletions(-) diff --git a/src/views/dmx/knowledgeLib/index.vue b/src/views/dmx/knowledgeLib/index.vue index 5163d69..31d1c7d 100644 --- a/src/views/dmx/knowledgeLib/index.vue +++ b/src/views/dmx/knowledgeLib/index.vue @@ -6,51 +6,37 @@ <div class="lf-container-top"> <a-input-search :placeholder="$t('cardList.searchInput.placeholder')" - style="width: 130px" + style="width: 130px;" /> <addKnow @knowledgeData="knowledgeData"></addKnow> </div> <div class="lf-container-down"> - <a-scrollbar style="height: 56rem; overflow: auto"> + <a-scrollbar style="height:56rem;overflow: auto;"> <div class="tab" v-for="(tab, index) in tabs" :key="index" - @click="selectTab(index, tab)" - :class="{ active: selectedTab === index }" + @click="selectTab(index,tab)" + :class="{ 'active': selectedTab === index }" > {{ tab.name }} <a-popover position="bl"> - <icon-more - :style="{ position: 'absolute', top: '10px', right: '20px' }" - /> + <icon-more :style="{position: 'absolute',top:'10px',right:'20px'}"/> <template #content> - <a-popconfirm - content="纭畾鍒犻櫎鍚�?" - @ok="deleteKnowledge(tab.id)" - type="warning" - > - <span - style="cursor: pointer; color: #0960bd; font-size: 12px" - ><icon-delete />鍒犻櫎</span - > + <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')"> + <a-tab-pane key="1" :title= "t('dmx.list.DataSet')"> <div class="rt-container-main"> - <a-card - ref="account" - class="general-card" - title="" - 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 @@ -60,27 +46,15 @@ label-align="left" > <a-row :gutter="16"> - <a-col - :span="24" - style=" - margin-bottom: 10px; - display: flex; - justify-content: right; - " - > + <a-col :span="24" style="margin-bottom: 10px;display: flex;justify-content: right"> <a-input-search - :placeholder=" - $t('cardList.searchInput.placeholder') - " - style="width: 200px; margin-right: 10px" + :placeholder="$t('cardList.searchInput.placeholder')" + style="width: 200px;margin-right: 10px" v-model="keywords" @change="search" /> <!--鏂板缓--> - <add - :kbobj="kbobj" - @changeFetchData="changeFetchData" - /> + <add :kbobj="kbobj" @changeFetchData="changeFetchData"/> </a-col> </a-row> </a-form> @@ -107,11 +81,7 @@ </a-col> <a-col :span="12" - style=" - display: flex; - align-items: center; - justify-content: end; - " + style="display: flex; align-items: center; justify-content: end" > <!-- <a-button>--> <!-- <template #icon>--> @@ -120,13 +90,13 @@ <!-- {{ $t('searchTable.operation.download') }}--> <!-- </a-button>--> <a-tooltip :content="$t('searchTable.actions.refresh')"> - <div class="action-icon"><icon-refresh size="18" /></div> + <div class="action-icon" + ><icon-refresh size="18" + /></div> </a-tooltip> <a-dropdown @select="handleSelectDensity"> <a-tooltip :content="$t('searchTable.actions.density')"> - <div class="action-icon" - ><icon-line-height size="18" - /></div> + <div class="action-icon"><icon-line-height size="18" /></div> </a-tooltip> <template #content> <a-doption @@ -187,132 +157,84 @@ :scroll="{ y: 580 }" > <template #name="{ record }"> - <!-- <icon-file style="color: #0960bd;margin-right: 4px;" />--> - <icon-file style="margin-right: 4px" /> - <!-- <span style="color: #0960bd;cursor: pointer" @click="fileClick">--> - <!-- {{record.name}}--> - <!-- </span>--> - {{ record.name }} +<!-- <icon-file style="color: #0960bd;margin-right: 4px;" />--> + <icon-file style="margin-right: 4px;" /> +<!-- <span style="color: #0960bd;cursor: pointer" @click="fileClick">--> +<!-- {{record.name}}--> +<!-- </span>--> + {{record.name}} </template> <template #create_time="{ record }"> - <span>{{ parseTime(record.create_time) }}</span> + <span>{{parseTime(record.create_time)}}</span> </template> - <!-- <template #parser_id="{ record }">--> - <!-- <span>{{ parser_ids[record.parser_id]}}</span>--> - <!-- </template>--> +<!-- <template #parser_id="{ record }">--> +<!-- <span>{{ parser_ids[record.parser_id]}}</span>--> +<!-- </template>--> <template #status="{ record }"> - <a-switch - v-model="record.status" - size="small" - 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"> + <div style="display: flex;align-items: center;"> <div style="width: 100px"> <a-popover title="Title" v-if="record.run == '3'"> - <a-tag - :loading="record.loading" - :color="'blue'" - border - >{{ $t('dmx.list.complete') }}</a-tag - > + <a-tag :loading="record.loading" :color="'blue'" border>{{$t('dmx.list.complete')}}</a-tag> <template #content> <p>Here is the text content</p> </template> </a-popover> <a-popover title="Title" v-if="record.run == '1'"> - <a-tag - :loading="record.loading" - :color="'blue'" - border - >{{ $t('dmx.list.complete') }}</a-tag - > + <a-tag :loading="record.loading" :color="'blue'" border>{{$t('dmx.list.complete')}}</a-tag> <template #content> <p>Here is the text content</p> </template> </a-popover> <a-popover title="Title" v-if="record.run == '2'"> - <a-tag - :loading="record.loading" - :color="'gold'" - border - >{{ $t('dmx.list.cancel') }}</a-tag - > + <a-tag :loading="record.loading" :color="'gold'" border>{{$t('dmx.list.cancel')}}</a-tag> <template #content> <p>Here is the text content</p> </template> </a-popover> <a-popover title="Title" v-if="record.run == '0'"> - <a-tag - :loading="record.loading" - :color="'green'" - border - >{{ $t('dmx.list.NotStarted') }}</a-tag - > + <a-tag :loading="record.loading" :color="'green'" border>{{$t('dmx.list.NotStarted')}}</a-tag> <template #content> <p>Here is the text content</p> </template> </a-popover> </div> - <div> - <a-button - type="text" - size="large" - @click="run(record)" - :loading="record.loading" - > + <div > + <a-button type="text" size="large" @click="run(record)" :loading="record.loading"> <template #icon> - <icon-sync v-if="record.run == '3'" /> - <icon-sync v-if="record.run == '2'" /> - <icon-sync - style="color: green" - v-if="record.run == '1'" - /> - <icon-play-circle - style="color: green" - v-if="record.run == '0'" - /> + <icon-sync v-if="record.run == '3'"/> + <icon-sync v-if="record.run == '2'"/> + <icon-sync style="color: green" v-if="record.run == '1'"/> + <icon-play-circle style="color: green" v-if="record.run == '0'"/> </template> </a-button> </div> </div> </template> - <template #action="{ record }"> - <tool - :kbtenantInfo="kbtenantInfo" - :item="record" - :kbdetail="kbdetail" - /> - <edit :item="record" @upTabdateItem="upTabdateItem" /> - <a-popconfirm - :content="'纭畾鍒犻櫎鍚�'" - type="warning" - @ok="deleteItem(record)" - > - <a-button type="text" size="small"> + <template #action="{ record }" > + <tool :kbtenantInfo="kbtenantInfo" :item="record" :kbdetail="kbdetail" /> + <edit :item="record" @upTabdateItem="upTabdateItem"/> + <a-popconfirm :content="'纭畾鍒犻櫎鍚�'" type="warning" @ok="deleteItem(record)"> + <a-button type="text" size="small"> <template #icon> <icon-delete /> </template> </a-button> </a-popconfirm> - <a-button - type="text" - size="small" - @click="onDownloadDocument(record)" - > + <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)"> + <a-button type="text" size="small" @click="seeload(record)"> <template #icon> <icon-eye /> </template> </a-button> + </template> </a-table> </a-card> @@ -325,107 +247,89 @@ </a-tab-pane> <a-tab-pane key="3" :title="t('dmx.list.disposition')"> <div class="rt-container-main"> - <config - ref="configForm" - :kbtenantInfo="kbtenantInfo" - :kbobj="kbobj" - ></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> --> +<!-- <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> +<!-- <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> </div> </template> <script lang="ts" setup> - import { - computed, - ref, - reactive, - watch, - nextTick, - onBeforeMount, - onMounted, - } from 'vue'; +import { computed, ref, reactive, watch, nextTick, onBeforeMount, onMounted } from "vue"; import { useI18n } from 'vue-i18n'; import useLoading from '@/hooks/loading'; - import { - queryKbList, - PolicyRecord, - PolicyParams, - queryKbDocumentList, - deleteKnow, - queryKbdetail, - queryKbtenantInfo, - kbdocumentrm, - kbdocumentchangeparser, - kbdocumentrun, - kbdocumentchangeStatus, - downloadFile, - } from '@/api/kbList'; +import { + queryKbList, + PolicyRecord, + PolicyParams, + queryKbDocumentList, + deleteKnow, + queryKbdetail, + 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 type { TableColumnData } from '@arco-design/web-vue/es/table/interface'; import cloneDeep from 'lodash/cloneDeep'; import Sortable from 'sortablejs'; - import add from '@/views/dmx/knowledgeLib/add.vue'; - import edit from '@/views/dmx/knowledgeLib/edit.vue'; - import addKnow from '@/views/dmx/knowledgeLib/addKnow.vue'; - 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 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'; + import add from '@/views/dmx/knowledgeLib/add.vue' + import edit from '@/views/dmx/knowledgeLib/edit.vue' + import addKnow from '@/views/dmx/knowledgeLib/addKnow.vue' + 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 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 account = ref(null) const generateFormModel = () => { return { number: '', @@ -444,47 +348,46 @@ const showColumns = ref<Column[]>([]); 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 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', - img2txt_id: 'qwen-vl-max', - llm_id: 'qwen-plus', - name: 'wanghao鈥榮 Kingdom', - parser_ids: - 'naive:General,qa:Q&A,resume:Resume,manual:Manual,table:Table,paper:Paper,book:Book,laws:Laws,presentation:Presentation,picture:Picture,one:One', - rerank_id: 'BAAI/bge-reranker-v2-m3', - role: 'owner', - tenant_id: '948fc6fa41ab11ef8fb80242ac120004', - parser_idObj: {}, - }); - let tabs = ref([]); + "asr_id": "paraformer-realtime-8k-v1", + "embd_id": "BAAI/bge-large-zh-v1.5", + "img2txt_id": "qwen-vl-max", + "llm_id": "qwen-plus", + "name": "wanghao鈥榮 Kingdom", + "parser_ids": "naive:General,qa:Q&A,resume:Resume,manual:Manual,table:Table,paper:Paper,book:Book,laws:Laws,presentation:Presentation,picture:Picture,one:One", + "rerank_id": "BAAI/bge-reranker-v2-m3", + "role": "owner", + "tenant_id": "948fc6fa41ab11ef8fb80242ac120004", + parser_idObj:{} + }) + let tabs = ref([]) - const selectTab = (index, item) => { - selectedTab.value = index; + const selectTab = (index,item) => { + selectedTab.value= index; // console.log(item.id); - kbobj = item; + kbobj= item; kbId = kbobj.id; testForm.value.changekbid(kbId); configForm.value.changekbObj(kbobj); fetchData({ kb_id: kbobj.id, page: 1, - page_size: 20, - }); - }; + page_size: 20 + }) + } const basePagination: Pagination = { current: 1, @@ -525,7 +428,7 @@ title: t('dmx.column.UploadTime'), dataIndex: 'create_time', slotName: 'create_time', - width: 200, + width:200 }, { title: t('瑙f瀽鏂规硶'), @@ -587,9 +490,9 @@ const fetchData = async (params) => { setLoading(true); try { - const data = await queryKbDocumentList(params); + const data = await queryKbDocumentList(params); console.log(data, 'data'); - if (data.code == '0') { + if(data.code=='0'){ // 璇︽儏 // const kbtenantInfo = await queryKbtenantInfo(); parser_ids = kbtenantInfo.parser_ids.split(',').reduce((acc, pair) => { @@ -599,7 +502,7 @@ }, {}); // console.log(parser_ids, 'parser_ids'); kbtenantInfo.parser_idObj = parser_ids; - renderData.value = data.data.docs || []; + renderData.value = data.data.docs||[]; renderData.value = renderData.value.map((item) => { return { ...item, @@ -612,9 +515,10 @@ pagination.current = params.page; pagination.total = data.data.total; // 鏌ヨ鐭ヨ瘑搴撹鎯� - kbdetail = await queryKbdetail({ - kb_id: params.kb_id, + kbdetail = await queryKbdetail({ + kb_id:params.kb_id, }); + } } catch (err) { // you can report use errorHandler or other @@ -628,35 +532,37 @@ kb_id: kbobj.id, page: 1, page_size: 20, - keywords: keywords.value, - }); + keywords:keywords.value + }) }; - const handleClick = () => { + const handleClick = ()=>{ visible.value = true; - }; + } const onPageChange = (current: number) => { fetchData({ ...basePagination, current }); }; - const knowledgeData = async (params = { page: 1, page_size: 20 }) => { + const knowledgeData = async ( + params = { page: 1, page_size: 20 } + ) => { setLoading(true); try { const { data } = await queryKbList(params); console.log(data, 'data'); tabs.value = data; console.log(tabs.value, 'tabs'); - if (tabs.value.length > 0 && tabs.value[0]) { - kbobj = tabs.value[0]; + 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, - page_size: 20, - }); + page_size: 20 + }) } // renderData.value = data.list; // console.log(renderData, 'renderData'); @@ -671,13 +577,13 @@ const deleteKnowledge = async (id) => { let data = await deleteKnow({ - kb_id: id, - }); - if (data.code == 0) { + kb_id:id + }) + if(data.code == 0){ Message.success('鍒犻櫎鎴愬姛'); - knowledgeData(); + knowledgeData() } - }; + } const reset = () => { formModel.value = generateFormModel(); }; @@ -736,104 +642,106 @@ } }; - const fileClick = () => { - detailsShow.value = true; - }; + const fileClick = ()=>{ + detailsShow.value = true - const goBackClick = () => { - detailsShow.value = false; - }; + } + + const goBackClick = ()=>{ + detailsShow.value = false + + } function upTabdateItem(id, newName) { console.log(id, newName); - const itemToUpdate = renderData.value.find((item) => item.id === id); + const itemToUpdate = renderData.value.find(item => item.id === id); if (itemToUpdate) { itemToUpdate.name = newName; } } - const deleteItem = async (row) => { +const deleteItem = async (row)=>{ console.log(row); - let data = await kbdocumentrm({ doc_id: row.id }); - if (data.code == 0) { + let data = await kbdocumentrm({doc_id: row.id}) + if(data.code == 0){ Message.success('鍒犻櫎鎴愬姛'); console.log(kbobj, 'kbobj'); fetchData({ kb_id: kbobj.id, page: 1, - page_size: 20, - }); + page_size: 20 + }) } - }; - const onDownloadDocument = async (record) => { + } + 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 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); - let data = await kbdocumentchangeStatus({ - doc_id: row.id, - status: row.status, - }); - if (data.code == 0) { - Message.success('鎿嶄綔鎴愬姛'); - } - }; +} - const run = async (row) => { - console.log(row); - row.loading = true; - let run = '1'; - if (row.run != '2') { - run = '1'; - } else { - run = '2'; - } - let data = await kbdocumentrun({ - doc_ids: [row.id], - run: run, - }); - if (data.code == 0) { - Message.success('瑙f瀽鎴愬姛'); - row.run = '3'; - } else { - Message.error('瑙f瀽澶辫触'); - row.run = '1'; - } - row.loading = false; - }; +const handleChangeStatus = async (row)=>{ + console.log(row); + let data = await kbdocumentchangeStatus({ + doc_id: row.id, + status: row.status + }) + if(data.code == 0){ + Message.success('鎿嶄綔鎴愬姛'); + } +} - const changeFetchData = async (row) => { - fetchData({ - kb_id: kbobj.id, - page: 1, - page_size: 20, - }); - }; + +const run = async (row)=>{ + console.log(row); + row.loading = true; + let run = '1' + if(row.run!='2'){ + run = '1' + }else { + run = '2' + } + let data = await kbdocumentrun({ + doc_ids: [row.id], + run: run + }) + if(data.code == 0){ + Message.success('瑙f瀽鎴愬姛'); + row.run = '3'; + }else{ + Message.error('瑙f瀽澶辫触'); + row.run = '1'; + } + row.loading = false; +} + +const changeFetchData = async (row)=>{ + fetchData({ + kb_id: kbobj.id, + page: 1, + page_size: 20 + }) +} watch( () => columns.value, (val) => { @@ -847,44 +755,49 @@ { deep: true, immediate: true } ); - onBeforeMount(() => {}); - onMounted(() => { - knowledgeData(); - }); + onBeforeMount(()=>{ + + }) + onMounted(()=>{ + knowledgeData() + }) + </script> <script lang="ts"> export default { name: 'SearchTable', - methods: {}, + methods: { + + } }; </script> <style scoped lang="less"> .container { padding: 0 20px 20px 20px; - .main-container { + .main-container{ display: flex; width: 100%; height: 100%; - .lf-container { + .lf-container{ display: flex; flex-direction: column; align-items: center; justify-content: space-evenly; - background: var(--color-neutral-3); + background: #ffffff; width: 200px; - .lf-container-top { + .lf-container-top{ display: flex; margin: 10px 0; } - .lf-container-down { + .lf-container-down{ display: flex; flex-direction: column; box-sizing: border-box; width: 90%; //height: 56rem; - border: 1px solid var(--color-neutral-3); + border: 1px solid #eeeeee; //padding: 10px; margin-bottom: 10px; //.tabs{ @@ -896,8 +809,8 @@ cursor: pointer; box-sizing: border-box; margin: 10px 10px; - padding: 0 10px; - //color: var(--color-text-1); + padding:0 10px; + color: rgba(0, 0, 0, 0.88); font-size: 14px; height: 40px; line-height: 40px; @@ -909,40 +822,33 @@ } .tab:hover { border: 1px solid #ffffff; - color: #000000; 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); + 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); } .tab.active { border: 1px solid #e8e8ea; background: #e8e8ea; - color: #000000; cursor: pointer; - 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); } } } - .rt-container { + .rt-container{ position: relative; //background: #626aea; margin-left: 20px; width: calc(100% - 200px); height: 56rem; - .rt-container-main { + .rt-container-main{ height: 76vh; } - .details { + .details{ position: absolute; top: 0; left: 0; width: 100%; height: 100%; - //background: #ffffff; - .details-header { + background: #ffffff; + .details-header{ display: flex; justify-content: space-between; margin-top: 10px; diff --git a/src/views/dmx/knowledgeLib/test.vue b/src/views/dmx/knowledgeLib/test.vue index 4738315..ba702dc 100644 --- a/src/views/dmx/knowledgeLib/test.vue +++ b/src/views/dmx/knowledgeLib/test.vue @@ -1,215 +1,186 @@ + <template> - <div class="main-container"> - <div class="main-container-lf"> - <div class="main-container-lf-top">妫�绱㈡祴璇�</div> - <div class="main-container-lf-down"> - <div style="color: #999" - >鏈�鍚庝竴姝ワ紒 鎴愬姛鍚庯紝鍓╀笅鐨勫氨浜ょ粰Infiniflow AI鍚с��</div - > - <a-divider style="margin-top: 10px" /> - <a-form - ref="formRef" - :model="form" - :style="{ width: '100%' }" - layout="vertical" - @submit="handleSubmit" - > - <a-form-item field="similarity_threshold" label="鐩镐技搴﹂槇鍊�"> - <a-slider v-model="form.similarity_threshold" /> - </a-form-item> - <a-form-item - field="slider" - label="鍏抽敭瀛楃浉浼煎害鏉冮噸" - :rules="[ - { type: 'number', min: 5, message: 'slider is min than 5' }, - ]" - > - <a-slider v-model="form.vector_similarity_weight" /> - </a-form-item> - <a-form-item - field="section" - label="Rerank妯″瀷" - :rules="[{ match: /section one/, message: '璇烽�夋嫨' }]" - > - <a-space direction="vertical" size="large"> - <a-select - :size="'large'" - v-model="form.rerank_id" - :style="{ width: '100%' }" - placeholder="璇烽�夋嫨 ..." - allow-clear - > - <a-optgroup - :label="index" - v-for="(item, index) in modelList" - :key="index" - > - <a-option - v-for="obj in item" - :key="obj.fid" - :disabled="!obj.available" - :value="obj.llm_name" - > - {{ obj.llm_name }} - </a-option> - </a-optgroup> - </a-select> - </a-space> - </a-form-item> - <a-form-item - field="slider" - label="Top-K" - :rules="[ - { type: 'number', min: 5, message: 'slider is min than 5' }, - ]" - > - <a-slider v-model="form.top_k" :min="1" :max="2048" /> - </a-form-item> - <a-form-item> - <div class="main-container-form-item-extra"> - <div class="main-container-form-item-extra-top">娴嬭瘯鏂囨湰</div> - <div class="main-container-form-item-extra-down"> - <a-textarea - v-model="form.question" - style=" - height: 10rem; - border: 1px solid var(--color-fill-3); - border-radius: 4px; - " - placeholder="" - allow-clear - /> + <div class="main-container"> + <div class="main-container-lf"> + <div class="main-container-lf-top">妫�绱㈡祴璇�</div> + <div class="main-container-lf-down"> + <div style="color: #999;">鏈�鍚庝竴姝ワ紒 鎴愬姛鍚庯紝鍓╀笅鐨勫氨浜ょ粰Infiniflow AI鍚с��</div> + <a-divider style="margin-top: 10px" /> + <a-form ref="formRef" :model="form" :style="{width:'100%'}" layout="vertical" @submit="handleSubmit"> + <a-form-item field="similarity_threshold" label="鐩镐技搴﹂槇鍊�"> + <a-slider v-model="form.similarity_threshold" /> + </a-form-item> + <a-form-item field="slider" label="鍏抽敭瀛楃浉浼煎害鏉冮噸" :rules="[{type:'number', min:5,message:'slider is min than 5'}]"> + <a-slider v-model="form.vector_similarity_weight" /> + </a-form-item> + <a-form-item field="section" label="Rerank妯″瀷" :rules="[{match:/section one/,message:'璇烽�夋嫨'}]"> + <a-space direction="vertical" size="large"> + <a-select :size="'large'" v-model="form.rerank_id" :style="{width:'100%'}" placeholder="璇烽�夋嫨 ..." allow-clear> + <a-optgroup :label="index" v-for="(item,index) in modelList" :key=index> + <a-option + v-for="(obj) in item" + :key="obj.fid" + :disabled="!obj.available" + :value="obj.llm_name" + > + {{obj.llm_name}} + </a-option> + </a-optgroup> + </a-select> + </a-space> + </a-form-item> + <a-form-item field="slider" label="Top-K" :rules="[{type:'number', min:5,message:'slider is min than 5'}]"> + <a-slider v-model="form.top_k" :min="1" :max="2048" /> + </a-form-item> + <a-form-item > + <div class="main-container-form-item-extra"> + <div class="main-container-form-item-extra-top">娴嬭瘯鏂囨湰</div> + <div class="main-container-form-item-extra-down"> + <a-textarea v-model="form.question" style="height: 10rem;border: 1px solid var(--color-fill-3);border-radius: 4px" placeholder="" allow-clear/> + </div> + <div class="main-container-form-item-extra-btn"> + <a-button type="primary" html-type="submit">娴嬭瘯</a-button> + </div> </div> - <div class="main-container-form-item-extra-btn"> - <a-button type="primary" html-type="submit">娴嬭瘯</a-button> - </div> + </a-form-item> + </a-form> + </div> + </div> + <div class="main-container-rt"> + <a-collapse style="width: 96%;margin-top: 1rem;margin-left: 2%"> + <a-collapse-item header="0/0 閫夊畾鐨勬枃浠�" key="3"> + <template #extra> + <a-tag size="small">鍛戒腑鏁�</a-tag> + <a-tag size="small">鐪嬫硶</a-tag> + </template> + <div> + <a-empty /> </div> - </a-form-item> - </a-form> + </a-collapse-item> + </a-collapse> </div> </div> - <div class="main-container-rt"> - <a-collapse style="width: 96%; margin-top: 1rem; margin-left: 2%"> - <a-collapse-item header="0/0 閫夊畾鐨勬枃浠�" key="3"> - <template #extra> - <a-tag size="small">鍛戒腑鏁�</a-tag> - <a-tag size="small">鐪嬫硶</a-tag> - </template> - <div> - <a-empty /> - </div> - </a-collapse-item> - </a-collapse> - </div> - </div> </template> <script lang="ts" setup> - import { onMounted, onBeforeMount, reactive, ref, watch } from 'vue'; - import { Message } from '@arco-design/web-vue'; - import { kbretrievalTest, queryModelList } from '@/api/kbList'; - // const props = defineProps(['kbId']) +import { onMounted, onBeforeMount, reactive, ref, watch } from "vue"; +import { Message } from '@arco-design/web-vue'; +import { kbretrievalTest, queryModelList } from "@/api/kbList"; +// const props = defineProps(['kbId']) - // watch(() => props.kbId, (newValue, oldValue) => { - // console.log('kbId 鍙樺寲浜�', newValue, oldValue); - // },{ - // deep:true, - // }); +// watch(() => props.kbId, (newValue, oldValue) => { +// console.log('kbId 鍙樺寲浜�', newValue, oldValue); +// },{ +// deep:true, +// }); - let visible = ref(false); - let loading = ref(false); - const formRef = ref(null); - const kbid = ref(''); - const modelList = ref({}); - let form = reactive({ - page: 1, - question: '', - rerank_id: '', - similarity_threshold: 20, - size: 10, - top_k: 1024, - vector_similarity_weight: 30, + +let visible = ref(false); +let loading = ref(false); +const formRef = ref(null); +const kbid = ref(''); +const modelList = ref({}); +let form = reactive({ + page: 1, + question: '', + rerank_id: '', + similarity_threshold: 20, + size: 10, + top_k: 1024, + vector_similarity_weight: 30, +}); + + +const formatter = (value) => { + // return String(Math.round(value / 100)) +}; + +const handleSubmit = async ({values, errors}) => { + // console.log(props.kbobj, 'props.kbobj'); + if (!form.question){ + return + } + let formObj = { + ...form, + kb_id:kbid.value, + } + formObj.similarity_threshold = formObj.similarity_threshold/100; + formObj.vector_similarity_weight = formObj.vector_similarity_weight/100; + const data = await kbretrievalTest(formObj); +} + +const handleClick = () => { + visible.value = true; +}; +const handleCancel = () => { + visible.value = false; +} + +const handleOpened =(el) => { + Object.assign(form,{ + }); + formRef.value.resetFields(); +} - const formatter = (value) => { - // return String(Math.round(value / 100)) - }; +const changekbid = (value) => { + kbid.value = value; +} - const handleSubmit = async ({ values, errors }) => { - // console.log(props.kbobj, 'props.kbobj'); - if (!form.question) { - return; - } - let formObj = { - ...form, - kb_id: kbid.value, +const queryModel = async (params) => { + try { + const data = await queryModelList(params); + console.log(data.data, '澶фā鍨嬪垪琛�'); + modelList.value = { + BAAI: [data.data.BAAI[1]], + Jina: data.data.Jina, + youdao: data.data.youdao }; - formObj.similarity_threshold = formObj.similarity_threshold / 100; - formObj.vector_similarity_weight = formObj.vector_similarity_weight / 100; - const data = await kbretrievalTest(formObj); - }; + } catch (err) { + // you can report use errorHandler or other + } finally { - const handleClick = () => { - visible.value = true; - }; - const handleCancel = () => { - visible.value = false; - }; + } +}; - const handleOpened = (el) => { - Object.assign(form, {}); - formRef.value.resetFields(); - }; - const changekbid = (value) => { - kbid.value = value; - }; +defineExpose({ + changekbid +}) - const queryModel = async (params) => { - try { - const data = await queryModelList(params); - console.log(data.data, '澶фā鍨嬪垪琛�'); - modelList.value = { - BAAI: [data.data.BAAI[1]], - Jina: data.data.Jina, - youdao: data.data.youdao, - }; - } catch (err) { - // you can report use errorHandler or other - } finally { - } - }; +onBeforeMount(()=>{ + queryModel({}) +}) +onMounted(()=>{ - defineExpose({ - changekbid, - }); - onBeforeMount(() => { - queryModel({}); - }); - onMounted(() => {}); +}) + + </script> <script lang="ts"> - export default { - name: 'config', - methods: {}, - }; +export default { + name: 'config', + methods: { + + } +}; </script> <style scoped lang="less"> - .main-container { + .main-container{ display: flex; justify-content: space-between; height: 100%; //background: #626aea; - &-lf { + &-lf{ width: 30%; height: 100%; //border: 1px solid #cccccc; - //background: #ffffff; + background: #ffffff; border-radius: 10px; overflow: hidden; - &-top { + &-top{ width: 100%; height: 60px; line-height: 60px; @@ -217,44 +188,44 @@ color: #ffffff; text-align: center; } - &-down { + &-down{ padding: 20px; width: 100%; } } - &-form-item-extra { + &-form-item-extra{ width: 100%; height: 20rem; border: 1px solid var(--color-fill-3); border-radius: 6px; overflow: hidden; - &-top { + &-top{ width: 100%; height: 40px; line-height: 40px; - border-bottom: 1px solid var(--color-fill-3); + border-bottom: 1px solid var(--color-fill-3); //background: rgb(var(--primary-6)); color: #999999; text-align: center; } - &-down { + &-down{ width: 92%; margin-left: 4%; margin-top: 30px; } - &-btn { + &-btn{ width: 96%; text-align: right; margin-top: 1rem; } } - &-rt { + &-rt{ width: 69%; height: 100%; //background: #626aea; //border: 1px solid #cccccc; - //background: #ffffff; + background: #ffffff; border-radius: 10px; } } -</style> +</style> \ No newline at end of file diff --git a/src/views/dmx/knowledgeLib/tool.vue b/src/views/dmx/knowledgeLib/tool.vue index 1418515..a636442 100644 --- a/src/views/dmx/knowledgeLib/tool.vue +++ b/src/views/dmx/knowledgeLib/tool.vue @@ -1,3 +1,4 @@ + <template> <a-button type="text" @click="handleClick" size="small"> <template #icon> @@ -13,382 +14,232 @@ title-align="start" width="900px" > - <a-tabs default-active-key="1"> - <a-tab-pane key="1"> - <template #title> <icon-calendar /> 瑙f瀽鏂规硶 </template> - <div style="width: 100%"> - <div style="display: flex; align-items: center"> - <div> 瑙f瀽鏂规硶: </div> - <div style="margin-left: 10px"> - <a-select v-model="form.parser_id" placeholder="璇烽�夋嫨"> - <a-option - v-for="item in parser_ids" - :key="item.value" - :label="item.name" - :value="item.value" - ></a-option> - </a-select> - </div> - </div> - <div class="parser"> - <a-form - ref="formRef" - :rules="rules" - :model="form" - auto-label-width - @submit="handleSubmit" - > - <a-divider style="margin-top: 10px" /> - <a-form-item - field="slider" - label="鍧梩oken鏁�" - :rules="[ - { type: 'number', min: 1, message: 'slider is min than 1' }, - ]" - > - <a-slider - v-model="form.chunk_token_num" - :max="1000" - show-input - /> - </a-form-item> - <a-divider style="margin-top: 10px" /> - <a-form-item field="raptor" label="浣跨敤鍙洖澧炲己RAPTOR绛栫暐"> - <a-space direction="vertical" size="large"> - <a-switch - v-model="form.use_raptor" - @change="onChangeRAPTOR" - /> - </a-space> - </a-form-item> - <div v-if="form.use_raptor"> - <a-form-item field="prompt" label="鎻愮ず璇�"> - <a-textarea - v-model="form.prompt" - placeholder="璇峰~鍐欐彁绀鸿瘝" - /> - </a-form-item> - <a-form-item - field="slider" - label="鏈�澶oken鏁�" - :rules="[ - { type: 'number', min: 5, message: 'slider is min than 5' }, - ]" - > - <a-slider - v-model="form.max_token" - :min="1" - :max="1000" - show-input - /> - </a-form-item> - <a-form-item - field="slider" - label="闃堝��" - :rules="[ - { type: 'number', min: 5, message: 'slider is min than 5' }, - ]" - > - <a-slider v-model="form.threshold" show-tooltip show-input /> - </a-form-item> - <a-form-item - field="slider" - label="鏈�澶ц仛绫绘暟" - :rules="[ - { type: 'number', min: 5, message: 'slider is min than 5' }, - ]" - > - <a-slider v-model="form.max_cluster" :max="1000" show-input /> - </a-form-item> - <a-form-item - field="slider" - label="闅忔満绉嶅瓙" - v-model="form.random_seed" - :rules="[ - { type: 'number', min: 5, message: 'slider is min than 5' }, - ]" - > - <a-input-number - v-model="form.random_seed" - :style="{ - width: '300px', - marginRight: '1rem', - borderRadius: '4px', - }" - placeholder="璇疯緭鍏�" - class="input-demo" - :min="10" - :max="100" - /> - <a-button type="primary" @click="randomNumber"> - <icon-plus /> - </a-button> - </a-form-item> + <a-tabs default-active-key="1"> + <a-tab-pane key="1"> + <template #title> + <icon-calendar/> 瑙f瀽鏂规硶 + </template> + <div style="width: 100%"> + <div style="display: flex;align-items: center;"> + <div> + 瑙f瀽鏂规硶: </div> - <a-form-item> - <div style="width: 100%; text-align: right"> - <a-button @click="visible = false">鍙栨秷</a-button> - <a-button - style="margin-left: 10px" - type="primary" - html-type="submit" - >纭畾</a-button - > - </div> - </a-form-item> - </a-form> - </div> - </div> - </a-tab-pane> - <a-tab-pane key="2"> - <template #title> <icon-clock-circle /> 鍒涘缓瑙f瀽鍧� </template> - <div class="details"> - <div class="details-header"> - <div - style=" - display: flex; - align-items: center; - justify-content: flex-end; - " - > - <a-radio-group - v-model="radio" - type="button" - style="margin-right: 10px" - @change="onRadioChange" - > - <a-radio value="1">鍏ㄦ枃</a-radio> - <a-radio value="2">鐪佺暐</a-radio> - </a-radio-group> - <a-popover position="bottom"> - <a-button - type="outline" - class="button" - style="margin-right: 10px" - >鎵归噺<icon-down style="margin-left: 4px" - /></a-button> - <template #content> - <a-space direction="vertical"> - <a-checkbox - :model-value="checkedAll" - :indeterminate="indeterminate" - @change="handleChangeAll" - style="margin-left: 10px" - > - 閫夋嫨鎵�鏈� - </a-checkbox> + <div style="margin-left: 10px"> + <a-select v-model="form.parser_id" placeholder="璇烽�夋嫨" > + <a-option v-for="item in parser_ids" :key="item.value" :label="item.name" :value="item.value"></a-option> + </a-select> + </div> + </div> + <div class="parser"> + <a-form ref="formRef" :rules="rules" :model="form" auto-label-width @submit="handleSubmit" > + <a-divider style="margin-top: 10px" /> + <a-form-item field="slider" label="鍧梩oken鏁�" + :rules="[{type:'number', min:1,message:'slider is min than 1'}]"> + <a-slider v-model="form.chunk_token_num" :max="1000" show-input /> + </a-form-item> + <a-divider style="margin-top: 10px" /> + <a-form-item field="raptor" label="浣跨敤鍙洖澧炲己RAPTOR绛栫暐"> + <a-space direction="vertical" size="large"> + <a-switch v-model="form.use_raptor" @change="onChangeRAPTOR" /> </a-space> - <a-divider style="margin: 10px 0" /> - <p> - <a-button type="text" class="button" style="color: #2a2a2b"> - <template #icon> - <icon-check-circle /> - </template> - 鍚敤閫夊畾鐨� + </a-form-item> + <div v-if="form.use_raptor"> + <a-form-item field="prompt" label="鎻愮ず璇�"> + <a-textarea + v-model="form.prompt" + style="height: 10rem;border: 1px solid var(--color-fill-3);border-radius: 4px" placeholder="璇峰~鍐欐彁绀鸿瘝" /> + </a-form-item> + <a-form-item field="slider" label="鏈�澶oken鏁�" + :rules="[{type:'number', min:5,message:'slider is min than 5'}]"> + <a-slider v-model="form.max_token" :min="1" :max="1000" show-input/> + </a-form-item> + <a-form-item field="slider" label="闃堝��" :rules="[{type:'number', min:5,message:'slider is min than 5'}]"> + <a-slider v-model="form.threshold" show-tooltip show-input/> + </a-form-item> + <a-form-item field="slider" label="鏈�澶ц仛绫绘暟" + :rules="[{type:'number', min:5,message:'slider is min than 5'}]"> + <a-slider v-model="form.max_cluster" :max="1000" show-input/> + </a-form-item> + <a-form-item field="slider" label="闅忔満绉嶅瓙" v-model="form.random_seed" + :rules="[{type:'number', min:5,message:'slider is min than 5'}]"> + <a-input-number v-model="form.random_seed" :style="{width:'300px',marginRight:'1rem',borderRadius:'4px'}" + placeholder="璇疯緭鍏�" class="input-demo" :min="10" :max="100" /> + <a-button type="primary" @click="randomNumber"> + <icon-plus /> </a-button> - </p> - <p> - <a-button type="text" class="button" style="color: #2a2a2b"> - <template #icon> - <icon-close-circle /> - </template> - 绂佺敤閫夊畾鐨� - </a-button> - </p> - <a-divider style="margin: 10px 0" /> - <p> - <a-button type="text" class="button" style="color: #2a2a2b"> - <template #icon> - <icon-delete /> - </template> - 鍒犻櫎閫夊畾鐨� - </a-button> - </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> - <a-radio-group - v-model="available_int" - direction="vertical" - size="large" - @change="onChangeavailable" - > - <a-radio value="">鎵�鏈�</a-radio> - <a-radio value="1">鍚敤</a-radio> - <a-radio value="0">绂佺敤</a-radio> - </a-radio-group> - </template> - </a-popover> - <addDetails :item="item"></addDetails> + + </a-form-item> + + </div> + <a-form-item> + <div style="width: 100%;text-align: right"> + <a-button @click="visible = false">鍙栨秷</a-button> + <a-button style="margin-left: 10px" type="primary" html-type="submit">纭畾</a-button> + </div> + </a-form-item> + </a-form> </div> </div> - <a-divider style="margin-top: 10px" /> - <div class="groupMain"> - <a-checkbox-group v-model="data" @change="handleChange"> - <div - class="groupList" - :style="{ background: keyBg == '1' ? '#eff8ff' : 'white' }" - > - <a-checkbox value="1"></a-checkbox> - <div - class="groupList-content" - @click="groupListContentClick('1')" - @dblclick="contentClick(1)" - > - 鑰� stable version 鏄渶鏂扮ǔ瀹氱増锛岀粡杩囧厖鍒嗘祴璇曞拰楠岃瘉锛宐ug 杈冨皯锛� - 閫傚悎鐢ㄤ簬鐢熶骇鐜銆傚叾鐗堟湰鍙烽�氬父涓哄弻鏁帮紝濡� 1.26銆俵egacy versions - 鍒欐槸涔嬪墠鍙戝竷鐨勭ǔ瀹氱増锛屽浜庨渶瑕� - 鐗瑰畾鏃х増鏈殑鍏煎鎬ф垨瀹夊叏鎬ф敮鎸佺殑鐢ㄦ埛鏈夌敤锛屼絾涓�鑸笉 - 鎺ㄨ崘鐢ㄤ簬鏂伴」鐩紝闄ら潪鏈夌壒娈婇渶姹傘�傚湪瀹為檯浣跨敤涓紝濡傛灉杩芥眰鏈�鏂板姛鑳� - 涓旀効鎰忛潰瀵瑰彲鑳藉瓨鍦ㄧ殑涓�浜涗笉绋冲畾鍥犵礌锛屽彲浠ュ皾璇曚娇鐢ㄤ富绾跨増鏈繘琛屾祴璇曞拰鐮旂┒锛涘鏋滄槸鐢ㄤ簬鐢熶骇鐜 - </div> - <div class="groupList-right"> - <a-switch - v-model="switchType" - checked-value="1" - unchecked-value="0" - @change="handleChangeStatus()" - /> - </div> + </a-tab-pane> + <a-tab-pane key="2"> + <template #title> + <icon-clock-circle/> 鍒涘缓瑙f瀽鍧� + </template> + <div class="details"> + <div class="details-header"> + <div style="display: flex; align-items: center;justify-content: flex-end;"> + <a-radio-group v-model="radio" type="button" style="margin-right: 10px" @change="onRadioChange"> + <a-radio value="1">鍏ㄦ枃</a-radio> + <a-radio value="2">鐪佺暐</a-radio> + </a-radio-group> + <a-popover position="bottom"> + <a-button type="outline" class="button" style="margin-right: 10px;">鎵归噺<icon-down style="margin-left: 4px" /></a-button> + <template #content> + <a-space direction="vertical"> + <a-checkbox :model-value="checkedAll" :indeterminate="indeterminate" @change="handleChangeAll" style="margin-left: 10px"> + 閫夋嫨鎵�鏈� + </a-checkbox> + </a-space> + <a-divider style="margin: 10px 0" /> + <p> + <a-button type="text" class="button" style="color: #2a2a2b"> + <template #icon> + <icon-check-circle /> + </template> + 鍚敤閫夊畾鐨� + </a-button> + </p> + <p> + <a-button type="text" class="button" style="color: #2a2a2b"> + <template #icon> + <icon-close-circle /> + </template> + 绂佺敤閫夊畾鐨� + </a-button> + </p> + <a-divider style="margin: 10px 0" /> + <p> + <a-button type="text" class="button" style="color: #2a2a2b"> + <template #icon> + <icon-delete /> + </template> + 鍒犻櫎閫夊畾鐨� + </a-button> + </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> + <a-radio-group v-model="available_int" direction="vertical" size="large" @change="onChangeavailable"> + <a-radio value="">鎵�鏈�</a-radio> + <a-radio value="1">鍚敤</a-radio> + <a-radio value="0">绂佺敤</a-radio> + </a-radio-group> + </template> + </a-popover> + <addDetails :item="item"></addDetails> </div> - </a-checkbox-group> - </div> - <a-divider style="margin-top: 10px" /> - <div class="groupMain"> - <a-checkbox-group v-model="data" @change="handleChange"> - <div class="groupList"> - <a-checkbox value="1"></a-checkbox> - <div - class="groupList-content" - @click="groupListContentClick('1')" - @dblclick="contentClick(1)" - > - 鑰� stable version 鏄渶鏂扮ǔ瀹氱増锛岀粡杩囧厖鍒嗘祴璇曞拰楠岃瘉锛宐ug 杈冨皯锛� - 閫傚悎鐢ㄤ簬鐢熶骇鐜銆傚叾鐗堟湰鍙烽�氬父涓哄弻鏁帮紝濡� 1.26銆俵egacy versions - 鍒欐槸涔嬪墠鍙戝竷鐨勭ǔ瀹氱増锛屽浜庨渶瑕� - 鐗瑰畾鏃х増鏈殑鍏煎鎬ф垨瀹夊叏鎬ф敮鎸佺殑鐢ㄦ埛鏈夌敤锛屼絾涓�鑸笉 - 鎺ㄨ崘鐢ㄤ簬鏂伴」鐩紝闄ら潪鏈夌壒娈婇渶姹傘�傚湪瀹為檯浣跨敤涓紝濡傛灉杩芥眰鏈�鏂板姛鑳� - 涓旀効鎰忛潰瀵瑰彲鑳藉瓨鍦ㄧ殑涓�浜涗笉绋冲畾鍥犵礌锛屽彲浠ュ皾璇曚娇鐢ㄤ富绾跨増鏈繘琛屾祴璇曞拰鐮旂┒锛涘鏋滄槸鐢ㄤ簬鐢熶骇鐜 + </div> + <a-divider style="margin-top: 10px" /> + <div class="groupMain"> + <a-checkbox-group v-model="data" @change="handleChange" > + <div class="groupList" :style="{background:keyBg=='1'?'#eff8ff':'white'}"> + <a-checkbox value="1"></a-checkbox> + <div class="groupList-content" @click="groupListContentClick('1')" @dblclick="contentClick(1)"> + 鑰� stable version 鏄渶鏂扮ǔ瀹氱増锛岀粡杩囧厖鍒嗘祴璇曞拰楠岃瘉锛宐ug 杈冨皯锛� + 閫傚悎鐢ㄤ簬鐢熶骇鐜銆傚叾鐗堟湰鍙烽�氬父涓哄弻鏁帮紝濡� 1.26銆俵egacy versions + 鍒欐槸涔嬪墠鍙戝竷鐨勭ǔ瀹氱増锛屽浜庨渶瑕� + 鐗瑰畾鏃х増鏈殑鍏煎鎬ф垨瀹夊叏鎬ф敮鎸佺殑鐢ㄦ埛鏈夌敤锛屼絾涓�鑸笉 + 鎺ㄨ崘鐢ㄤ簬鏂伴」鐩紝闄ら潪鏈夌壒娈婇渶姹傘�傚湪瀹為檯浣跨敤涓紝濡傛灉杩芥眰鏈�鏂板姛鑳� + 涓旀効鎰忛潰瀵瑰彲鑳藉瓨鍦ㄧ殑涓�浜涗笉绋冲畾鍥犵礌锛屽彲浠ュ皾璇曚娇鐢ㄤ富绾跨増鏈繘琛屾祴璇曞拰鐮旂┒锛涘鏋滄槸鐢ㄤ簬鐢熶骇鐜 + </div> + <div class="groupList-right"> + <a-switch v-model="switchType" checked-value="1" unchecked-value="0" @change="handleChangeStatus()"/> + </div> </div> - <div class="groupList-right"> - <a-switch - v-model="switchType" - checked-value="1" - unchecked-value="0" - @change="handleChangeStatus()" - /> - </div> - </div> - <div class="groupList"> - <a-checkbox value="1"></a-checkbox> - <div - class="groupList-content" - @click="groupListContentClick('2')" - @dblclick="contentClick(1)" - > - 鑰� stable version 鏄渶鏂扮ǔ瀹氱増锛岀粡杩囧厖鍒嗘祴璇曞拰楠岃瘉锛宐ug 杈冨皯锛� - 閫傚悎鐢ㄤ簬鐢熶骇鐜銆傚叾鐗堟湰鍙烽�氬父涓哄弻鏁帮紝濡� 1.26銆俵egacy versions - 鍒欐槸涔嬪墠鍙戝竷鐨勭ǔ瀹氱増锛屽浜庨渶瑕� + <div class="groupList" :style="{background:keyBg=='2'?'#eff8ff':'white'}"> + <a-checkbox value="1"></a-checkbox> + <div class="groupList-content" @click="groupListContentClick('2')" @dblclick="contentClick(1)"> + 鑰� stable version 鏄渶鏂扮ǔ瀹氱増锛岀粡杩囧厖鍒嗘祴璇曞拰楠岃瘉锛宐ug 杈冨皯锛� + 閫傚悎鐢ㄤ簬鐢熶骇鐜銆傚叾鐗堟湰鍙烽�氬父涓哄弻鏁帮紝濡� 1.26銆俵egacy versions + 鍒欐槸涔嬪墠鍙戝竷鐨勭ǔ瀹氱増锛屽浜庨渶瑕� + </div> + <div class="groupList-right"> + <a-switch v-model="switchType" checked-value="1" unchecked-value="0" @change="handleChangeStatus()"/> + </div> </div> - <div class="groupList-right"> - <a-switch - v-model="switchType" - checked-value="1" - unchecked-value="0" - @change="handleChangeStatus()" - /> - </div> - </div> - <div class="groupList-right"> - <a-switch - v-model="switchType" - checked-value="1" - unchecked-value="0" - @change="handleChangeStatus()" - /> - </div> - </a-checkbox-group> + + </a-checkbox-group> + </div> </div> - </div> - <eidtDetails ref="eidtDil"></eidtDetails> - </a-tab-pane> - </a-tabs> + <eidtDetails ref="eidtDil"></eidtDetails> + </a-tab-pane> + </a-tabs> </a-modal> </template> <script lang="ts" setup> - import { onMounted, onBeforeMount, reactive, ref, computed } from 'vue'; - import { Message } from '@arco-design/web-vue'; - import { kbdocumentchangeparser } from '@/api/kbList'; - import addDetails from '@/views/dmx/knowledgeLib/addDetails.vue'; - import eidtDetails from '@/views/dmx/knowledgeLib/eidtDetails.vue'; - const visible = ref(false); - const loading = ref(false); - const radio = ref('1'); - const keyBg = ref(''); - const eidtDil = ref(); +import { onMounted, onBeforeMount, reactive, ref, computed } from "vue"; +import { Message } from "@arco-design/web-vue"; +import {kbdocumentchangeparser} from "@/api/kbList"; +import addDetails from '@/views/dmx/knowledgeLib/addDetails.vue' +import eidtDetails from '@/views/dmx/knowledgeLib/eidtDetails.vue' +const visible = ref(false); +const loading = ref(false); +const radio = ref('1'); +const keyBg = ref(''); +const eidtDil = ref(); - const props = defineProps(['kbtenantInfo', 'item', 'kbdetail']); - // const emit = defineEmits(['upTabdateItem']) +const props = defineProps(['kbtenantInfo','item','kbdetail']) +// const emit = defineEmits(['upTabdateItem']) - let threshold = computed(() => { - return form.threshold / 100; - }); +let threshold = computed(()=>{ + return form.threshold/100; +}) - const kbtenantInfo = props.kbtenantInfo; +const kbtenantInfo = props.kbtenantInfo; - let parser_ids = kbtenantInfo.parser_ids.split(',').map((item) => { - const [value1, value2] = item.split(':'); - return { - name: value2, - value: value1, - }; - }); - - const form = reactive({ - parser_id: props.item.parser_id, - doc_id: props.item.id, - max_token: 698, - threshold: 30, - max_cluster: 233, - random_seed: 1500, - chunk_token_num: 128, - use_raptor: false, - pages: {}, - prompt: - '璇锋�荤粨浠ヤ笅娈佃惤銆� 灏忓績鏁板瓧锛屼笉瑕佺紪閫犮�� 娈佃惤濡備笅锛歕n' + - ' {cluster_content}\n' + - '浠ヤ笂灏辨槸浣犻渶瑕佹�荤粨鐨勫唴瀹广��', - }); - const formRef = ref(null); - const rules = { - prompt: [ - { - required: true, - message: '鎻愮ず璇嶄笉鍏佽涓虹┖', - }, - ], +let parser_ids = kbtenantInfo.parser_ids.split(',').map((item) => { + const [value1, value2] = item.split(':'); + return { + name: value2, + value: value1, }; - const formatter = (value) => { - return value / 100; - }; +}); + +const form = reactive({ + parser_id: props.item.parser_id, + doc_id: props.item.id, + max_token: 698, + threshold: 30, + max_cluster: 233, + random_seed: 1500, + chunk_token_num: 128, + use_raptor: false, + pages: {}, + prompt: '璇锋�荤粨浠ヤ笅娈佃惤銆� 灏忓績鏁板瓧锛屼笉瑕佺紪閫犮�� 娈佃惤濡備笅锛歕n' + + ' {cluster_content}\n' + + '浠ヤ笂灏辨槸浣犻渶瑕佹�荤粨鐨勫唴瀹广��', +}); +const formRef = ref(null); +const rules = { + prompt: [ + { + required: true, + message:'鎻愮ず璇嶄笉鍏佽涓虹┖', + }, + ], +} +const formatter = (value) => { + return value / 100 +}; function randomNumber() { // 鐢熸垚涓�涓粙浜巑in鍜宮ax涔嬮棿鐨勯殢鏈烘暣鏁帮紙鍖呭惈min鍜宮ax锛� const min = 1; // 鏈�灏忓�� @@ -396,180 +247,169 @@ form.random_seed = Math.floor(Math.random() * (max - min + 1)) + min; } - const handleSubmit = async ({ values, errors }) => { - if (!errors) { - let data = await kbdocumentchangeparser({ - parser_id: form.parser_id, - doc_id: form.doc_id, - parser_config: { - raptor: { - use_raptor: form.use_raptor, - prompt: form.prompt, - max_token: form.max_token, - threshold: form.threshold, - max_cluster: form.max_cluster, - random_seed: form.random_seed, - }, - chunk_token_num: form.chunk_token_num, - pages: [], +const handleSubmit = async ({values, errors}) => { + if(!errors){ + let data = await kbdocumentchangeparser({ + parser_id: form.parser_id, + doc_id: form.doc_id, + parser_config: { + raptor: { + use_raptor: form.use_raptor, + prompt: form.prompt, + max_token: form.max_token, + threshold: form.threshold, + max_cluster: form.max_cluster, + random_seed: form.random_seed, }, - }); - if (data.code == 0) { - Message.success('閰嶇疆鎴愬姛'); - } else { - Message.error('閰嶇疆澶辫触'); + chunk_token_num: form.chunk_token_num, + pages: [ + + ] } - visible.value = false; + }) + if(data.code == 0){ + Message.success('閰嶇疆鎴愬姛'); + }else{ + Message.error('閰嶇疆澶辫触'); } - }; - - const handleClick = () => { - visible.value = true; - }; - const handleCancel = () => { visible.value = false; - }; + } +} - const contentClick = (done) => { - eidtDil.value.handleClick(); - }; - const handleOpened = (el) => { - // console.log('props',props.kbtenantInfo); - // console.log('props',props.item); - // console.log('props',props.kbdetail); - console.log(parser_ids, 'parser_ids'); - // Object.assign(form,{ - // name: '',// 鐢ㄦ埛鍚� - // nameJoin: '',// 鏄电О - // post: '',// 宀椾綅 - // txt: '',// 澶囨敞 - // }); - // formRef.value.resetFields(); - console.log(props.item.id); - }; +const handleClick = () => { + visible.value = true; +}; +const handleCancel = () => { + visible.value = false; +} - const onChangeRAPTOR = () => {}; +const contentClick = (done) => { + eidtDil.value.handleClick(); +} +const handleOpened =(el) => { + // console.log('props',props.kbtenantInfo); + // console.log('props',props.item); + // console.log('props',props.kbdetail); + console.log(parser_ids, 'parser_ids'); + // Object.assign(form,{ + // name: '',// 鐢ㄦ埛鍚� + // nameJoin: '',// 鏄电О + // post: '',// 宀椾綅 + // txt: '',// 澶囨敞 + // }); + // formRef.value.resetFields(); + console.log(props.item.id); +} - const indeterminate = ref(false); - const checkedAll = ref(false); - const data = ref([]); - const switchType = ref(false); - const available_int = ref(''); - const onRadioChange = () => { - console.log(radio.value); - }; - const handleChangeAll = (value) => { + +const onChangeRAPTOR = () => { + +}; + + + + + + + + +const indeterminate = ref(false) +const checkedAll = ref(false) +const data = ref([]) +const switchType = ref(false) +const available_int = ref('') +const onRadioChange = () => { + console.log(radio.value); + + + +}; +const handleChangeAll = (value) => { + indeterminate.value = false; + if (value) { + checkedAll.value = true; + data.value = ['1', '2', '3'] + } else { + checkedAll.value = false; + data.value = [] + } +} + +const handleChange = (values) => { + if (values.length === 3) { + checkedAll.value = true indeterminate.value = false; - if (value) { - checkedAll.value = true; - data.value = ['1', '2', '3']; - } else { - checkedAll.value = false; - data.value = []; - } - }; + } else if (values.length === 0) { + checkedAll.value = false + indeterminate.value = false; + } else { + checkedAll.value = false + indeterminate.value = true; + } +} - const handleChange = (values) => { - if (values.length === 3) { - checkedAll.value = true; - indeterminate.value = false; - } else if (values.length === 0) { - checkedAll.value = false; - indeterminate.value = false; - } else { - checkedAll.value = false; - indeterminate.value = true; - } - }; - const groupListContentClick = (value) => { - keyBg.value = value; - }; +const groupListContentClick = (value) => { + keyBg.value = value; +} - const onChangeavailable = () => { - console.log(available_int.value); - }; - const handleChangeStatus = () => { - console.log(switchType.value); - }; +const onChangeavailable = ()=>{ + console.log(available_int.value); +} - onBeforeMount(() => {}); - onMounted(() => {}); +const handleChangeStatus = ()=>{ + console.log(switchType.value); +} + +onBeforeMount(()=>{ + +}) +onMounted(()=>{ + + +}) </script> <style scoped lang="less"> - .parser{ - width: 100%; - ::v-deep .arco-btn-outline:hover, .arco-btn-outline, .arco-btn-outline[type='button']{ - color: #2a2a2b; - border: 1px solid #2a2a2b; - } - .button{ - //color: #2a2a2b!important; - } +.parser{ + width: 100%; + ::v-deep .arco-btn-outline:hover, .arco-btn-outline, .arco-btn-outline[type='button']{ + color: #2a2a2b; + border: 1px solid #2a2a2b; } - .groupMain { - width: 100%; - height: 500px; - overflow: auto; + .button{ + //color: #2a2a2b!important; + } +} +.groupMain{ + width: 100%; + height: 500px; + overflow: auto; + display: flex; + justify-content: center; + .groupList{ display: flex; - justify-content: center; - - .groupList { - display: flex; - padding: 24px; - border-radius: 8px; - //background: #eff8ff; - border: 1px solid var(--color-neutral-3); - margin-bottom: 20px; + padding: 24px; + border-radius: 8px; + //background: #eff8ff; + border: 1px solid #f0f0f0; + margin-bottom: 20px; + overflow: auto; + .groupList-content{ + width: 700px; + //height: 100px; overflow: auto; - - .groupList-content { - width: 700px; - //height: 100px; - overflow: auto; - box-sizing: border-box; - margin: 0; - padding: 0; - color: var(--color-text-1); - font-size: 14px; - font-family: Inter; - position: relative; + box-sizing: border-box; + margin: 0; + padding: 0; + color: rgba(0, 0, 0, 0.88); + font-size: 14px; + font-family: Inter; + position: relative; - } - } - - .groupMain { - width: 100%; - height: 500px; - overflow: auto; - display: flex; - justify-content: center; - - .groupList { - display: flex; - padding: 24px; - border-radius: 8px; - //background: #eff8ff; - border: 1px solid #f0f0f0; - margin-bottom: 20px; - overflow: auto; - - .groupList-content { - width: 700px; - //height: 100px; - overflow: auto; - box-sizing: border-box; - margin: 0; - padding: 0; - color: rgba(0, 0, 0, 0.88); - font-size: 14px; - font-family: Inter; - position: relative; - } - } } } -</style> +} +</style> \ No newline at end of file -- Gitblit v1.8.0