From 1606cbed5beef1dd04a3235d4bc3fd30ea45eb1e Mon Sep 17 00:00:00 2001
From: liudong <liudong>
Date: 星期五, 09 八月 2024 11:13:29 +0800
Subject: [PATCH] 智能体页面bug修改

---
 src/views/dmx/knowledgeLib/index.vue |  747 +++++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 568 insertions(+), 179 deletions(-)

diff --git a/src/views/dmx/knowledgeLib/index.vue b/src/views/dmx/knowledgeLib/index.vue
index 7680fec..07254b0 100644
--- a/src/views/dmx/knowledgeLib/index.vue
+++ b/src/views/dmx/knowledgeLib/index.vue
@@ -1,28 +1,43 @@
 <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-spin :loading="listloading" class="lf-container-down">
+          <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: #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>
+          </a-spin>
       </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 :active-key="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 +51,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 +93,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,87 +159,185 @@
                   @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 ></test>
+              <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 ></config>
+              <config ref="configForm" :kbtenantInfo="kbtenantInfo" @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/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 { deleteAccount } from "@/api/account";
+  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 { parseTime } from "@/utils";
+import { deleteLlm } from "@/api/model";
   type SizeProps = 'mini' | 'small' | 'medium' | 'large';
   type Column = TableColumnData & { checked?: true };
   const account = ref(null)
@@ -306,14 +353,53 @@
   };
   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 listloading = 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,
@@ -341,36 +427,42 @@
     },
   ]);
   const columns = computed<TableColumnData[]>(() => [
-    // {
-    //   title: t('搴忓彿'),
-    //   dataIndex: 'index',
-    //   slotName: 'index',
-    // },
     {
-      title: t('鍚嶇О'),
+      title: t('dmx.column.name'),
       dataIndex: 'name',
+      slotName: 'name',
     },
     {
       title: t('鍒嗗揩鏁�'),
-      dataIndex: 'contentType',
-      slotName: 'contentType',
+      dataIndex: 'chunk_num',
     },
     {
-      title: t('涓婁紶鏃堕棿'),
-      dataIndex: 'filterType',
+      title: t('dmx.column.UploadTime'),
+      dataIndex: 'create_time',
+      slotName: 'create_time',
+      width:200
     },
     {
-      title: t('鍒涘缓浜�'),
-      dataIndex: 'count',
+      title: t('瑙f瀽鏂规硶'),
+      dataIndex: 'parser_id',
+      slotName: 'parser_id',
+    },
+    {
+      title: t('鍚敤'),
+      dataIndex: 'status',
+      slotName: 'status',
     },
     {
       title: t('瑙f瀽鐘舵��'),
-      dataIndex: 'createdTime',
+      dataIndex: 'run',
+      slotName: 'run',
     },
     {
-      title: t('鎿嶄綔'),
-      dataIndex: 'operations',
-      slotName: 'operations',
+      title: t('dmx.column.Operate'),
+      dataIndex: 'action',
+      slotName: 'action',
+      width: 200,
+      minWidth: 200,
     },
   ]);
   const contentTypeOptions = computed<SelectOptionData[]>(() => [
@@ -407,16 +499,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 {
@@ -426,9 +534,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 = ()=>{
@@ -439,17 +549,135 @@
     fetchData({ ...basePagination, current });
   };
 
-  fetchData();
+  const knowledgeData = async (
+    params = { page: 1, page_size: 20 }
+  ) => {
+    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]
+        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 {
+      listloading.value = 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 = (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) {
+    // 澶勭悊鏍囩鏀瑰彉浜嬩欢
+    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)[],
@@ -498,16 +726,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) => {
@@ -520,6 +844,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">
@@ -536,30 +871,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