yangyin
2024-09-05 583efcff6c297e6880d5fcee314550465c0a6a91
src/views/project/yw/dataManage/knowledge/Knowledge.vue
@@ -1,29 +1,119 @@
<template>
   <div class="h100 overflow-y-auto p-[24px]">
      <div class="flex flex-col h100 mt-[16px] border-solid border-1">
   <div class="h100 overflow-y-auto p-[16px]">
      <div class="flex flex-col h100">
         <div class="text-[16px] font-[500] h-[22px]">知识库管理</div>
         <div class="mx-0 mt-[12px] mb-[16px] flex justify-between items-center">
            <el-input
               v-model="state.knowledgeBaseForm.Name"
               style="width: 226.4px"
               style="width: 230px; margin-right: 10px; background: #ffffff; border-radius: 6px; transition: all 0.2s"
               placeholder="搜索知识库名称"
               clearable
               :suffix-icon="Search"
            ></el-input>
            <el-button icon="ele-Plus" @click="importData()" type="primary"> 创建知识库 </el-button>
            <el-button icon="ele-Plus" @click="createKnowledgeBase()" type="primary"> 创建知识库 </el-button>
         </div>
         <div class="flex flex-wrap gap-3 overflow-x-auto set_item_jel"></div>
         <div class="flex flex-wrap gap-[12px]">
            <div class="flex flex-wrap gap-3 overflow-x-auto set_item_jel" v-for="item in state.knowledgeBaseList" :key="item.id">
               <img :src="knowledgeLeft" class="set_item_img" />
               <div class="set_item_content">
                  <div class="flex items-center">
                     <div class="mr-[10px] text-[14px] font-[500] h-[22px]">{{ item.title }}</div>
                     <span class="set_desc_text">
                        <span class="set_desc_icon ywifont ywicon-wendang"> </span>
                        1个知识
                     </span>
                     <span class="set_desc_text">
                        <span class="set_desc_icon ywifont ywicon-wendang"> </span>
                        {{ item.create_time }}更新
                     </span>
                  </div>
               </div>
               <div class="set_btn_group">
                  <el-button link class="text-[12px] text-[#686682]">查看 </el-button>
                  <el-divider direction="vertical" />
                  <el-button link class="text-[12px] text-[#686682]">命中测试 </el-button>
                  <el-divider direction="vertical" />
                  <el-button link class="text-[12px] text-[#686682]" @click="editKnowledgeBase(item)">编辑 </el-button>
                  <el-divider direction="vertical" />
                  <el-button link class="text-[12px] text-[#686682]" @click="deleteKnowledgeBase(item)">删除 </el-button>
               </div>
            </div>
         </div>
      </div>
   </div>
</template>
<script setup lang="ts">
import { computed, nextTick, onMounted, reactive, ref } from 'vue';
import { Search } from '@element-plus/icons-vue';
import { ElMessage, ElMessageBox } from 'element-plus';
import { onMounted, reactive } from 'vue';
import { useRouter } from 'vue-router';
import { delete_docvector_name, get_docvector_list } from '/@/api/knowledge/docvector';
import mittBus from '/@/utils/mitt';
import knowledgeLeft from '/static/images/knowledge/data_type_1.png';
const router = useRouter();
const state = reactive({
   knowledgeBaseForm: {
      Name: '',
   },
   knowledgeBaseList: [],
});
//#region ====================== 获取知识库sheet列表 ======================
//创建知识库
const createKnowledgeBase = () => {
   router.push({
      name: 'AddKnowledge',
   });
};
//获取知识库列表
const docvectorList = async () => {
   const res = await get_docvector_list();
   if (res.json_ok) {
      res.values.forEach((item) => {
         item.create_time = new Date(item.create_time).toLocaleString();
      });
      state.knowledgeBaseList = res.values;
   } else {
      return ElMessage.error('获取列表索引失败' + (res?.json_msg ? `,${JSON.stringify(res.json_msg)}` : ''));
   }
};
const deleteKnowledgeBase = async (row) => {
   ElMessageBox.confirm(`确定删除当前的知识库:【${row.title}】?`, '提示', {
      confirmButtonText: '确定',
      cancelButtonText: '取消',
      type: 'warning',
   }).then(async () => {
      const res = await delete_docvector_name({
         knowlg_id: row.id,
      });
      if (res.json_ok) {
         ElMessage.success('删除知识库成功');
         const index = state.knowledgeBaseList.findIndex((d) => d.id === row.id);
         state.knowledgeBaseList.splice(index, 1);
      }
   });
};
//#endregion
//#region ====================== 对知识库进行编辑查看操作 ======================
const editKnowledgeBase = (row) => {
   router.push({
      name: 'EditKnowledge',
      query: {
         knowledge_id: row.id,
         knowledge_title: row.title,
         knowledge_desc: row.desc,
         knowledge_prompt: row.prompt,
      },
   });
};
//#endregion
//删除知识库
onMounted(() => {
   docvectorList();
   mittBus.on('addKnowledgeBaseObj', (obj) => {
      state.knowledgeBaseList.push(obj);
   });
});
</script>
<style scoped lang="scss">
@@ -31,9 +121,40 @@
   align-items: center;
   background: #fff;
   border-radius: 16px;
   display: flex;
   min-width: 700px;
   max-width: calc(50% - 6px);
   padding: 16px 20px;
   width: 100%;
   box-sizing: border-box;
   .set_item_img {
      width: 40px;
      flex-shrink: 0;
      border-style: none;
      vertical-align: middle;
   }
   .set_item_content {
      flex: 1;
      margin: 0 12px 0 16px;
      width: calc(100% - 300px);
      .set_desc_text {
         align-items: center;
         display: flex;
         gap: 2px;
         color: rgba(135, 138, 171, 0.75);
         font-size: 12px;
      }
      .set_desc_text:not(:last-child) {
         margin-right: 10px;
      }
      .set_desc_icon {
         color: rgba(135, 138, 171, 0.75);
         align-items: center;
         display: inline-flex;
         font-size: 16px;
         justify-content: center;
      }
   }
   .set_btn_group {
      flex-shrink: 0;
   }
}
</style>