From 406e004330031bbebe731e03ba6dd1ca9f75fcd2 Mon Sep 17 00:00:00 2001
From: liudong <liudong>
Date: 星期六, 24 八月 2024 12:17:14 +0800
Subject: [PATCH] 多文件上传效果

---
 src/views/sessionManager/index.vue                 |  154 +------------------------
 src/views/sessionManager/components/updataFile.vue |  196 ++++++++++++++++++++++++++++++++
 2 files changed, 203 insertions(+), 147 deletions(-)

diff --git a/src/views/sessionManager/components/updataFile.vue b/src/views/sessionManager/components/updataFile.vue
new file mode 100644
index 0000000..549ec2e
--- /dev/null
+++ b/src/views/sessionManager/components/updataFile.vue
@@ -0,0 +1,196 @@
+<template>
+  <a-popover
+    :popup-visible="visible"
+    title=""
+    trigger="click"
+    position="tl">
+    <a-button
+      :disabled="onFileSelectedLoading"
+      type="text"
+      style="border-radius: 24px"
+      @click="visible = !visible"
+    >
+      <icon-attachment
+        size="28"
+        style="color: #0960bd"
+      />
+    </a-button>
+    <template #title>
+      <div style="display: flex; justify-content: space-between">
+        <div>涓婁紶鏂囦欢</div>
+        <div>
+          <icon-upload />
+        </div>
+      </div>
+    </template>
+    <template #content>
+      <a-upload
+        draggable
+        action="/"
+        style="width: 100%"
+        :auto-upload="false"
+        ref="uploadRef"
+        @change="onChange"
+        multiple
+      />
+      <div style="width: 100%;margin-top: 10px;display: flex; justify-content: space-between;">
+        <div>
+          <span>瑙f瀽鏂规硶: </span>
+          <a-radio-group v-model="parser_id">
+            <a-radio
+              v-for="item in parser_ids"
+              :key="item.value"
+              :value="item.value"
+              style="margin-right: 10px"
+            >{{item.name}}</a-radio>
+          </a-radio-group>
+        </div>
+        <a-button
+          :loading="onFileSelectedLoading"
+          @click="upDataFile"
+          type="primary"
+          size="mini"
+          style="border-radius: 24px;"
+        >
+          <span style="font-size: 12px;">
+            涓婁紶
+          </span>
+        </a-button>
+      </div>
+    </template>
+  </a-popover>
+</template>
+
+<script lang="ts" setup>
+import { onMounted, onBeforeMount, reactive, ref, computed, watch } from "vue";
+import axios from "axios";
+import { Message } from "@arco-design/web-vue";
+import { uploadWithoutKb } from "@/api/session";
+
+const visible = ref(false);
+const loading = ref(false);
+const chatDis = ref(false);
+const directory = ref(false);
+const filesBtn = ref(null);
+const onFileSelectedLoading = ref(false);
+const parser_id = ref("");
+const parser_ids = ref([]);
+const uploaditemList = ref([]);
+const activeSessionId = ref('');
+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: 'wanghaos 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: {},
+});
+const uploadList = ref([]);
+const parser = reactive({
+  naive: {
+    "chunk_token_num": 676,
+    "layout_recognize": true,
+    "raptor": {
+      "use_raptor": true,
+      "prompt": "璇锋�荤粨浠ヤ笅娈佃惤銆� 灏忓績鏁板瓧锛屼笉瑕佺紪閫犮�� 娈佃惤濡備笅锛歕n      {cluster_content}\n浠ヤ笂灏辨槸浣犻渶瑕佹�荤粨鐨勫唴瀹广��",
+      "max_token": 600,
+      "threshold": 0.32,
+      "max_cluster": 233,
+      "random_seed": 1500
+    }
+  }, // 鐢ㄦ埛鍚�
+
+});
+const props = defineProps(["sessionId"]);
+const emit = defineEmits(["selectFileCallback"]);
+const uploadRef = ref();
+const files = ref([]);
+const acceptNameList = computed(() => {
+  return ".word, .pdf, .ppt, .excel, .txt, .zip, .rar, .7z, .doc, .docx, .xls, .xlsx, .pptx, .ppt, .pdf, .mp4, .avi, .mp3,.wav, .wma, .wmv, .rm,";
+});
+
+const init = () => {
+  parser_ids.value = kbtenantInfo.parser_ids.split(",").map((item) => {
+    const [value1, value2] = item.split(":");
+    return {
+      name: value2,
+      value: value1
+    };
+  });
+}
+
+const onChange = (fileList) => {
+  files.value = fileList;
+};
+
+
+const upDataFile = () => {
+  console.log(files.value, "files");
+  console.log(parser_ids.value, "瑙f瀽鏂规硶");
+  if(files.value.length == 0){
+    Message.warning('璇烽�夋嫨鏂囦欢');
+    return;
+  }
+  uploaditemList.value = files.value.map((item)=>{
+    return {
+      name: item.name,
+      size: (item.file.size/1024).toFixed(2) + 'K',
+    }
+  })
+  onFileSelectedLoading.value = true;
+  const formData = new FormData();
+  for (let i = 0; i < files.value.length; i++) {
+    formData.append('file', files.value[i].file);
+    formData.append('conversation_id', activeSessionId.value);
+    formData.append('parser_id', parser_id.value);
+    formData.append('parser_config', '');
+  }
+  uploadWithoutKb(formData).then((res) => {
+    if (res.code == 200) {
+      visible.value = false;
+      onFileSelectedLoading.value = false;
+      // uploaditemList.value = [];
+      emit('selectFileCallback', uploaditemList.value);
+      Message.success('涓婁紶鎴愬姛');
+    } else {
+      Message.error('涓婁紶澶辫触');
+    }
+  });
+
+
+
+};
+
+
+onBeforeMount(() => {
+  init();
+
+
+
+});
+onMounted(() => {
+});
+
+watch(
+  ()=>props.sessionId,
+  (value, oldValue)=>{
+     activeSessionId.value = value;
+  }
+)
+
+
+</script>
+
+<style scoped lang="less">
+.aUpload {
+  width: 100%;
+  max-height: 500px;
+  overflow: hidden;
+  overflow-y: auto;
+}
+</style>
diff --git a/src/views/sessionManager/index.vue b/src/views/sessionManager/index.vue
index 31bb72c..b0a1b07 100644
--- a/src/views/sessionManager/index.vue
+++ b/src/views/sessionManager/index.vue
@@ -1,5 +1,5 @@
 <template>
