From f74f264d875b003730484f3fe7cb242c7f91294e Mon Sep 17 00:00:00 2001
From: zhangxiao <898441624@qq.com>
Date: 星期四, 15 八月 2024 17:32:55 +0800
Subject: [PATCH] fix: 模型管理代码修改

---
 src/api/model.ts                                |    6 
 src/views/dmx/model/index.vue                   |   32 
 src/views/dmx/knowledgeLib/index.vue            | 1569 +++++++++++++++++++++++++++------------------------
 src/views/dmx/model/components/addTableName.vue |    1 
 src/components/menu/index.vue                   |    3 
 src/views/dmx/model/components/addPageModel.vue |  175 +----
 src/router/routes/index.ts                      |    1 
 src/router/routes/modules/knowledgeLib.ts       |    2 
 8 files changed, 920 insertions(+), 869 deletions(-)

diff --git a/src/api/model.ts b/src/api/model.ts
index 6edf0be..a5eca7f 100644
--- a/src/api/model.ts
+++ b/src/api/model.ts
@@ -77,3 +77,9 @@
   return axios.put('/api/v1/llm/edit_llm_factory', params);
 }
 
+// 鑾峰彇妯″瀷璇︽儏鏄剧ず鍍�
+export function getFactoryDetail(params) {
+  return axios.get('/api/v1/llm/factory_config',{
+    params,
+  });
+}
diff --git a/src/components/menu/index.vue b/src/components/menu/index.vue
index a6ef80d..4485255 100644
--- a/src/components/menu/index.vue
+++ b/src/components/menu/index.vue
@@ -38,10 +38,12 @@
         }
         // Eliminate external link side effects
         const { hideInMenu, activeMenu } = item.meta as RouteMeta;
+
         if (route.name === item.name && !hideInMenu && !activeMenu) {
           selectedKey.value = [item.name as string];
           return;
         }
+
         // const firstMenuNameArr=['model','knowledge','session','sessionRecords'];
         // const suffix='Manager';
         // if(firstMenuNameArr.indexOf(item.name)!=-1){
@@ -54,6 +56,7 @@
         //   });
         // }
         // Trigger router change
+
         router.push({
           name: item.name,
         });
diff --git a/src/router/routes/index.ts b/src/router/routes/index.ts
index 51ee959..763aa59 100644
--- a/src/router/routes/index.ts
+++ b/src/router/routes/index.ts
@@ -8,6 +8,7 @@
   eager: true,
 });
 
