From 3d9996841bfb96e143062b46bfedeb906f50df58 Mon Sep 17 00:00:00 2001 From: liudong <liudong> Date: 星期三, 07 八月 2024 18:25:34 +0800 Subject: [PATCH] 配置bug页面修改 --- src/views/dmx/knowledgeLib/index.vue | 758 +++++++++++++++++++++++++++++++++++++++++++--------------- 1 files changed, 561 insertions(+), 197 deletions(-) diff --git a/src/views/dmx/knowledgeLib/index.vue b/src/views/dmx/knowledgeLib/index.vue index aa5d815..a4b50a3 100644 --- a/src/views/dmx/knowledgeLib/index.vue +++ b/src/views/dmx/knowledgeLib/index.vue @@ -1,28 +1,42 @@ <template> <div class="container"> - <Breadcrumb :items="['澶фā鍨�', '鐭ヨ瘑搴撶鐞�']" /> + <Breadcrumb :items="['dmx.list.index', 'dmx.list.kbm']" /> <div class="main-container"> <div class="lf-container"> <div class="lf-container-top"> <a-input-search :placeholder="$t('cardList.searchInput.placeholder')" - style="width: 110px;" + style="width: 130px;" /> - <a-button type="primary" @click="add" style="margin-left: 10px"> - <template #icon> - <icon-plus /> - </template> - </a-button> + <addKnow @getknowledge="getknowledge" @getKbdetail="getKbdetail"></addKnow> </div> <div class="lf-container-down"> - - </div> + <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 }" + > + {{ tab.name }} + <a-popover position="bl"> + <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> + </template> + </a-popover> + </div> + </a-scrollbar> + </div> </div> - <div class="rt-container"> - <a-tabs default-active-key="1"> - <a-tab-pane key="1" title="鏁版嵁闆�"> + <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="$t('')" style="padding-top: 20px"> + <a-card ref="account" class="general-card" title="" style="padding-top: 20px"> <a-row> <a-col :flex="1" :span="12"> <a-form @@ -36,83 +50,17 @@ <a-input-search :placeholder="$t('cardList.searchInput.placeholder')" style="width: 200px;margin-right: 10px" + v-model="keywords" + @change="search" /> - <!-- 鏂板缓--> - <add edit="add" /> + <!--鏂板缓--> + <span> + <add :kbobj="kbobj" @changeFetchData="changeFetchData"/> + </span> </a-col> - <!-- <a-col :span="8">--> - <!-- <a-form-item field="name" :label="$t('searchTable.form.name')">--> - <!-- <a-input--> - <!-- v-model="formModel.name"--> - <!-- :placeholder="$t('searchTable.form.name.placeholder')"--> - <!-- />--> - <!-- </a-form-item>--> - <!-- </a-col>--> - <!-- <a-col :span="8">--> - <!-- <a-form-item--> - <!-- field="contentType"--> - <!-- :label="$t('searchTable.form.contentType')"--> - <!-- >--> - <!-- <a-select--> - <!-- v-model="formModel.contentType"--> - <!-- :options="contentTypeOptions"--> - <!-- :placeholder="$t('searchTable.form.selectDefault')"--> - <!-- />--> - <!-- </a-form-item>--> - <!-- </a-col>--> - <!-- <a-col :span="8">--> - <!-- <a-form-item--> - <!-- field="filterType"--> - <!-- :label="$t('searchTable.form.filterType')"--> - <!-- >--> - <!-- <a-select--> - <!-- v-model="formModel.filterType"--> - <!-- :options="filterTypeOptions"--> - <!-- :placeholder="$t('searchTable.form.selectDefault')"--> - <!-- />--> - <!-- </a-form-item>--> - <!-- </a-col>--> - <!-- <a-col :span="8">--> - <!-- <a-form-item--> - <!-- field="createdTime"--> - <!-- :label="$t('searchTable.form.createdTime')"--> - <!-- >--> - <!-- <a-range-picker--> - <!-- v-model="formModel.createdTime"--> - <!-- style="width: 100%"--> - <!-- />--> - <!-- </a-form-item>--> - <!-- </a-col>--> - <!-- <a-col :span="8">--> - <!-- <a-form-item--> - <!-- field="status"--> - <!-- :label="$t('searchTable.form.status')"--> - <!-- >--> - <!-- <a-select--> - <!-- v-model="formModel.status"--> - <!-- :options="statusOptions"--> - <!-- :placeholder="$t('searchTable.form.selectDefault')"--> - <!-- />--> - <!-- </a-form-item>--> - <!-- </a-col>--> </a-row> </a-form> </a-col> - <!-- <a-divider style="height: 40px" direction="vertical" />--> - <!-- <a-col :flex="'200px'" style="text-align: right">--> - <!-- <a-button @click="reset" style="margin-right: 20px">--> - <!-- <template #icon>--> - <!-- <icon-refresh />--> - <!-- </template>--> - <!-- {{ $t('searchTable.form.reset') }}--> - <!-- </a-button>--> - <!-- <a-button type="primary" @click="search">--> - <!-- <template #icon>--> - <!-- <icon-search />--> - <!-- </template>--> - <!-- {{ $t('searchTable.form.search') }}--> - <!-- </a-button>--> - <!-- </a-col>--> </a-row> <a-divider style="margin-top: 0" /> <a-row style="margin-bottom: 16px"> @@ -144,7 +92,7 @@ <!-- {{ $t('searchTable.operation.download') }}--> <!-- </a-button>--> <a-tooltip :content="$t('searchTable.actions.refresh')"> - <div class="action-icon" @click="search" + <div class="action-icon" ><icon-refresh size="18" /></div> </a-tooltip> @@ -210,85 +158,184 @@ @page-change="onPageChange" :scroll="{ y: 580 }" > - <template #contentType="{ record }"> - <a-space> - <a-avatar - v-if="record.contentType === 'img'" - :size="16" - shape="square" - > - <img - alt="avatar" - src="//p3-armor.byteimg.com/tos-cn-i-49unhts6dw/581b17753093199839f2e327e726b157.svg~tplv-49unhts6dw-image.image" - /> - </a-avatar> - <a-avatar - v-else-if="record.contentType === 'horizontalVideo'" - :size="16" - shape="square" - > - <img - alt="avatar" - src="//p3-armor.byteimg.com/tos-cn-i-49unhts6dw/77721e365eb2ab786c889682cbc721c1.svg~tplv-49unhts6dw-image.image" - /> - </a-avatar> - <a-avatar v-else :size="16" shape="square"> - <img - alt="avatar" - src="//p3-armor.byteimg.com/tos-cn-i-49unhts6dw/ea8b09190046da0ea7e070d83c5d1731.svg~tplv-49unhts6dw-image.image" - /> - </a-avatar> - {{ $t(`searchTable.form.contentType.${record.contentType}`) }} - </a-space> + <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}} </template> - <template #filterType="{ record }"> - {{ $t(`searchTable.form.filterType.${record.filterType}`) }} + <template #create_time="{ record }"> + <span>{{parseTime(record.create_time)}}</span> </template> +<!-- <template #parser_id="{ record }">--> +<!-- <span>{{ parser_ids[record.parser_id]}}</span>--> +<!-- </template>--> <template #status="{ record }"> - <span v-if="record.status === 'offline'" class="circle"></span> - <span v-else class="circle pass"></span> - {{ $t(`searchTable.form.status.${record.status}`) }} + <a-switch v-model="record.status" size="small" checked-value="1" unchecked-value="0" @change="handleChangeStatus(record)"/> </template> - <template #operations="{ record }"> - <add edit="edit" :record = 'record' /> - <a-popconfirm content="纭畾鍒犻櫎鍚楋紵" type="warning" @ok="deleteItem(record)"> - <a-button v-permission="['admin']" type="text" size="small"> - {{ $t('鍒犻櫎') }} + <template #run="{ record }"> + <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> + <template #content> + <p></p> + </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> + <template #content> + <p></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> + <template #content> + <p></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> + <template #content> + <p></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> + <template #content> + <p></p> + </template> + </a-popover> + </div> + <div > + <a-button type="text" size="large" @click="run(record)" :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'"/> + </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 #icon> + <icon-delete /> + </template> </a-button> </a-popconfirm> + <a-button type="text" size="small" @click="onDownloadDocument(record)"> + <template #icon> + <icon-download /> + </template> + </a-button> + + <a-button type="text" size="small" @click="seeload(record)"> + <template #icon> + <icon-eye /> + </template> + </a-button> + </template> </a-table> </a-card> </div> </a-tab-pane> - <a-tab-pane key="2" title="娴嬭瘯"> + <a-tab-pane key="2" :title="t('dmx.list.test')"> <div class="rt-container-main"> - + <test ref="testForm"></test> </div> </a-tab-pane> - <a-tab-pane key="3" title="閰嶇疆"> + <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> </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> + <a-modal title=" " v-model:visible="visible" :footer="false" fullscreen> +<!-- <docx v-if="documenttype=='docx'" previewSrc="http://192.168.20.116:1080/v1/document/get/405c3efa4d8c11ef97560242ac120006"></docx>--> + <docx v-if="documenttype=='docx'" :previewSrc="previewSrc"></docx> + <excel v-if="documenttype=='excel'" :previewSrc="previewSrc"></excel> + <txtPdf v-if="documenttype=='txtPdf'" :previewSrc="previewSrc"></txtPdf> + </a-modal> </div> </template> <script lang="ts" setup> - import { computed, ref, reactive, watch, nextTick } from 'vue'; +import { computed, ref, reactive, watch, nextTick, onBeforeMount, onMounted } from "vue"; import { useI18n } from 'vue-i18n'; import useLoading from '@/hooks/loading'; - import { queryPolicyList, PolicyRecord, PolicyParams } from '@/api/list'; +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/user/account/add.vue' - import { deleteAccount } from "@/api/account"; + 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) @@ -304,14 +351,52 @@ }; const { loading, setLoading } = useLoading(true); const { t } = useI18n(); - const renderData = ref<PolicyRecord[]>([]); + const renderData = ref([]); const formModel = ref(generateFormModel()); - const cloneColumns = ref<Column[]>([]); + const cloneColumns = ref([]); const showColumns = ref<Column[]>([]); - const edit = ref('add'); 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 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([]) + + const selectTab = (index,item) => { + selectedTab.value= index; + // console.log(item.id); + kbobj= item; + kbId = kbobj.id; + fetchData({ + kb_id: kbobj.id, + page: 1, + page_size: 20 + }) + getKbdetail(kbobj.id) + } const basePagination: Pagination = { current: 1, @@ -339,50 +424,42 @@ }, ]); const columns = computed<TableColumnData[]>(() => [ - // { - // title: t('搴忓彿'), - // dataIndex: 'index', - // slotName: 'index', - // }, - // { - // title: t('searchTable.columns.number'), - // dataIndex: 'number', - // }, { - title: t('鐢ㄦ埛鍚�'), + title: t('dmx.column.name'), dataIndex: 'name', - }, - // { - // title: t('searchTable.columns.contentType'), - // dataIndex: 'contentType', - // slotName: 'contentType', - // }, - // { - // title: t('searchTable.columns.filterType'), - // dataIndex: 'filterType', - // }, - // { - // title: t('searchTable.columns.count'), - // dataIndex: 'count', - // }, - { - title: t('鍒涘缓鏃堕棿'), - dataIndex: 'createdTime', + slotName: 'name', }, { - title: t('鎵�灞為儴闂�'), - dataIndex: 'filterType', - slotName: 'filterType', + title: t('鍒嗗揩鏁�'), + dataIndex: 'chunk_num', }, { - title: t('澶囨敞'), + title: t('dmx.column.UploadTime'), + dataIndex: 'create_time', + slotName: 'create_time', + width:200 + }, + { + title: t('瑙f瀽鏂规硶'), + dataIndex: 'parser_id', + slotName: 'parser_id', + }, + { + title: t('鍚敤'), dataIndex: 'status', slotName: 'status', }, { - title: t('searchTable.columns.operations'), - dataIndex: 'operations', - slotName: 'operations', + title: t('瑙f瀽鐘舵��'), + dataIndex: 'run', + slotName: 'run', + }, + { + title: t('dmx.column.Operate'), + dataIndex: 'action', + slotName: 'action', + width: 200, + minWidth: 200, }, ]); const contentTypeOptions = computed<SelectOptionData[]>(() => [ @@ -419,16 +496,32 @@ value: 'offline', }, ]); - const fetchData = async ( - params: PolicyParams = { current: 1, pageSize: 20 } - ) => { + const fetchData = async (params) => { setLoading(true); try { - const { data } = await queryPolicyList(params); - renderData.value = data.list; - console.log(renderData); - pagination.current = params.current; - pagination.total = data.total; + 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'); + + pagination.current = params.page; + pagination.total = data.data.total; + + } } catch (err) { // you can report use errorHandler or other } finally { @@ -438,9 +531,11 @@ const search = () => { fetchData({ - ...basePagination, - ...formModel.value, - } as unknown as PolicyParams); + kb_id: kbobj.id, + page: 1, + page_size: 20, + keywords:keywords.value + }) }; const handleClick = ()=>{ @@ -451,17 +546,125 @@ fetchData({ ...basePagination, current }); }; - fetchData(); + 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] + kbId = kbobj.id; + activeKey.value = '1'; + fetchData({ + kb_id: kbobj.id, + page: 1, + page_size: 20 + }) + getKbdetail(kbobj.id) + }else{ + + } + // renderData.value = data.list; + // console.log(renderData, 'renderData'); + // pagination.current = params.current; + // pagination.total = data.total; + } catch (err) { + // you can report use errorHandler or other + } finally { + setLoading(false); + } + }; + + + const getKbdetail = async (kb_id) => { + // 鏌ヨ鐭ヨ瘑搴撹鎯� + const data = await queryKbdetail({ + 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: 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'; + } + + + + + + + } 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 reset = () => { formModel.value = generateFormModel(); }; - + function handleTabChange(key: string) { + // 澶勭悊鏍囩鏀瑰彉浜嬩欢 + console.log('Changed to tab:', key); + activeKey.value=key; + } const handleSelectDensity = ( val: string | number | Record<string, any> | undefined, e: Event ) => { size.value = val as SizeProps; }; + + const cancleConfig = () => { + activeKey.value = '1'; + let id = tabs.value[selectedTab.value].id; + fetchData({ + kb_id: id, + page: 1, + page_size: 20 + }) + } + + const saveConfig = async () => { + activeKey.value = '1'; + let id = tabs.value[selectedTab.value].id; + const { data } = await queryKbList({ page: 1, page_size: 20 }); + tabs.value = data; + fetchData({ + kb_id: id, + page: 1, + page_size: 20 + }) + getKbdetail(id) // 鑾峰彇璇︽儏 + } + const handleChange = ( checked: boolean | (string | boolean | number)[], @@ -510,16 +713,112 @@ } }; - const deleteItem = async (row)=>{ - console.log(row); - // let data = await deleteAccount({id: row.number}) - account.value.$messageSuccess('鍒犻櫎鎴愬姛') - // - // if(data.code == 200){ - // this.$messageSuccess('鍒犻櫎鎴愬姛') - // } + const fileClick = ()=>{ + detailsShow.value = true + } + const goBackClick = ()=>{ + detailsShow.value = false + + } + function upTabdateItem(id, newName) { + console.log(id, newName); + const itemToUpdate = renderData.value.find(item => item.id === id); + if (itemToUpdate) { + itemToUpdate.name = newName; + } + } + +const deleteItem = async (row)=>{ + console.log(row); + 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 + }) + } + } + const onDownloadDocument = async (record)=>{ + console.log(record); + downloadFile({ + url: `/api/v1/document/get/${record.id}`, + filename: record.name, + }); + } +const seeload = async (row)=>{ + Object.assign(seeObj, row) + // console.log(seeObj.name, 'seeObj'); + let type = row.name.split('.')[1]; + console.log(type); + if(type=='pdf'){ + documenttype.value = 'txtPdf' + }else if(type=='docx'){ + documenttype.value = 'docx' + }else if(type=='xlsx'){ + documenttype.value = 'excel' + }else if(type=='txt'){ + documenttype.value = 'txtPdf' + }else { + return false + } + previewSrc.value = `${import.meta.env.VITE_API_BASE_URL}/v1/document/get/${row.id}` + visible.value = true; + +} + +const handleChangeStatus = async (row)=>{ + console.log(row); + 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'; + } + fetchData({ + kb_id: tabs.value[selectedTab.value].id, + page: 1, + page_size: 20 + }) + + row.loading = false; +} + +const changeFetchData = async (row)=>{ + fetchData({ + kb_id: kbobj.id, + page: 1, + page_size: 20 + }) +} watch( () => columns.value, (val) => { @@ -532,6 +831,17 @@ }, { deep: true, immediate: true } ); + + onBeforeMount(async()=>{ + // const {data} = await queryKbtenantInfo(); + // Object.assign(kbtenantInfo,data); + // console.log(kbtenantInfo,'kbtenantInfo鐨勬暟鎹�'); + + }) + onMounted(()=>{ + knowledgeData() + }) + </script> <script lang="ts"> @@ -548,30 +858,84 @@ padding: 0 20px 20px 20px; .main-container{ display: flex; + width: 100%; + height: 100%; .lf-container{ display: flex; flex-direction: column; align-items: center; justify-content: space-evenly; - background: #ffffff; + //background: #ffffff; + background: var(--color-bg-2); width: 200px; .lf-container-top{ display: flex; + margin: 10px 0; } .lf-container-down{ - width: 80%; - height: calc(100% - 5rem); - border: 1px solid #cccccc; + display: flex; + flex-direction: column; + box-sizing: border-box; + width: 90%; + //height: 56rem; + border: 1px solid var(--color-fill-3); + //padding: 10px; + margin-bottom: 10px; + //.tabs{ + // width: 100%; + // height: 100%; + // overflow: auto; + //} + .tab { + cursor: pointer; + box-sizing: border-box; + margin: 10px 10px; + padding:0 10px; + color: rgba(0, 0, 0, 0.88); + font-size: 14px; + height: 40px; + line-height: 40px; + list-style: none; + position: relative; + background: #ffffff; + border: 1px solid #f0f0f0; + border-radius: 8px; + } + .tab:hover { + border: 1px solid #ffffff; + background: #e8e8ea; + box-shadow: 0 1px 2px -2px rgba(0, 0, 0, 0.16), 0 3px 6px 0 rgba(0, 0, 0, 0.12), 0 5px 12px 4px rgba(0, 0, 0, 0.09); + } + .tab.active { + border: 1px solid #e8e8ea; + background: #e8e8ea; + cursor: pointer; + } } } .rt-container{ + position: relative; //background: #626aea; margin-left: 20px; width: calc(100% - 200px); - height: calc(100% - 5rem); + height: 56rem; .rt-container-main{ height: 76vh; } + .details{ + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: #ffffff; + .details-header{ + display: flex; + justify-content: space-between; + margin-top: 10px; + padding-right: 20px; + } + } } } } -- Gitblit v1.8.0