-  <div class="container">
+  <div class="container" ref="container">
     <!--    <AddSession-->
     <!--      :modalObj="modalObj"-->
     <!--      @addSession="addSession"-->
@@ -234,26 +234,7 @@
                 }"
               />
               <div style="width: 100%;display: flex;justify-content: space-between">
-                <a-button
-                  :disabled="onFileSelectedLoading"
-                  @click="selectFile"
-                  type="text"
-                  style="border-radius: 24px"
-                >
-                  <icon-attachment
-                    size="28"
-                    style="color: #0960bd"
-                  />
-                  <input
-                    ref="fileInput"
-                    type="file"
-                    style="display: none"
-                    @change="onFileSelected"
-                  />
-                </a-button>
-                  <span
-                    style="cursor: pointer;margin-left: 20px;">
-                </span>
+                <updataFile :sessionId="activeSessionId" @selectFileCallback="selectFileCallback"></updataFile>
                 <a-button
                   :disabled="chatDis"
                   @click="sentClick"
@@ -264,52 +245,7 @@
                   <icon-send size="32" style="color: #0960bd" />
                 </a-button>
               </div>
-<!--              <div class="btn-send">-->
-<!--                <a-button-->
-<!--                  :disabled="chatDis"-->
-<!--                  @click="sentClick"-->
-<!--                  type="text"-->
-<!--                  style="border-radius: 24px"-->
-<!--                  :loading="loading"-->
-<!--                >-->
-<!--                  <icon-send size="32" style="color: #0960bd" />-->
-<!--                </a-button>-->
-<!--              </div>-->
             </div>
-            <!--            <div style="margin-top: 0px">-->
-            <!--              <a-upload-->
-            <!--                ref="uploadRef"-->
-            <!--                :file-list="uploadList"-->
-            <!--                :limit="1"-->
-            <!--                multiple-->
-            <!--                :custom-request="customRequest"-->
-            <!--                style="font-size: 24px;margin-bottom: 10px;position: relative;width: 200px">-->
-            <!--                <template #upload-button>-->
-            <!--                  <icon-attachment style="color: #0960bd;position: absolute;top:-50px;left: 20px;z-index: 10000"/>-->
-            <!--                </template>-->
-            <!--              </a-upload>-->
-            <!--            </div>-->
-<!--            <span-->
-<!--              style="-->
-<!--                position: absolute;-->
-<!--                top: 94px;-->
-<!--                left: 20px;-->
-<!--                z-index: 999;-->
-<!--                cursor: pointer;-->
-<!--              "-->
-<!--            >-->
-<!--              <icon-attachment-->
-<!--                size="28"-->
-<!--                @click="selectFile"-->
-<!--                style="color: #0960bd"-->
-<!--              />-->
-<!--              <input-->
-<!--                ref="fileInput"-->
-<!--                type="file"-->
-<!--                style="display: none"-->
-<!--                @change="onFileSelected"-->
-<!--              />-->
-<!--            </span>-->
             <div class="uploadFileList">
               <div
                 class="files"