+
 console.log(externalModules, 'externalModules');
 
 function formatModules(_modules: any, result: RouteRecordNormalized[]) {
diff --git a/src/router/routes/modules/knowledgeLib.ts b/src/router/routes/modules/knowledgeLib.ts
index 6f6cb30..ce371e4 100644
--- a/src/router/routes/modules/knowledgeLib.ts
+++ b/src/router/routes/modules/knowledgeLib.ts
@@ -9,7 +9,7 @@
         requiresAuth: true,
         icon: 'icon-storage',
         order: 2,
-        hideInMenu:false
+        hideInMenu:false,
     },
     children:[
         {
diff --git a/src/views/dmx/knowledgeLib/index.vue b/src/views/dmx/knowledgeLib/index.vue
index 2e20544..442ca87 100644
--- a/src/views/dmx/knowledgeLib/index.vue
+++ b/src/views/dmx/knowledgeLib/index.vue
@@ -6,9 +6,12 @@
         <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>
         <a-spin :loading="listloading" class="lf-container-down">
           <a-scrollbar style="height: calc(100vh - 300px); overflow: auto">
@@ -16,18 +19,23 @@
               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:'10px'}" />
+                <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: #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>
+                  <span
+                    style="cursor: pointer; color: #4977ba; font-size: 12px"
+                    @click="deleteKnowledge(tab.id)"
+                    ><icon-delete style="font-size: 14px" />鍒犻櫎</span
+                  >
                 </template>
               </a-popover>
             </div>
@@ -37,8 +45,17 @@
       <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')">
-            <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-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
@@ -48,16 +65,21 @@
                       label-align="left"
                     >
                       <a-row :gutter="16">
-                        <a-col :span="24" style="margin-bottom: 10px;display: flex;justify-content: space-between">
+                        <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
-                            >鎵归噺
+                            <a-button :disabled="checkedArr.length == 0" border
+                              >鎵归噺
                               <icon-down style="margin-left: 4px" />
                             </a-button>
                             <template #content>
@@ -104,14 +126,19 @@
                             </template>
                           </a-popover>
                           <span>
-                                                      <a-input-search
-                                                        :placeholder="$t('cardList.searchInput.placeholder')"
-                                                        style="width: 200px;margin-right: 10px"
-                                                        v-model="keywords"
-                                                        @change="search"
-                                                      />
+                            <a-input-search
+                              :placeholder="
+                                $t('cardList.searchInput.placeholder')
+                              "
+                              style="width: 200px; margin-right: 10px"
+                              v-model="keywords"
+                              @change="search"
+                            />
                             <!--鏂板缓-->
-                              <add :kbobj="kbobj" @changeFetchData="changeFetchData" />
+                            <add
+                              :kbobj="kbobj"
+                              @changeFetchData="changeFetchData"
+                            />
                           </span>
                         </a-col>
                       </a-row>
@@ -139,7 +166,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>-->
@@ -148,10 +179,8 @@
                     <!--            {{ $t('searchTable.operation.download') }}-->
                     <!--          </a-button>-->
                     <a-tooltip :content="$t('searchTable.actions.refresh')">
-                      <div class="action-icon"
-                      >
-                        <icon-refresh size="18"
-                        />
+                      <div class="action-icon">
+                        <icon-refresh size="18" />
                       </div>
                     </a-tooltip>
                     <a-dropdown @select="handleSelectDensity">
@@ -216,8 +245,8 @@
                   :bordered="false"
                   :size="size"
                   @page-change="onPageChange"
-                  :max-height='documentHeight'
-                  :scroll="{x: 1000}"
+                  :max-height="documentHeight"
+                  :scroll="{ x: 1000 }"
                   :row-selection="{
                     type: 'checkbox',
                     showCheckedAll: true,
@@ -228,7 +257,7 @@
                 >
                   <template #name="{ record }">
                     <!--                    <icon-file style="color: #0960bd;margin-right: 4px;" />-->
-                    <icon-file style="margin-right: 4px;" />
+                    <icon-file style="margin-right: 4px" />
                     <!--                    <span style="color: #0960bd;cursor: pointer" @click="fileClick">-->
                     <!--                      {{record.name}}-->
                     <!--                    </span>-->
@@ -241,38 +270,67 @@
                   <!--                    <span>{{ parser_ids[record.parser_id]}}</span>-->
                   <!--                  </template>-->
                   <template #status="{ record }">
-                    <a-switch v-model="record.status" size="small" checked-value="1" unchecked-value="0"
-                              @change="handleChangeStatus(record)" />
+                    <a-switch
+                      v-model="record.status"
+                      size="small"
+                      checked-value="1"
+                      unchecked-value="0"
+                      @change="handleChangeStatus(record)"
+                    />
                   </template>
                   <template #run="{ record }">
-                    <div style="display: flex;align-items: center;">
+                    <div style="display: flex; align-items: center">
                       <div style="width: 100px">
                         <a-popover title="" v-if="record.run == '4'">
-                          <a-tag :loading="record.loading" :color="'blue'" border>{{ $t("dmx.list.complete") }}</a-tag>
+                          <a-tag
+                            :loading="record.loading"
+                            :color="'blue'"
+                            border
+                            >{{ $t('dmx.list.complete') }}</a-tag
+                          >
                           <template #content>
                             <p></p>
                           </template>
                         </a-popover>
                         <a-popover title="" v-if="record.run == '3'">
-                          <a-tag :loading="record.loading" :color="'blue'" border>{{ $t("dmx.list.complete") }}</a-tag>
+                          <a-tag
+                            :loading="record.loading"
+                            :color="'blue'"
+                            border
+                            >{{ $t('dmx.list.complete') }}</a-tag
+                          >
                           <template #content>
                             <p></p>
                           </template>
                         </a-popover>
                         <a-popover title="" v-if="record.run == '1'">
-                          <a-tag :loading="record.loading" :color="'blue'" border>瑙f瀽涓�...</a-tag>
+                          <a-tag
+                            :loading="record.loading"
+                            :color="'blue'"
+                            border
+                            >瑙f瀽涓�...</a-tag
+                          >
                           <template #content>
                             <p></p>
                           </template>
                         </a-popover>
                         <a-popover title="" v-if="record.run == '2'">
-                          <a-tag :loading="record.loading" :color="'gold'" border>{{ $t("dmx.list.cancel") }}</a-tag>
+                          <a-tag
+                            :loading="record.loading"
+                            :color="'gold'"
+                            border
+                            >{{ $t('dmx.list.cancel') }}</a-tag
+                          >
                           <template #content>
                             <p></p>
                           </template>
                         </a-popover>
                         <a-popover title="" v-if="record.run == '0'">
-                          <a-tag :loading="record.loading" :color="'green'" border>{{ $t("dmx.list.NotStarted") }}
+                          <a-tag
+                            :loading="record.loading"
+                            :color="'green'"
+                            border
+                            >{{ $t('dmx.list.NotStarted') }}
                           </a-tag>
                           <template #content>
                             <p></p>
@@ -280,57 +338,105 @@
                         </a-popover>
                       </div>
                       <div>
-                        <a-button type="text" size="large" @click="run(record)" :loading="record.loading">
+                        <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 style="color: green" v-if="record.run == '2'" />
-                            <a-button status="warning" shape="circle" v-if="record.run == '1'" size="small">
+                            <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'" />
+                            <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" />
+                    <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" :disabled="record.run == '1'">
+                    <a-popconfirm
+                      :content="'纭畾鍒犻櫎鍚�'"
+                      type="warning"
+                      @ok="deleteItem(record)"
+                    >
+                      <a-button
+                        type="text"
+                        size="small"
+                        :disabled="record.run == '1'"
+                      >
                         <template #icon>
                           <icon-delete />
                         </template>
                       </a-button>
                     </a-popconfirm>
-                    <a-button type="text" size="small" :disabled="record.run == '1'"
-                              @click="onDownloadDocument(record)">
+                    <a-button
+                      type="text"
+                      size="small"
+                      :disabled="record.run == '1'"
+                      @click="onDownloadDocument(record)"
+                    >
                       <template #icon>
                         <icon-download />
                       </template>
                     </a-button>
 
-                    <a-button type="text" size="small" :disabled="record.run == '1'" @click="previewArea(record)">
+                    <a-button
+                      type="text"
+                      size="small"
+                      :disabled="record.run == '1'"
+                      @click="previewArea(record)"
+                    >
                       <template #icon>
                         <icon-eye />
                       </template>
                     </a-button>
-
                   </template>
                 </a-table>
               </a-card>
             </a-scrollbar>
           </a-tab-pane>
           <a-tab-pane key="2" :title="t('dmx.list.test')">
-            <a-scrollbar class="rt-container-main" :style="{height: documentHeight + 70 + 'px'}" style="overflow: auto">
+            <a-scrollbar
+              class="rt-container-main"
+              :style="{ height: documentHeight + 70 + 'px' }"
+              style="overflow: auto"
+            >
               <test ref="testForm"></test>
             </a-scrollbar>
           </a-tab-pane>
           <a-tab-pane key="3" :title="t('dmx.list.disposition')">
-            <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
+              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>
@@ -374,754 +480,745 @@
     </div>
     <a-modal title=" " v-model:visible="visible" :footer="false" fullscreen>
       <!--      <docx  previewSrc="http://192.168.20.116:1080/v1/document/get/405c3efa4d8c11ef97560242ac120006"></docx>-->
-      <docx v-if="documenttype=='docx'" :previewSrc="previewSrc"></docx>
-      <excel v-if="documenttype=='excel'" :previewSrc="previewSrc"></excel>
-      <txtPdf v-if="documenttype=='txtPdf'" :previewSrc="previewSrc"></txtPdf>
+      <docx v-if="documenttype == 'docx'" :previewSrc="previewSrc"></docx>
+      <excel v-if="documenttype == 'excel'" :previewSrc="previewSrc"></excel>
+      <txtPdf v-if="documenttype == 'txtPdf'" :previewSrc="previewSrc"></txtPdf>
     </a-modal>
   </div>
 </template>
 
 <script lang="ts" setup>
-import { computed, ref, reactive, watch, nextTick, onBeforeMount, onMounted } from "vue";
-import { useI18n } from "vue-i18n";
-import useLoading from "@/hooks/loading";
-import {
-  queryKbList,
-  PolicyRecord,
-  PolicyParams,
-  queryKbDocumentList,
-  deleteKnow,
-  queryKbdetail,
-  queryKbtenantInfo,
-  kbdocumentrm,
-  kbdocumentchangeparser,
-  kbdocumentrun,
-  kbdocumentchangeStatus,
-  downloadFile,
-  chunkSwitch
-} 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, Modal } from "@arco-design/web-vue";
-import { documentHeight, parseTime } from "@/utils";
-import { deleteLlm } from "@/api/model";
-import { userModelState } from "@/store";
+  import {
+    computed,
+    ref,
+    reactive,
+    watch,
+    nextTick,
+    onBeforeMount,
+    onMounted,
+  } from 'vue';
+  import { useI18n } from 'vue-i18n';
+  import useLoading from '@/hooks/loading';
+  import {
+    queryKbList,
+    PolicyRecord,
+    PolicyParams,
+    queryKbDocumentList,
+    deleteKnow,
+    queryKbdetail,
+    queryKbtenantInfo,
+    kbdocumentrm,
+    kbdocumentchangeparser,
+    kbdocumentrun,
+    kbdocumentchangeStatus,
+    downloadFile,
+    chunkSwitch,
+  } 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, Modal } from '@arco-design/web-vue';
+  import { documentHeight, parseTime } from '@/utils';
+  import { deleteLlm } from '@/api/model';
+  import { userModelState } from '@/store';
 
