liudong
2024-07-31 b6107c2cb71fc5216d67bbfa941a3ec115b0dafb
src/views/dmx/knowledgeLib/index.vue
@@ -26,7 +26,6 @@
                  <a-popconfirm content="确定删除吗?" @ok="deleteKnowledge(tab.id)" type="warning">
                    <span style="cursor: pointer;color: #0960bd;font-size: 12px"><icon-delete />删除</span>
                  </a-popconfirm>
                </template>
              </a-popover>
            </div>
@@ -37,7 +36,7 @@
        <a-tabs default-active-key="1">
          <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
@@ -53,7 +52,7 @@
                            style="width: 200px;margin-right: 10px"
                          />
                          <!--            新建-->
                          <add />
                          <add :kbobj="kbobj" @changeFetchData="changeFetchData"/>
                        </a-col>
                      </a-row>
                    </a-form>
@@ -166,54 +165,56 @@
                  <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 }">
                    <a-switch v-model="record.status"  checked-value="0" unchecked-value="1"/>
                    <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="width: 100px">
                        <a-popover title="Title" v-if="record.run == '2'">
                          <a-tag :color="'blue'" border>{{$t('dmx.list.complete')}}</a-tag>
                        <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>Here is the text content</p>
                          </template>
                        </a-popover>
                        <a-popover title="Title" v-if="record.run == '1'">
                          <a-tag :color="'gold'" border>{{$t('dmx.list.cancel')}}</a-tag>
                          <a-tag :loading="record.loading"  :color="'blue'" border>{{$t('dmx.list.complete')}}</a-tag>
                          <template #content>
                            <p>Here is the text content</p>
                          </template>
                        </a-popover>
                        <a-popover title="Title" v-if="record.run == '2'">
                          <a-tag :loading="record.loading"  :color="'gold'" border>{{$t('dmx.list.cancel')}}</a-tag>
                          <template #content>
                            <p>Here is the text content</p>
                          </template>
                        </a-popover>
                        <a-popover title="Title" v-if="record.run == '0'">
                          <a-tag :color="'green'" border>{{$t('dmx.list.NotStarted')}}</a-tag>
                          <a-tag :loading="record.loading"  :color="'green'" border>{{$t('dmx.list.NotStarted')}}</a-tag>
                          <template #content>
                            <p>Here is the text content</p>
                          </template>
                        </a-popover>
                      </div>
                      <div>
                        <a-button type="text" size="large" v-if="record.run == '2'">
                      <div >
                        <a-button type="text" size="large" @click="run(record)" :loading="record.loading">
                          <template #icon>
                            <icon-sync />
                          </template>
                        </a-button>
                        <a-button type="text" size="large" v-if="record.run == '1'">
                          <template #icon>
                            <icon-sync style="color: green" />
                          </template>
                        </a-button>
                        <a-button type="text" size="large" v-if="record.run == '0'">
                          <template #icon>
                            <icon-play-circle style="color: green" />
                            <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/>
                    <edit/>
                    <a-popconfirm :content="t('确定删除吗')" type="warning" @ok="deleteItem(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 />
@@ -232,12 +233,12 @@
          </a-tab-pane>
          <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="t('dmx.list.disposition')">
            <div class="rt-container-main">
              <config ></config>
              <config :kbtenantInfo="kbtenantInfo"  :kbobj="kbobj"></config>
            </div>
          </a-tab-pane>
        </a-tabs>
@@ -283,7 +284,7 @@
</template>
<script lang="ts" setup>
import { computed, ref, reactive, watch, nextTick, onBeforeMount } from "vue";
import { computed, ref, reactive, watch, nextTick, onBeforeMount, onMounted } from "vue";
  import { useI18n } from 'vue-i18n';
  import useLoading from '@/hooks/loading';