@@ -319,7 +255,7 @@
               >
                 <a-comment
                   :author="item.name"
-                  :content="(item.size/1024).toFixed(2) + 'K'"
+                  :content="item.size"
                   style="
                     background: var(--color-bg-2);
                     padding: 10px;
@@ -414,11 +350,6 @@
   </div>
 </template>
 <script setup lang="ts">
-  import {
-    IconClose,
-    IconSearch,
-    IconTiktokColor,
-  } from '@arco-design/web-vue/es/icon';
   import { useAppStore, useUserStore } from '@/store';
   import {
     computed,
@@ -439,7 +370,7 @@
   import agentSession from '@/views/sessionManager/components/agentSession.vue';
   import historySession from '@/views/sessionManager/components/historySession.vue';
   import smartAi from '@/views/sessionManager/components/smartAi.vue';
-  import setName from '@/views/sessionManager/components/setName.vue';
+  import updataFile from '@/views/sessionManager/components/updataFile.vue';
   import EventBus from '@/utils/EventBus';
   import {
     addSessionApi,
@@ -494,6 +425,7 @@
   const files = ref([]);
   const file = ref('');
   const fileInput = ref(null);
+  const container = ref(null);
   const chatDataMeg = reactive({});
   const visible = ref(false);
   let toStop = false;
@@ -603,39 +535,11 @@
     // formRef.value.resetFields();
   };
 
-  const selectFile = () => {
-    fileInput.value.click();
+  const selectFileCallback = (data) => {
+    uploaditemList.value = data;
   };
 
   let onFileSelectedLoading = ref(false);
-  const onFileSelected = (event) => {
-    const file = event.target.files[0];
-    uploaditemList.value = [
-      {
-        name: file.name,
-        size: file.size,
-      },
-    ];
-    if (file) {
-      onFileSelectedLoading.value = true;
-      const formData = new FormData();
-      formData.append('file', file);
-      formData.append('conversation_id', activeSessionId.value);
-      uploadWithoutKb(formData).then((res) => {
-        // console.log(res);
-        if (res.code == 200) {
-          console.log(res);
-          console.log(uploaditemList.value);
-          onFileSelectedLoading.value = false;
-          fileInput.value.value = '';
-          uploaditemList.value = [];
-          Message.success('涓婁紶鎴愬姛');
-        } else {
-          Message.error('涓婁紶澶辫触');
-        }
-      });
-    }
-  };
 
   const deleteFile = (item) => {
     console.log(uploaditemList.value);
@@ -647,31 +551,7 @@
     await toClipboard(text); //鍙傛暟涓鸿澶嶅埗鐨勬枃鏈�
   };
 
-  const onChange = (fileList) => {
-    // files.value = fileList;
-  };
 
-  // 涓婁紶鏂囦欢
-  const customRequest = async (option) => {
-    const { onProgress, onError, onSuccess, fileItem, name } = option;
-    fileItem.status = 'ready';
-    if (fileItem.file) {
-      const formData = new FormData();
-      formData.append('file', fileItem.file);
-      formData.append('conversation_id', activeSessionId.value);
-      uploadWithoutKb(formData).then((res) => {
-        // console.log(res);
-        if (res.code == 200) {
-          console.log(res);
-          console.log(uploadList.value);
-          fileItem.status = 'done';
-          // uploadList.value = [];
-        } else {
-          fileItem.status = 'error';
-        }
-      });
-    }
-  };
 
   const DialogList = async () => {
     const { code, data } = await getDialogListApi();
@@ -738,26 +618,6 @@
   const handleShiftEnter = (event) => {
     event.preventDefault();
     inputMsg.value += '\n';
-  };
-  const dialogChange = (val) => {
-    // 鍒ゆ柇褰撳墠鏄櫤鑳戒綋鎴朼gent
-    // console.log(val, 'val');
-    dialogId.value = val;
-    dialogs.value.forEach((item) => {
-      if (item.id === val) {
-        Object.assign(dialogObj, item);
-      }
-    });
-    console.log(dialogObj.type, 'dialogObj');
-    if (dialogObj.type == 1) {
-      agentType.value = '1';
-      querySessionList();
-    } else {
-      agentType.value = '2';
-      queryAgentSessionList();
-    }
-
-    // querySessionList();
   };
 
   // 鍙戦��

--
Gitblit v1.8.0