-let modelStore = userModelState();
-const httpUrl = modelStore.hrefUrl;
-type SizeProps = "mini" | "small" | "medium" | "large";
-type Column = TableColumnData & { checked?: true };
-const account = ref(null);
-const generateFormModel = () => {
-  return {
-    number: "",
-    name: "",
-    contentType: "",
-    filterType: "",
-    createdTime: [],
-    status: ""
+  let modelStore = userModelState();
+  const httpUrl = modelStore.hrefUrl;
+  type SizeProps = 'mini' | 'small' | 'medium' | 'large';
+  type Column = TableColumnData & { checked?: true };
+  const account = ref(null);
+  const generateFormModel = () => {
+    return {
+      number: '',
+      name: '',
+      contentType: '',
+      filterType: '',
+      createdTime: [],
+      status: '',
+    };
   };
-};
-const { loading, setLoading } = useLoading(true);
-const { t } = useI18n();
-const renderData = ref([]);
-const formModel = ref(generateFormModel());
-const cloneColumns = ref([]);
-const showColumns = ref<Column[]>([]);
+  const { loading, setLoading } = useLoading(true);
+  const { t } = useI18n();
+  const renderData = ref([]);
+  const formModel = ref(generateFormModel());
+  const cloneColumns = ref([]);
+  const showColumns = ref<Column[]>([]);
 
-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 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 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
+  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 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 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: {},
   });
-  getKbdetail(kbobj.id);
-};
+  let tabs = ref([]);
 
-const basePagination: Pagination = {
-  current: 1,
-  pageSize: 20
-};
-const pagination = reactive({
-  ...basePagination
-});
-const densityList = computed(() => [
-  {
-    name: t("searchTable.size.mini"),
-    value: "mini"
-  },
-  {
-    name: t("searchTable.size.small"),
-    value: "small"
-  },
-  {
-    name: t("searchTable.size.medium"),
-    value: "medium"
-  },
-  {
-    name: t("searchTable.size.large"),
-    value: "large"
-  }
-]);
-const columns = computed<TableColumnData[]>(() => [
-  {
-    title: t("dmx.column.name"),
-    dataIndex: "name",
-    slotName: "name"
-  },
-  {
-    title: t("鍒嗗揩鏁�"),
-    dataIndex: "chunk_num"
-  },
-  {
-    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("瑙f瀽鐘舵��"),
-    dataIndex: "run",
-    slotName: "run"
-  },
-  {
-    title: t("dmx.column.Operate"),
-    dataIndex: "action",
-    slotName: "action",
-    width: 200,
-    minWidth: 200
-  }
-]);
-const contentTypeOptions = computed<SelectOptionData[]>(() => [
-  {
-    label: t("searchTable.form.contentType.img"),
-    value: "img"
-  },
-  {
-    label: t("searchTable.form.contentType.horizontalVideo"),
-    value: "horizontalVideo"
-  },
-  {
-    label: t("searchTable.form.contentType.verticalVideo"),
-    value: "verticalVideo"
-  }
-]);
-const filterTypeOptions = computed<SelectOptionData[]>(() => [
-  {
-    label: t("searchTable.form.filterType.artificial"),
-    value: "artificial"
-  },
-  {
-    label: t("searchTable.form.filterType.rules"),
-    value: "rules"
-  }
-]);
-const statusOptions = computed<SelectOptionData[]>(() => [
-  {
-    label: t("searchTable.form.status.online"),
-    value: "online"
-  },
-  {
-    label: t("searchTable.form.status.offline"),
-    value: "offline"
-  }
-]);
-const fetchData = async (params) => {
-  setLoading(true);
-  try {
-    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');
+  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);
+  };
 
