From a4ca216c5b215f323b3c439b2f445dad72bbfce1 Mon Sep 17 00:00:00 2001 From: zhangxiao <898441624@qq.com> Date: 星期一, 26 八月 2024 16:44:31 +0800 Subject: [PATCH] fix: 修改bug --- src/views/dmx/knowledgeLib/index.vue | 1227 +++++++++++++++++++++++++++++++++++++++------------------ 1 files changed, 839 insertions(+), 388 deletions(-) diff --git a/src/views/dmx/knowledgeLib/index.vue b/src/views/dmx/knowledgeLib/index.vue index a4b50a3..fcbd198 100644 --- a/src/views/dmx/knowledgeLib/index.vue +++ b/src/views/dmx/knowledgeLib/index.vue @@ -6,37 +6,56 @@ <div class="lf-container-top"> <a-input-search :placeholder="$t('cardList.searchInput.placeholder')" - style="width: 130px;" + style="width: 130px" /> - <addKnow @getknowledge="getknowledge" @getKbdetail="getKbdetail"></addKnow> + <addKnow + @getknowledge="getknowledge" + @getKbdetail="getKbdetail" + ></addKnow> </div> - <div class="lf-container-down"> - <a-scrollbar style="height:56rem;overflow: auto;"> + <a-spin :loading="listloading" class="lf-container-down"> + <a-scrollbar style="height: calc(100vh - 300px); 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: '10px' }" + /> <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> + <!-- <a-popconfirm content="纭畾鍒犻櫎鍚�?" @ok="deleteKnowledge(tab.id)" type="warning">--> + <!-- <span style="cursor: pointer;color: #4977ba;font-size: 12px"><icon-delete style="font-size: 14px"/>鍒犻櫎</span>--> + <!-- </a-popconfirm>--> + <span + style="cursor: pointer; color: #4977ba; font-size: 12px" + @click="deleteKnowledge(tab.id)" + ><icon-delete style="font-size: 14px" />鍒犻櫎</span + > </template> </a-popover> </div> </a-scrollbar> - </div> + </a-spin> </div> <div class="rt-container" v-if="tabs.length > 0"> - <a-tabs :activeKey="activeKey" @change="handleTabChange"> - <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-tabs :active-key="activeKey" @change="handleTabChange"> + <a-tab-pane key="1" :title="t('dmx.list.DataSet')"> + <a-scrollbar + class="rt-container-main" + :style="{ height: documentHeight + 70 + 'px' }" + style="overflow: auto" + > + <a-card + ref="account" + class="general-card" + title="" + style="padding-top: 20px" + > <a-row> <a-col :flex="1" :span="12"> <a-form @@ -46,16 +65,106 @@ label-align="left" > <a-row :gutter="16"> - <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" - v-model="keywords" - @change="search" - /> - <!--鏂板缓--> + <a-col + :span="24" + style=" + margin-bottom: 10px; + display: flex; + justify-content: space-between; + " + > + <a-popover + position="bottom" + v-model="checkedArr.length" + trigger="click" + > + <a-button :disabled="checkedArr.length == 0" border + >鎵归噺 + <icon-down style="margin-left: 4px" /> + </a-button> + <template #content> + <p> + <a-button + type="text" + class="button" + style="color: #2a2a2b" + @click="enableDisable(1)" + > + <template #icon> + <icon-play-circle /> + </template> + 鍚敤 + </a-button> + </p> + <p> + <a-button + type="text" + class="button" + style="color: #2a2a2b" + @click="enableDisable(0)" + > + <template #icon> + <icon-record color="" /> + </template> + 绂佺敤 + </a-button> + </p> + <p> + <a-button + type="text" + class="button" + style="color: #2a2a2b" + @click="addBlock(1)" + > + <template #icon> + <icon-check-circle /> + </template> + 鍚姩 + </a-button> + </p> + <p> + <a-button + type="text" + class="button" + style="color: #2a2a2b" + @click="addBlock(2)" + > + <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" + @click="addBlock(3)" + > + <template #icon> + <icon-delete /> + </template> + 鍒犻櫎 + </a-button> + </p> + </template> + </a-popover> <span> - <add :kbobj="kbobj" @changeFetchData="changeFetchData"/> + <a-input-search + :placeholder=" + $t('cardList.searchInput.placeholder') + " + style="width: 200px; margin-right: 10px" + v-model="keywords" + @change="search" + /> + <!--鏂板缓--> + <add + :kbobj="kbobj" + @changeFetchData="changeFetchData" + /> </span> </a-col> </a-row> @@ -83,7 +192,11 @@ </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>--> @@ -92,13 +205,15 @@ <!-- {{ $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 @@ -156,189 +271,403 @@ :bordered="false" :size="size" @page-change="onPageChange" - :scroll="{ y: 580 }" + :max-height="documentHeight" + :scroll="{ x: 1000 }" + :row-selection="{ + type: 'checkbox', + showCheckedAll: true, + onlyCurrent: false, + }" + @select-all="selectTabAll" + @selection-change="selectTabChange" > <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" + :disabled="!getAut('/kb/data_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 == '4'"> - <a-tag :loading="record.loading" :color="'blue'" border>{{$t('dmx.list.complete')}}</a-tag> + <a-popover title="" v-if="record.run == '4'"> + <a-tag :loading="record.loading" :color="'red'" border + >澶辫触</a-tag + > <template #content> - <p></p> + <p>娴佺▼寮�濮嬩簬锛歿{ record.process_begin_at }}</p> + <p + >杩囩▼鎸佺画鏃堕棿:{{ + record.process_duation.toFixed(2) + }}</p + > + <div> + <p + >杩涘害娑堟伅锛�<span + v-html=" + record.progress_msg.replace(/\n/g, '<br/>') + " + ></span + ></p> + </div> </template> </a-popover> - <a-popover title="Title" v-if="record.run == '3'"> - <a-tag :loading="record.loading" :color="'blue'" border>{{$t('dmx.list.complete')}}</a-tag> + <a-popover title="" v-if="record.run == '3'"> + <a-tag + :loading="record.loading" + :color="'blue'" + border + >{{ $t('dmx.list.complete') }}</a-tag + > <template #content> - <p></p> + <p>娴佺▼寮�濮嬩簬锛歿{ record.process_begin_at }}</p> + <p + >杩囩▼鎸佺画鏃堕棿:{{ + record.process_duation.toFixed(2) + }}</p + > + <div> + <p + >杩涘害娑堟伅锛�<span + v-html=" + record.progress_msg.replace(/\n/g, '<br/>') + " + ></span + ></p> + </div> </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-popover title="" v-if="record.run == '1'"> + <a-tag + :loading="record.loading" + :color="'blue'" + border + >瑙f瀽涓�...</a-tag + > <template #content> - <p></p> + <p>娴佺▼寮�濮嬩簬锛歿{ record.process_begin_at }}</p> + <p + >杩囩▼鎸佺画鏃堕棿:{{ + record.process_duation.toFixed(2) + }}</p + > + <div> + <p + >杩涘害娑堟伅锛�<span + v-html=" + record.progress_msg.replace(/\n/g, '<br/>') + " + ></span + ></p> + </div> </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-popover title="" v-if="record.run == '2'"> + <a-tag + :loading="record.loading" + :color="'gold'" + border + >{{ $t('dmx.list.cancel') }}</a-tag + > <template #content> - <p></p> + <p>娴佺▼寮�濮嬩簬锛歿{ record.process_begin_at }}</p> + <p + >杩囩▼鎸佺画鏃堕棿:{{ + record.process_duation.toFixed(2) + }}</p + > + <div> + <p + >杩涘害娑堟伅锛�<span + v-html=" + record.progress_msg.replace(/\n/g, '<br/>') + " + ></span + ></p> + </div> </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-popover title="" v-if="record.run == '0'"> + <a-tag + :loading="record.loading" + :color="'green'" + border + >{{ $t('dmx.list.NotStarted') }} + </a-tag> <template #content> - <p></p> + <p>娴佺▼寮�濮嬩簬锛歿{ record.process_begin_at }}</p> + <p + >杩囩▼鎸佺画鏃堕棿锛歿{ + record.process_duation.toFixed(2) + }}</p + > + <div> + <p + >杩涘害娑堟伅锛�<span + v-html=" + record.progress_msg.replace(/\n/g, '<br/>') + " + ></span + ></p> + </div> </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)" + v-hasPermi="'/kb/data_analysis'" + :loading="record.loading" + > <template #icon> - <icon-sync v-if="record.run == '4'"/> - <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 == '4'" /> + <icon-sync v-if="record.run == '3'" /> + <icon-sync + style="color: green" + v-if="record.run == '2'" + /> + <a-button + status="warning" + shape="circle" + v-if="record.run == '1'" + size="small" + > + <icon-close /> + </a-button> + <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 }"> + <a-tooltip content="瑙f瀽鏂规硶"> + <a-button + type="text" + :disabled="record.run == '1'" + @click="handleClick(record)" + v-hasPermi="'/kb/data_update'" + size="small" + > <template #icon> - <icon-delete /> + <icon-tool /> </template> </a-button> + </a-tooltip> + <edit + :item="record" + v-hasPermi="'/kb/rename'" + @upTabdateItem="upTabdateItem" + /> + <a-popconfirm + :content="'纭畾鍒犻櫎鍚�'" + type="warning" + @ok="deleteItem(record)" + > + <a-tooltip content="鍒犻櫎"> + <a-button + type="text" + size="small" + :disabled="record.run == '1'" + v-hasPermi="'/kb/data_delete'" + > + <template #icon> + <icon-delete /> + </template> + </a-button> + </a-tooltip> </a-popconfirm> - <a-button type="text" size="small" @click="onDownloadDocument(record)"> - <template #icon> - <icon-download /> - </template> - </a-button> + <a-tooltip content="涓嬭浇"> + <a-button + type="text" + size="small" + v-hasPermi="'/kb/data_download'" + :disabled="record.run == '1'" + @click="onDownloadDocument(record)" + > + <template #icon> + <icon-download /> + </template> + </a-button> + </a-tooltip> - <a-button type="text" size="small" @click="seeload(record)"> + <!-- <a-button + type="text" + size="small" + :disabled="record.run == '1'" + @click="previewArea(record)" + > <template #icon> <icon-eye /> </template> - </a-button> - + </a-button> --> </template> </a-table> </a-card> - </div> + </a-scrollbar> </a-tab-pane> - <a-tab-pane key="2" :title="t('dmx.list.test')"> - <div class="rt-container-main"> + <a-tab-pane + key="2" + :title="t('dmx.list.test')" + v-if="getAut('/kb/test')" + > + <a-scrollbar + class="rt-container-main" + :style="{ height: documentHeight + 70 + 'px' }" + style="overflow: auto" + > <test ref="testForm"></test> - </div> + </a-scrollbar> </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" @cancleConfig="cancleConfig" @saveConfig="saveConfig"></config> - </div> + <a-tab-pane + key="3" + :title="t('dmx.list.disposition')" + v-if="getAut('/kb/update')" + > + <a-scrollbar + class="rt-container-main" + :style="{ height: documentHeight + 70 + 'px' }" + style="overflow: auto" + > + <config + ref="configForm" + :kbtenantInfo="kbtenantInfo" + @cancleConfig="cancleConfig" + @saveConfig="saveConfig" + ></config> + </a-scrollbar> </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> + <!-- <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> + <tool + ref="toolForm" + :kbtenantInfo="kbtenantInfo" + :item="setObj" + :kbdetail="kbdetail" + /> </div> </template> <script lang="ts" setup> -import { computed, ref, reactive, watch, nextTick, onBeforeMount, onMounted } from "vue"; + import { + computed, + ref, + reactive, + watch, + nextTick, + onBeforeMount, + onMounted, + onBeforeUnmount, + } 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, + chunkSwitch, + changeStatus, + } 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, Modal } from '@arco-design/web-vue'; + import { documentHeight, parseTime } from '@/utils'; + import { deleteLlm } from '@/api/model'; + import { userModelState } from '@/store'; + import { getUserResources } from '@/utils/auth'; + + let modelStore = userModelState(); + const httpUrl = modelStore.hrefUrl; type SizeProps = 'mini' | 'small' | 'medium' | 'large'; type Column = TableColumnData & { checked?: true }; - const account = ref(null) + const account = ref(null); const generateFormModel = () => { return { number: '', @@ -355,52 +684,66 @@ const formModel = ref(generateFormModel()); const cloneColumns = ref([]); const showColumns = ref<Column[]>([]); + let setObj = reactive({}); const size = ref<SizeProps>('medium'); - let visible = ref(false) - let keywords = ref('') - let activeKey = ref('1') - 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 listloading = ref(false); + let keywords = ref(''); + let activeKey = ref('1'); + let detailsShow = ref(false); + let checkedAll = ref(false); + let checkedArr = ref([]); + 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 toolForm = ref(null); 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: 'wanghaos 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([]); + let timer = null; // 瀹氭椂鍣� - const selectTab = (index,item) => { - selectedTab.value= index; + const selectTab = (index, item) => { + selectedTab.value = index; + checkedArr.value = []; // console.log(item.id); - kbobj= item; + kbobj = item; kbId = kbobj.id; + basePagination.page = 1; fetchData({ kb_id: kbobj.id, - page: 1, - page_size: 20 - }) - getKbdetail(kbobj.id) - } + ...basePagination, + }); + getKbdetail(kbobj.id); + }; + + const getAut = (val) => { + const roleData = JSON.parse(getUserResources()); + const roleBtn = roleData.map((item: any) => item.component); + return roleBtn.includes(val); + }; const basePagination: Pagination = { - current: 1, - pageSize: 20, + page: 1, + page_size: 10, }; const pagination = reactive({ ...basePagination, @@ -428,31 +771,36 @@ title: t('dmx.column.name'), dataIndex: 'name', slotName: 'name', + width: 300, }, { title: t('鍒嗗揩鏁�'), dataIndex: 'chunk_num', + width: 90, }, { title: t('dmx.column.UploadTime'), dataIndex: 'create_time', slotName: 'create_time', - width:200 + width: 200, }, { title: t('瑙f瀽鏂规硶'), dataIndex: 'parser_id', slotName: 'parser_id', + width: 150, }, { title: t('鍚敤'), dataIndex: 'status', slotName: 'status', + width: 100, }, { title: t('瑙f瀽鐘舵��'), dataIndex: 'run', slotName: 'run', + width: 100, }, { title: t('dmx.column.Operate'), @@ -499,8 +847,8 @@ const fetchData = async (params) => { setLoading(true); try { - const data = await queryKbDocumentList(params); - if(data.code=='0'){ + const data = await queryKbDocumentList(params); + if (data.code == '0') { parser_ids = kbtenantInfo.parser_ids.split(',').reduce((acc, pair) => { const [key, value] = pair.split(':'); acc[key] = value; @@ -508,7 +856,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, @@ -518,9 +866,38 @@ }); // console.log(renderData.value, 'renderData'); + pagination.page = params.page; pagination.current = params.page; pagination.total = data.data.total; + if (timer) { + clearInterval(timer); + } + // 瀹氭椂鍣ㄦ煡璇㈡枃妗� + timer = setInterval(async () => { + let params = { ...basePagination, kb_id: kbobj.id }; + const data = await queryKbDocumentList(params); + if (data.code == '0') { + parser_ids = kbtenantInfo.parser_ids + .split(',') + .reduce((acc, pair) => { + const [key, value] = pair.split(':'); + acc[key] = value; + return acc; + }, {}); + // console.log(parser_ids, 'parser_ids'); + kbtenantInfo.parser_idObj = parser_ids; + renderData.value = data.data.docs || []; + renderData.value = renderData.value.map((item) => { + return { + ...item, + loading: false, + parser_id: parser_ids[item.parser_id], + }; + }); + // console.log(renderData.value, 'renderData'); + } + }, 10000); } } catch (err) { // you can report use errorHandler or other @@ -530,43 +907,51 @@ }; const search = () => { + basePagination.page = 1; fetchData({ kb_id: kbobj.id, - page: 1, - page_size: 20, - keywords:keywords.value - }) + ...basePagination, + keywords: keywords.value, + }); }; - const handleClick = ()=>{ - visible.value = true; - } + const handleClick = (data) => { + Object.assign(setObj, data); + toolForm.value.handleClick(data); + }; const onPageChange = (current: number) => { - fetchData({ ...basePagination, current }); + basePagination.page = current; + fetchData({ ...basePagination, kb_id: kbobj.id }); }; - const knowledgeData = async ( - params = { page: 1, page_size: 20 } - ) => { - setLoading(true); + const selectTabAll = (val) => { + console.log(val, '鍏ㄩ��'); + checkedAll.value = val; + }; + const selectTabChange = (val) => { + console.log(val, '鍗曢��'); + checkedArr.value = val; + }; + + const knowledgeData = async (params = { page: 1, page_size: 10 }) => { + listloading.value = 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; activeKey.value = '1'; + basePagination.page = 1; fetchData({ kb_id: kbobj.id, - page: 1, - page_size: 20 - }) - getKbdetail(kbobj.id) - }else{ - + ...basePagination, + }); + getKbdetail(kbobj.id); + } else { } // renderData.value = data.list; // console.log(renderData, 'renderData'); @@ -575,66 +960,70 @@ } catch (err) { // you can report use errorHandler or other } finally { - setLoading(false); + listloading.value = false; } }; - const getKbdetail = async (kb_id) => { // 鏌ヨ鐭ヨ瘑搴撹鎯� const data = await queryKbdetail({ - kb_id:kb_id, + kb_id: kb_id, }); kbdetail = data.data; testForm.value.changekbid(kbdetail.id); configForm.value.changekbObj(kbdetail); }; + const getknowledge = async (id) => { + setLoading(true); + try { + const { data } = await queryKbList({ page: 1, page_size: 10 }); - - -const getknowledge = async (id) => { - setLoading(true); - try { - const { data } = await queryKbList({ page: 1, page_size: 20 }); - console.log(data, '鏌ヨ鐭ヨ瘑搴撳垪琛�'); - tabs.value = data; - if(tabs.value.length>0){ - // 瀹氫綅鍒版柊澧炵殑鐭ヨ瘑搴撳崟鍏� - selectedTab.value = tabs.value.findIndex(item=>item.id==id); - getKbdetail(id) // 鑾峰彇璇︽儏 - activeKey.value = '3'; + console.log(data, '鏌ヨ鐭ヨ瘑搴撳垪琛�'); + tabs.value = data; + if (tabs.value.length > 0) { + // 瀹氫綅鍒版柊澧炵殑鐭ヨ瘑搴撳崟鍏� + selectedTab.value = tabs.value.findIndex((item) => item.id == id); + getKbdetail(id); // 鑾峰彇璇︽儏 + kbobj.id = id; + activeKey.value = '3'; + } + } catch (err) { + // you can report use errorHandler or other + } finally { + setLoading(false); } + }; - - - - - - } catch (err) { - // you can report use errorHandler or other - } finally { - setLoading(false); - } -}; - - const deleteKnowledge = async (id) => { - let data = await deleteKnow({ - kb_id:id - }) - if(data.code == 0){ - Message.success('鍒犻櫎鎴愬姛'); - knowledgeData() - } - } + const deleteKnowledge = (id) => { + Modal.confirm({ + title: '鎻愮ず淇℃伅', + content: '纭鍒犻櫎鍚�', + okText: '纭畾', + cancelText: '鍙栨秷', + hideTitle: true, + onOk: async () => { + let data = await deleteKnow({ + kb_id: id, + }); + if (data.code == 0) { + Message.success('鍒犻櫎鎴愬姛'); + knowledgeData(); + } + }, + onCancel: () => {}, + }); + }; const reset = () => { formModel.value = generateFormModel(); }; - function handleTabChange(key: string) { + + function handleTabChange(key) { // 澶勭悊鏍囩鏀瑰彉浜嬩欢 console.log('Changed to tab:', key); - activeKey.value=key; + activeKey.value = key; } + const handleSelectDensity = ( val: string | number | Record<string, any> | undefined, e: Event @@ -645,39 +1034,85 @@ const cancleConfig = () => { activeKey.value = '1'; let id = tabs.value[selectedTab.value].id; - fetchData({ - kb_id: id, - page: 1, - page_size: 20 - }) - } + // basePagination.page = 1; + // fetchData({ + // kb_id: id, + // ...basePagination, + // }); + }; const saveConfig = async () => { activeKey.value = '1'; let id = tabs.value[selectedTab.value].id; - const { data } = await queryKbList({ page: 1, page_size: 20 }); + const { data } = await queryKbList({ page: 1, page_size: 10 }); tabs.value = data; fetchData({ kb_id: id, - page: 1, - page_size: 20 - }) - getKbdetail(id) // 鑾峰彇璇︽儏 - } + ...basePagination, + }); + getKbdetail(id); // 鑾峰彇璇︽儏 + }; + const enableDisable = async (type) => { + Promise.all( + checkedArr.value.map(async (item) => { + await changeStatus({ + doc_id: item, + status: type, + }); + }) + ).then(() => { + Message.success('鏇存柊鎴愬姛'); + getKbList(); + }); + }; - const handleChange = ( - checked: boolean | (string | boolean | number)[], - column: Column, - index: number - ) => { - if (!checked) { - cloneColumns.value = showColumns.value.filter( - (item) => item.dataIndex !== column.dataIndex - ); + //鎵归噺鍚敤鍒犻櫎绂佺敤 + const addBlock = async (type) => { + if (type != 3) { + //鍚姩鍜屽彇娑� + let data = await kbdocumentrun({ + doc_ids: checkedArr.value, + run: type, + }); + if (data.code == 0) { + checkedArr.value.forEach(async (item) => { + tabs.value.forEach(async (items) => { + if (items.id == item) { + items.loading = true; + } + }); + }); + getKbList(); + } else { + // Message.error('瑙f瀽澶辫触'); + // row.run = '1'; + } } else { - cloneColumns.value.splice(index, 0, column); + //鎵归噺鍒犻櫎 + Modal.confirm({ + title: '鎻愮ず淇℃伅', + content: '纭鍒犻櫎鍚�', + okText: '纭畾', + cancelText: '鍙栨秷', + hideTitle: true, + onOk: async () => { + let data = await kbdocumentrm({ doc_id: checkedArr.value }); + if (data.code == 0) { + Message.success('鍒犻櫎鎴愬姛'); + getKbList(); + } + }, + onCancel: () => {}, + }); } + }; + + const getKbList = async () => { + await fetchData({ + kb_id: tabs.value[selectedTab.value].id, + ...basePagination, + }); }; const exchangeArray = <T extends Array<any>>( @@ -713,112 +1148,113 @@ } }; - 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 - }) + ...basePagination, + }); } - } - const onDownloadDocument = async (record)=>{ + }; + const onDownloadDocument = async (record) => { console.log(record); - downloadFile({ + await 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 previewArea = 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 + }`; + // previewSrc.value = `${ httpUrl }/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 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) => { + row.loading = true; + let run; + if (row.run == '0') { + run = '1'; + } else if (row.run == '1') { + run = '2'; + } else if (row.run == '2') { + run = '1'; + } else { + run = '1'; + } + let data = await kbdocumentrun({ + doc_ids: [row.id], + run: run, + }); + if (data.code == 0) { + // 瀹氭椂鍣ㄦ煡璇㈠綋鍓嶅垪琛� + fetchData({ + kb_id: tabs.value[selectedTab.value].id, + ...basePagination, + }); + } else { + // Message.error('瑙f瀽澶辫触'); + // row.run = '1'; + } -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'; - } - fetchData({ - kb_id: tabs.value[selectedTab.value].id, - page: 1, - page_size: 20 - }) + row.loading = false; + }; - row.loading = false; -} - -const changeFetchData = async (row)=>{ - fetchData({ - kb_id: kbobj.id, - page: 1, - page_size: 20 - }) -} + const changeFetchData = async (row) => { + basePagination.page = 1; + fetchData({ + kb_id: kbobj.id, + ...basePagination, + }); + }; watch( () => columns.value, (val) => { @@ -832,53 +1268,49 @@ { deep: true, immediate: true } ); - onBeforeMount(async()=>{ + onBeforeMount(async () => { // const {data} = await queryKbtenantInfo(); // Object.assign(kbtenantInfo,data); // console.log(kbtenantInfo,'kbtenantInfo鐨勬暟鎹�'); - - }) - onMounted(()=>{ - knowledgeData() - }) - -</script> - -<script lang="ts"> - export default { - name: 'SearchTable', - methods: { - - } - }; + }); + onMounted(() => { + knowledgeData(); + }); + onBeforeUnmount(() => { + clearInterval(timer); + }); </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: #ffffff; + //justify-content: space-evenly; + border-radius: 8px; background: var(--color-bg-2); 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; + height: calc(100% - 80px); border: 1px solid var(--color-fill-3); + border-radius: 8px; //padding: 10px; margin-bottom: 10px; //.tabs{ @@ -890,46 +1322,60 @@ cursor: pointer; box-sizing: border-box; margin: 10px 10px; - padding:0 10px; - color: rgba(0, 0, 0, 0.88); + padding: 0 10px; + padding-right: 20%; font-size: 14px; height: 40px; line-height: 40px; list-style: none; position: relative; - background: #ffffff; - border: 1px solid #f0f0f0; + color: var(--color-text-1); + border: 1px solid var(--color-neutral-3); + background: var(--color-bg-2); border-radius: 8px; + overflow: hidden; /* 纭繚瓒呭嚭瀹瑰櫒鐨勬枃鏈闅愯棌 */ + white-space: nowrap; /* 闃叉鏂囨湰鎹㈣ */ + text-overflow: ellipsis; /* 瓒呭嚭閮ㄥ垎鏄剧ず鐪佺暐鍙� */ } + .tab:hover { - border: 1px solid #ffffff; + color: #2a2a2b; + border: 1px solid var(--color-neutral-3); 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; + color: #2a2a2b; + border: 1px solid var(--color-neutral-1); background: #e8e8ea; cursor: pointer; } } } - .rt-container{ + + .rt-container { position: relative; //background: #626aea; margin-left: 20px; width: calc(100% - 200px); - height: 56rem; - .rt-container-main{ - height: 76vh; + overflow: hidden; + + .rt-container-main { + overflow: auto; } - .details{ + + .details { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: #ffffff; - .details-header{ + + .details-header { display: flex; justify-content: space-between; margin-top: 10px; @@ -939,6 +1385,7 @@ } } } + :deep(.arco-table-th) { &:last-child { .arco-table-th-item-title { @@ -946,18 +1393,22 @@ } } } + .action-icon { margin-left: 12px; cursor: pointer; } + .active { color: #0960bd; background-color: #e3f4fc; } + .setting { display: flex; align-items: center; width: 200px; + .title { margin-left: 12px; cursor: pointer; -- Gitblit v1.8.0