import {
@@ -293,7 +294,7 @@
  queryKbDocumentList,
  deleteKnow,
  queryKbdetail,
  queryKbtenantInfo
  queryKbtenantInfo, kbdocumentrm, kbdocumentchangeparser, kbdocumentrun, kbdocumentchangeStatus
} from "@/api/kbList";
  import { Pagination } from '@/types/global';
  import type { SelectOptionData } from '@arco-design/web-vue/es/select/interface';
@@ -307,9 +308,10 @@
  import test from '@/views/dmx/knowledgeLib/test.vue'
  import tool from '@/views/dmx/knowledgeLib/tool.vue'
  import addDetails from '@/views/dmx/knowledgeLib/addDetails.vue'
  import { deleteAccount } from "@/api/account";
import { Message } from "@arco-design/web-vue";
import { parseTime } from "@/utils";
  import { Message } from "@arco-design/web-vue";
  import { parseTime } from "@/utils";
  import { usePinia } from "@/store";
  const store = usePinia();
  type SizeProps = 'mini' | 'small' | 'medium' | 'large';
  type Column = TableColumnData & { checked?: true };
  const account = ref(null)
@@ -334,13 +336,33 @@
  let visible = ref(false)
  let detailsShow = ref(false)
  let selectedTab = ref(0)
  let testForm = ref(null)
  let kbId = ref('')
  let kbobj = reactive({})
  let kbdetail = reactive({})
  let parser_ids = 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‘s 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);
    // console.log(item.id);
    kbobj= item;
    kbId = kbobj.id;
    testForm.value.changekbid(kbId);
    fetchData({
      kb_id: item.id,
      kb_id: kbobj.id,
      page: 1,
      page_size: 20
    })
@@ -396,7 +418,6 @@
      title: t('启用'),
      dataIndex: 'status',
      slotName: 'status',
      slotName: 'status',
    },
    {
      title: t('解析状态'),
@@ -451,15 +472,31 @@
      const  data  = await queryKbDocumentList(params);
      console.log(data, 'data');
      if(data.code=='0'){
        //   详情
        // const  kbtenantInfo  = await queryKbtenantInfo();
        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;
        //   查询知识库详情
        const  kbdetail  = await queryKbdetail({
        kbdetail  = await queryKbdetail({
          kb_id:params.kb_id,
        });
        //   详情
        // const  kbtenantInfo  = await queryKbtenantInfo();
@@ -498,8 +535,11 @@
      tabs.value = data;
      console.log(tabs.value, 'tabs');
      if(tabs.value.length>0 && tabs.value[0]){
        kbobj = tabs.value[0]
        kbId = kbobj.id;
        testForm.value.changekbid(kbId);
        fetchData({
          kb_id: tabs.value[0].id,
          kb_id: kbobj.id,
          page: 1,
          page_size: 20
        })
@@ -516,10 +556,6 @@
  };
  const deleteKnowledge = async (id) => {
    let data = await deleteKnow({
      kb_id:id
    })
@@ -595,17 +631,75 @@
    detailsShow.value = false
  }
  const   deleteItem =  async (row)=>{
    console.log(row);
    // let data = await deleteAccount({id: row.number})
    account.value.$messageSuccess('删除成功')
    //
    // if(data.code == 200){
    //   this.$messageSuccess('删除成功')
    // }
  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   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
  })
  // let data = await kbdocumentchangeparser({
  //   parser_id: row.parser_id,
  //   doc_id: row.id,
  //   parser_config: row.parser_config,
  // })
  if(data.code == 0){
    Message.success('解析成功');
    row.run = '3';
  }else{
    Message.error('解析失败');
    row.run = '1';
  }
  row.loading = false;
}
const   changeFetchData =  async (row)=>{
  fetchData({
    kb_id: kbobj.id,
    page: 1,
    page_size: 20
  })
}
  watch(
    () => columns.value,
    (val) => {
@@ -620,6 +714,9 @@
  );
  onBeforeMount(()=>{
  })
  onMounted(()=>{
    knowledgeData()
  })