-      pagination.current = params.page;
-      pagination.total = data.data.total;
+  const basePagination: Pagination = {
+    current: 1,
+    pageSize: 20,
+  };
+  const pagination = reactive({
+    ...basePagination,
+  });
+  const densityList = computed(() => [
+    {
+      name: t('searchTable.size.mini'),
+      value: 'mini',
+    },
+    {
+      name: t('searchTable.size.small'),
+      value: 'small',
+    },
+    {
+      name: t('searchTable.size.medium'),
+      value: 'medium',
+    },
+    {
+      name: t('searchTable.size.large'),
+      value: 'large',
+    },
+  ]);
+  const columns = computed<TableColumnData[]>(() => [
+    {
+      title: t('dmx.column.name'),
+      dataIndex: 'name',
+      slotName: 'name',
+    },
+    {
+      title: t('鍒嗗揩鏁�'),
+      dataIndex: 'chunk_num',
+    },
+    {
+      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('瑙f瀽鐘舵��'),
+      dataIndex: 'run',
+      slotName: 'run',
+    },
+    {
+      title: t('dmx.column.Operate'),
+      dataIndex: 'action',
+      slotName: 'action',
+      width: 200,
+      minWidth: 200,
+    },
+  ]);
+  const contentTypeOptions = computed<SelectOptionData[]>(() => [
+    {
+      label: t('searchTable.form.contentType.img'),
+      value: 'img',
+    },
+    {
+      label: t('searchTable.form.contentType.horizontalVideo'),
+      value: 'horizontalVideo',
+    },
+    {
+      label: t('searchTable.form.contentType.verticalVideo'),
+      value: 'verticalVideo',
+    },
+  ]);
+  const filterTypeOptions = computed<SelectOptionData[]>(() => [
+    {
+      label: t('searchTable.form.filterType.artificial'),
+      value: 'artificial',
+    },
+    {
+      label: t('searchTable.form.filterType.rules'),
+      value: 'rules',
+    },
+  ]);
+  const statusOptions = computed<SelectOptionData[]>(() => [
+    {
+      label: t('searchTable.form.status.online'),
+      value: 'online',
+    },
+    {
+      label: t('searchTable.form.status.offline'),
+      value: 'offline',
+    },
+  ]);
+  const fetchData = async (params) => {
+    setLoading(true);
+    try {
+      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 {
+      setLoading(false);
     }
-  } catch (err) {
-    // you can report use errorHandler or other
-  } finally {
-    setLoading(false);
+  };
+
+  const search = () => {
+    fetchData({
+      kb_id: kbobj.id,
+      page: 1,
+      page_size: 20,
+      keywords: keywords.value,
+    });
+  };
+
+  const handleClick = () => {
+    visible.value = true;
+  };
+
+  const onPageChange = (current: number) => {
+    fetchData({ ...basePagination, current });
+  };
+
+  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: 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 search = () => {
-  fetchData({
-    kb_id: kbobj.id,
-    page: 1,
-    page_size: 20,
-    keywords: keywords.value
-  });
-};
+  const handleSelectDensity = (
+    val: string | number | Record<string, any> | undefined,
+    e: Event
+  ) => {
+    size.value = val as SizeProps;
+  };
 
-const handleClick = () => {
-  visible.value = true;
-};
+  const cancleConfig = () => {
+    activeKey.value = '1';
+    let id = tabs.value[selectedTab.value].id;
+    fetchData({
+      kb_id: id,
+      page: 1,
+      page_size: 20,
+    });
+  };
 
-const onPageChange = (current: number) => {
-  fetchData({ ...basePagination, current });
-};
-
-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: 20 }
-) => {
-  listloading.value = true;
-  try {
-    const { data } = await queryKbList(params);
-    // console.log(data, 'data');
+  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;
-    // 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: id,
+      page: 1,
+      page_size: 20,
+    });
+    getKbdetail(id); // 鑾峰彇璇︽儏
+  };
+
+  //鎵归噺鍚敤鍒犻櫎绂佺敤
+  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;
+            }
+          });
+        });
+        fetchData({
+          kb_id: tabs.value[selectedTab.value].id,
+          page: 1,
+          page_size: 20,
+        });
+      } else {
+        // Message.error('瑙f瀽澶辫触');
+        // row.run = '1';
+      }
+    } else {
+      //鎵归噺鍒犻櫎
+      Modal.confirm({
+        title: '鎻愮ず淇℃伅',
+        content: '纭鍒犻櫎鍚�',
+        okText: '纭畾',
+        cancelText: '鍙栨秷',
+        hideTitle: true,
+        onOk: async () => {
+          let data = await kbdocumentrm({ doc_id: checkedArr.value });
+          if (data.code == 0) {
+            Message.success('鍒犻櫎鎴愬姛');
+            fetchData({
+              kb_id: tabs.value[selectedTab.value].id,
+              page: 1,
+              page_size: 20,
+            });
+          }
+        },
+        onCancel: () => {},
+      });
+    }
+  };
+
+  const exchangeArray = <T extends Array<any>>(
+    array: T,
+    beforeIdx: number,
+    newIdx: number,
+    isDeep = false
+  ): T => {
+    const newArray = isDeep ? cloneDeep(array) : array;
+    if (beforeIdx > -1 && newIdx > -1) {
+      // 鍏堟浛鎹㈠悗闈㈢殑锛岀劧鍚庢嬁鍒版浛鎹㈢殑缁撴灉鏇挎崲鍓嶉潰鐨�
+      newArray.splice(
+        beforeIdx,
+        1,
+        newArray.splice(newIdx, 1, newArray[beforeIdx]).pop()
+      );
+    }
+    return newArray;
+  };
+
+  const popupVisibleChange = (val: boolean) => {
+    if (val) {
+      nextTick(() => {
+        const el = document.getElementById('tableSetting') as HTMLElement;
+        const sortable = new Sortable(el, {
+          onEnd(e: any) {
+            const { oldIndex, newIndex } = e;
+            exchangeArray(cloneColumns.value, oldIndex, newIndex);
+            exchangeArray(showColumns.value, oldIndex, newIndex);
+          },
+        });
+      });
+    }
+  };
+
+  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
+        page_size: 20,
       });
-      getKbdetail(kbobj.id);
+    }
+  };
+  const onDownloadDocument = async (record) => {
+    console.log(record);
+    downloadFile({
+      url: `/api/v1/document/get/${record.id}`,
+      filename: record.name,
+    });
+  };
+  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 {
-
-    }
-    // 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";
+      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;
+  };
 
-  } 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 addBlock = async (type) => {
-  if (type != 3) {
-    //鍚姩鍜屽彇娑�
-    let data = await kbdocumentrun({
-      doc_ids: checkedArr.value,
-      run: type
+  const handleChangeStatus = async (row) => {
+    console.log(row);
+    let data = await kbdocumentchangeStatus({
+      doc_id: row.id,
+      status: row.status,
     });
     if (data.code == 0) {
-      checkedArr.value.forEach(async (item) => {
-        tabs.value.forEach(async (items) => {
-          if(items.id == item){
-            items.loading = true;
-          }
-        })
-      })
+      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,
         page: 1,
-        page_size: 20
+        page_size: 20,
       });
     } else {
       // Message.error('瑙f瀽澶辫触');
       // row.run = '1';
     }
 
+    row.loading = false;
+  };
 
-
-  } else {
-  //鎵归噺鍒犻櫎
-    Modal.confirm({
-      title: "鎻愮ず淇℃伅",
-      content: "纭鍒犻櫎鍚�",
-      okText: "纭畾",
-      cancelText: "鍙栨秷",
-      hideTitle: true,
-      onOk: async () => {
-        let data = await kbdocumentrm({ doc_id: checkedArr.value });
-        if (data.code == 0) {
-          Message.success("鍒犻櫎鎴愬姛");
-          fetchData({
-            kb_id: tabs.value[selectedTab.value].id,
-            page: 1,
-            page_size: 20
-          });
-        }
-      },
-      onCancel: () => {
-      }
-    });
-
-
-
-  }
-};
-
-const exchangeArray = <T extends Array<any>>(
-  array: T,
-  beforeIdx: number,
-  newIdx: number,
-  isDeep = false
-): T => {
-  const newArray = isDeep ? cloneDeep(array) : array;
-  if (beforeIdx > -1 && newIdx > -1) {
-    // 鍏堟浛鎹㈠悗闈㈢殑锛岀劧鍚庢嬁鍒版浛鎹㈢殑缁撴灉鏇挎崲鍓嶉潰鐨�
-    newArray.splice(
-      beforeIdx,
-      1,
-      newArray.splice(newIdx, 1, newArray[beforeIdx]).pop()
-    );
-  }
-  return newArray;
-};
-
-const popupVisibleChange = (val: boolean) => {
-  if (val) {
-    nextTick(() => {
-      const el = document.getElementById("tableSetting") as HTMLElement;
-      const sortable = new Sortable(el, {
-        onEnd(e: any) {
-          const { oldIndex, newIndex } = e;
-          exchangeArray(cloneColumns.value, oldIndex, newIndex);
-          exchangeArray(showColumns.value, oldIndex, newIndex);
-        }
-      });
-    });
-  }
-};
-
-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');
+  const changeFetchData = async (row) => {
     fetchData({
       kb_id: kbobj.id,
       page: 1,
-      page_size: 20
+      page_size: 20,
     });
-  }
-};
-const onDownloadDocument = async (record) => {
-  console.log(record);
-  downloadFile({
-    url: `/api/v1/document/get/${record.id}`,
-    filename: record.name
+  };
+  watch(
+    () => columns.value,
+    (val) => {
+      // alert(columns.value)
+      cloneColumns.value = cloneDeep(val);
+      cloneColumns.value.forEach((item, index) => {
+        item.checked = true;
+      });
+      showColumns.value = cloneDeep(cloneColumns.value);
+    },
+    { deep: true, immediate: true }
+  );
+
+  onBeforeMount(async () => {
+    // const  {data}  = await queryKbtenantInfo();
+    // Object.assign(kbtenantInfo,data);
+    // console.log(kbtenantInfo,'kbtenantInfo鐨勬暟鎹�');
   });
-};
-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
+  onMounted(() => {
+    knowledgeData();
   });
-  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,
-      page: 1,
-      page_size: 20
-    });
-  } else {
-    // Message.error('瑙f瀽澶辫触');
-    // row.run = '1';
-  }
-
-  row.loading = false;
-};
-
-const changeFetchData = async (row) => {
-  fetchData({
-    kb_id: kbobj.id,
-    page: 1,
-    page_size: 20
-  });
-};
-watch(
-  () => columns.value,
-  (val) => {
-    // alert(columns.value)
-    cloneColumns.value = cloneDeep(val);
-    cloneColumns.value.forEach((item, index) => {
-      item.checked = true;
-    });
-    showColumns.value = cloneDeep(cloneColumns.value);
-  },
-  { deep: true, immediate: true }
-);
-
-onBeforeMount(async () => {
-  // const  {data}  = await queryKbtenantInfo();
-  // Object.assign(kbtenantInfo,data);
-  // console.log(kbtenantInfo,'kbtenantInfo鐨勬暟鎹�');
-
-});
-onMounted(() => {
-  knowledgeData();
-});
-
 </script>
 
 <style scoped lang="less">
-.container {
-  padding: 0 20px 20px 20px;
+  .container {
+    padding: 0 20px 20px 20px;
 
-  .main-container {
-    display: flex;
-    width: 100%;
-
-    .lf-container {
+    .main-container {
       display: flex;
-      flex-direction: column;
-      align-items: center;
-      //justify-content: space-evenly;
-      border-radius: 8px;
-      background: var(--color-bg-2);
-      width: 200px;
+      width: 100%;
 
-      .lf-container-top {
-        display: flex;
-        margin: 10px 0;
-      }
-
-      .lf-container-down {
+      .lf-container {
         display: flex;
         flex-direction: column;
-        box-sizing: border-box;
-        width: 90%;
-        height: calc(100% - 80px);
-        border: 1px solid var(--color-fill-3);
+        align-items: center;
+        //justify-content: space-evenly;
         border-radius: 8px;
-        //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;
-          padding-right: 20%;
-          font-size: 14px;
-          height: 40px;
-          line-height: 40px;
-          list-style: none;
-          position: relative;
-          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; /* 瓒呭嚭閮ㄥ垎鏄剧ず鐪佺暐鍙� */
-        }
+        background: var(--color-bg-2);
+        width: 200px;
 
-        .tab:hover {
-          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);
-        }
-
-        .tab.active {
-          color: #2a2a2b;
-          border: 1px solid var(--color-neutral-1);
-          background: #e8e8ea;
-          cursor: pointer;
-        }
-      }
-    }
-
-    .rt-container {
-      position: relative;
-      //background: #626aea;
-      margin-left: 20px;
-      width: calc(100% - 200px);
-      overflow: hidden;
-
-      .rt-container-main {
-        overflow: auto;
-      }
-
-      .details {
-        position: absolute;
-        top: 0;
-        left: 0;
-        width: 100%;
-        height: 100%;
-        background: #ffffff;
-
-        .details-header {
+        .lf-container-top {
           display: flex;
-          justify-content: space-between;
-          margin-top: 10px;
-          padding-right: 20px;
+          margin: 10px 0;
+        }
+
+        .lf-container-down {
+          display: flex;
+          flex-direction: column;
+          box-sizing: border-box;
+          width: 90%;
+          height: calc(100% - 80px);
+          border: 1px solid var(--color-fill-3);
+          border-radius: 8px;
+          //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;
+            padding-right: 20%;
+            font-size: 14px;
+            height: 40px;
+            line-height: 40px;
+            list-style: none;
+            position: relative;
+            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 {
+            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);
+          }
+
+          .tab.active {
+            color: #2a2a2b;
+            border: 1px solid var(--color-neutral-1);
+            background: #e8e8ea;
+            cursor: pointer;
+          }
+        }
+      }
+
+      .rt-container {
+        position: relative;
+        //background: #626aea;
+        margin-left: 20px;
+        width: calc(100% - 200px);
+        overflow: hidden;
+
+        .rt-container-main {
+          overflow: auto;
+        }
+
+        .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;
+          }
         }
       }
     }
   }
-}
 
-:deep(.arco-table-th) {
-  &:last-child {
-    .arco-table-th-item-title {
-      margin-left: 16px;
+  :deep(.arco-table-th) {
+    &:last-child {
+      .arco-table-th-item-title {
+        margin-left: 16px;
+      }
     }
   }
-}
 
-.action-icon {
-  margin-left: 12px;
-  cursor: pointer;
-}
-
-.active {
-  color: #0960bd;
-  background-color: #e3f4fc;
-}
-
-.setting {
-  display: flex;
-  align-items: center;
-  width: 200px;
-
-  .title {
+  .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;
+    }
+  }
 </style>
diff --git a/src/views/dmx/model/components/addPageModel.vue b/src/views/dmx/model/components/addPageModel.vue
index 616dac0..eda4416 100644
--- a/src/views/dmx/model/components/addPageModel.vue
+++ b/src/views/dmx/model/components/addPageModel.vue
@@ -18,53 +18,39 @@
       layout="vertical"
     >
       <div>
-        <a-form-item field="model_type" label="妯″瀷绫诲瀷">
-          <a-select v-model="form.model_type" placeholder="璇烽�夋嫨">
-            <a-option
-              v-for="item of form.options"
-              :value="item.value"
-              :label="item.label"
-            ></a-option>
-            <!-- <a-option value="embedding">embedding</a-option>
-            <a-option value="rerank">rerank</a-option>
-            <a-option value="image2text">image2text</a-option> -->
-          </a-select>
-        </a-form-item>
-        <a-form-item field="llm_name" label="妯″瀷鍚嶇О">
-          <a-input v-model="form.llm_name" placeholder="璇疯緭鍏ユā鍨嬪悕绉�" />
-        </a-form-item>
-
-        <!-- <a-form-item field="volc_ak" label="鐏北 ACCESS_KEY">
-          <a-input v-model="form.volc_ak" placeholder="璇疯緭鍏ョ伀灞� ACCESS_KEY" />
-          <a-button
-            type="primary"
-            @click="handleClick"
-            style="margin-left: 10px"
-          >
-            <template #icon>
-              <icon-plus />
-            </template>
-          </a-button>
-        </a-form-item>
-        <a-form-item field="volc_sk" label="鐏北 SECRET_KEY">
-          <a-input v-model="form.volc_sk" placeholder="璇疯緭鍏ョ伀灞� SECRET_KEY" />
-        </a-form-item> -->
-        <a-form-item field="api_base" label="鍩虹URL">
-          <a-input v-model="form.api_base" placeholder="璇疯緭鍏ュ熀纭�URL" />
-        </a-form-item>
-        <a-form-item field="name" label="API-Key">
-          <a-input v-model="form.name" placeholder="API-Key" />
-        </a-form-item>
-        <!-- <a-form-item field="describe" label="Base-Url">
-          <a-input v-model="form.name" placeholder="Base-Url" />
-        </a-form-item> -->
-        <a-form-item
+        <div v-for="(item, index) in form.formData.params" :key="index">
+          <div v-if="item.value_type === 'select'">
+            <a-form-item
+              :field="item.key"
+              :label="item.name"
+              :required="item.required"
+            >
+              <a-select v-model="form[item.key]" placeholder="璇烽�夋嫨">
+                <a-option
+                  v-for="(list, v) in item.options"
+                  :value="list"
+                  :label="v"
+                ></a-option>
+              </a-select>
+            </a-form-item>
+          </div>
+          <div v-else-if="item.value_type === 'input'">
+            <a-form-item
+              :field="item.key"
+              :label="item.name"
+              :required="item.required"
+            >
+              <a-input v-model="form[item.key]" placeholder="璇疯緭鍏�" />
+            </a-form-item>
+          </div>
+        </div>
+        <!-- <a-form-item
           field="raptor"
           label="鏄惁鏀寔 Vision"
           v-if="form.model_type === 'chat'"
         >
           <a-switch v-model="form.raptor" />
-        </a-form-item>
+        </a-form-item> -->
         <a-form-item field="logo" label="妯″瀷鍥剧墖">
           <a-space
             direction="vertical"
@@ -81,7 +67,7 @@
             ></Upload>
           </a-space>
         </a-form-item>
-        <a-form-item field="all_params" label="澧炲姞鍏跺畠鍙傛暟閰嶇疆">
+        <!-- <a-form-item field="all_params" label="澧炲姞鍏跺畠鍙傛暟閰嶇疆">
           <a-button
             type="primary"
             @click="handleAddClick"
@@ -91,7 +77,7 @@
               <icon-plus />
             </template>
           </a-button>
-        </a-form-item>
+        </a-form-item> -->
 
         <a-form-item v-for="(item, index) in form.addFomList" :key="index">
           <div class="addInput">
@@ -115,27 +101,6 @@
           </div>
         </a-form-item>
       </div>
-      <!-- <div v-else>
-        <a-form-item field="name" label="API-Key">
-          <a-input v-model="form.name" placeholder="API-Key" />
-        </a-form-item>
-        <a-form-item field="describe" label="Base-Url">
-          <a-input v-model="form.name" placeholder="Base-Url" />
-        </a-form-item>
-
-        <a-form-item field="section" label="妯″瀷鍥剧墖">
-          <a-space direction="vertical" :style="{ width: '100%' }">
-            <Upload
-              :action="uploadAction"
-              :limit="1"
-              :url="form.urlS"
-              @handleRemove="deleteRemove"
-              @update:fileList="updateFileList"
-              @success="handleSuccess"
-            ></Upload>
-          </a-space>
-        </a-form-item>
-      </div> -->
 
       <a-form-item>
         <div style="width: 100%; text-align: right">
@@ -151,7 +116,7 @@
 
 <script lang="ts" setup>
   import { reactive, ref, computed, watch, watchEffect, onMounted } from 'vue';
-  import { addLlm, getLlmDetail, editLlm } from '@/api/model';
+  import { addLlm, getLlmDetail, editLlm, getFactoryDetail } from '@/api/model';
   import { Modal, Message } from '@arco-design/web-vue';
   import message from '@arco-design/web-vue/es/message';
   import { resolveUnref } from '@vueuse/core';
@@ -186,15 +151,8 @@
   const form = reactive({
     size: 'medium',
     name: '',
+    formData: { logo: '' },
     llm_factory: '',
-    model_type: '',
-    province: 'haidian',
-    options: [
-      { label: 'chat', value: 'chat' },
-      { label: 'embedding', value: 'embedding' },
-      { label: 'rerank', value: 'rerank' },
-      { label: 'image2text', value: 'image2text' },
-    ],
     llm_name: '',
     api_base: '',
     volc_ak: '',
@@ -205,44 +163,13 @@
     slider: 5,
     score: 5,
     switch: false,
-    multiSelect: ['section one'],
-    treeSelect: '',
     raptor: false,
     addFomList: <any[]>[],
   });
+
   const form_ref = ref();
 
   const rules = {
-    model_type: [
-      {
-        required: true,
-        message: '璇烽�夋嫨妯″瀷绫诲瀷',
-      },
-    ],
-    llm_name: [
-      {
-        required: true,
-        message: '鍚嶇О涓嶅厑璁镐负绌�',
-      },
-    ],
-    volc_sk: [
-      {
-        required: true,
-        message: '璇疯緭鍏olc_sk',
-      },
-    ],
-    volc_ak: [
-      {
-        required: true,
-        message: '璇疯緭鍏olc_ak',
-      },
-    ],
-    api_base: [
-      {
-        required: true,
-        message: '璇疯緭鍏pi_base',
-      },
-    ],
     logo: [
       {
         required: true,
@@ -281,22 +208,16 @@
     const all_params = form.addFomList.map((item) => {
       return item.name + ':' + item.value;
     });
+    console.log(form, 9999);
     form_ref.value
       ?.validate()
       .then(async (res) => {
         if (!res) {
+          form.formData.logo = uploadUrl.value[0] || '';
+          form.llm_factory = editList.value.llm_factory;
+          delete form.formData;
           if (props.title == '缂栬緫') {
-            console.log(imageUrls.value, 999);
-            const data = await editLlm({
-              llm_factory: editList.value.llm_factory,
-              llm_name: form.llm_name,
-              model_type: form.model_type,
-              volc_ak: form.volc_ak,
-              volc_sk: form.volc_sk,
-              api_base: form.api_base,
-              all_params: all_params,
-              logo: uploadUrl.value[0] || '',
-            });
+            const data = await editLlm(form);
 
             if ((data as any).code == 200) {
               message.success('娣诲姞鎴愬姛');
@@ -306,16 +227,7 @@
               message.error('娣诲姞澶辫触');
             }
           } else {
-            const data = await addLlm({
-              llm_factory: editList.value.llm_factory,
-              llm_name: form.llm_name,
-              model_type: form.model_type,
-              volc_ak: form.volc_ak,
-              volc_sk: form.volc_sk,
-              api_base: form.api_base,
-              all_params: all_params,
-              logo: uploadUrl.value[0] || '',
-            });
+            const data = await addLlm(form);
 
             if ((data as any).code == 200) {
               message.success('娣诲姞鎴愬姛');
@@ -408,6 +320,15 @@
 
     imageUrls.value.push(httpUrl + data.data.logo);
   };
+  const getFactory = async () => {
+    const { data } = await getFactoryDetail({
+      factory_name: editList.value.llm_factory,
+    });
+    form.formData = data;
+  };
+  onMounted(() => {
+    getFactory();
+  });
 
   watchEffect(() => {
     if (props.editList.name) {
diff --git a/src/views/dmx/model/components/addTableName.vue b/src/views/dmx/model/components/addTableName.vue
index aee630a..7ae55bd 100644
--- a/src/views/dmx/model/components/addTableName.vue
+++ b/src/views/dmx/model/components/addTableName.vue
@@ -29,6 +29,7 @@
             v-for="(item, index) in modalList"
             :value="index"
             :label="index"
+            :disabled="item.added"
           ></a-option>
         </a-select>
       </a-form-item>
diff --git a/src/views/dmx/model/index.vue b/src/views/dmx/model/index.vue
index 465a8be..6c3bde1 100644
--- a/src/views/dmx/model/index.vue
+++ b/src/views/dmx/model/index.vue
@@ -105,12 +105,12 @@
                               <a-button @click="handleDeleteModel(list)">
                                 鍒犻櫎
                               </a-button>
-                              <a-button
+                              <!-- <a-button
                                 type="primary"
                                 @click="handleEditModel(list)"
                               >
                                 缂栬緫
-                              </a-button>
+                              </a-button> -->
 
                               <!-- <editModel></editModel> -->
                             </a-space>
@@ -131,7 +131,11 @@
                 />
               </div> -->
               <div>
-                <a-button type="primary" @click="handleAddModel">
+                <a-button
+                  type="primary"
+                  @click="handleAddModel"
+                  :disabled="addBtn"
+                >
                   <template #icon>
                     <icon-plus />
                   </template>
@@ -174,6 +178,7 @@
     modelmyLlms,
     deleteLlm,
     deleteLlmFactory,
+    getFactoryDetail,
   } from '@/api/model';
   import { Modal, Message } from '@arco-design/web-vue';
   import { userModelState } from '@/store';
@@ -182,6 +187,7 @@
 
   const modelStore = userModelState();
   let count = 5;
+  const addBtn = ref(false);
   const activeKey = ref(1);
   const data = ref([
     {
@@ -212,8 +218,9 @@
 
   const modalList = ref({});
   const tabKey = ref('key');
-  const changeTabs = (val) => {
+  const changeTabs = async (val) => {
     tabKey.value = val;
+    await getFactory();
   };
 
   const httpUrl = modelStore.hrefUrl;
@@ -332,12 +339,15 @@
     modalList.value = res.data;
     loading.value = true;
     tabData.value = Object.assign({}, tabData.value, res.data);
+    tabData.value = filterObject(tabData.value, 1);
+    tabKey.value = Object.keys(tabData.value)[0];
+    await getFactory();
   };
   queryModel();
   //杩斿洖婊¤冻鏉′欢鐨勫璞�
   const filterObject = (obj, threshold) => {
     return Object.keys(obj)
-      .filter((key) => obj[key] > threshold)
+      .filter((key) => obj[key].added == 1)
       .reduce((result, key) => {
         result[key] = obj[key];
         return result;
@@ -348,6 +358,18 @@
     queryModel();
     // 杩欓噷鎵ц闇�瑕佺殑鎿嶄綔
   };
+
+  const getFactory = async () => {
+    const { data } = await getFactoryDetail({
+      factory_name: tabKey.value,
+    });
+
+    if (data.set_type == 2) {
+      addBtn.value = true;
+    } else {
+      addBtn.value = false;
+    }
+  };
 </script>
 
 <script lang="ts">

--
Gitblit v1.8.0