From 659347e492d9d4c84e869e0cbbb1281063dd9307 Mon Sep 17 00:00:00 2001
From: liudong <liudong>
Date: 星期一, 19 八月 2024 15:40:31 +0800
Subject: [PATCH] 文档上传修改

---
 src/views/sessionManager/index.vue |  219 ++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 145 insertions(+), 74 deletions(-)

diff --git a/src/views/sessionManager/index.vue b/src/views/sessionManager/index.vue
index 767e528..3c71541 100644
--- a/src/views/sessionManager/index.vue
+++ b/src/views/sessionManager/index.vue
@@ -80,7 +80,7 @@
                   <span class="action" v-if="index != 0" @click="copy(sessionDetail.content)">
                      <icon-copy /> 澶嶅埗
                   </span>
-                  <span class="action"  v-if="index != 0 && index == sessionDetailList.length - 1" @click="reGenerate()">
+                  <span class="action" v-if="index != 0 && index == sessionDetailList.length - 1" @click="reGenerate()">
                      <icon-refresh /> 閲嶆柊鐢熸垚
                   </span>
                 </template>
@@ -107,8 +107,9 @@
                 <template #actions>
                   <div class="action"
                        @click="stopChat"
-                       style="background: var(--color-bg-2);color: var(--color-primary-light-4);" v-if="displayedText != ''">
-                     <icon-record-stop />
+                       style="background: var(--color-bg-2);color: var(--color-primary-light-4);"
+                       v-if="displayedText != ''">
+                    <icon-record-stop />
                     鍋滄鐢熸垚
                   </div>
                 </template>
@@ -120,7 +121,7 @@
             <div class="chartStart v-else" @click="stopChat">閲嶆柊鐢熸垚</div> -->
           </a-scrollbar>
 
-          <div class="chat_bottom" >
+          <div class="chat_bottom">
             <div class="center-bottom">
               <!-- <a-textarea
               v-model="inputMsg"
@@ -148,19 +149,6 @@
                   maxRows: 5,
                 }"
               />
-              <div style="margin-left: 20px">
-                <a-upload
-                  ref="uploadRef"
-                  :file-list="uploadList"
-                  :disabled="loading1"
-                  multiple
-                  :custom-request="customRequest"
-                          style="font-size: 24px;">
-                  <template #upload-button>
-                    <icon-attachment style="color: #0960bd"/>
-                  </template>
-                </a-upload>
-              </div>
 
               <div class="btn-send">
                 <a-button
@@ -169,8 +157,51 @@
                   type="text"
                   style="border-radius: 24px"
                   :loading="loading"
-                ><icon-send size="32" style="color: #0960bd"/>
+                >
+                  <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>-->
+            <spa style="position: absolute;top:96px;left: 10px;z-index: 10000;cursor: pointer">
+              <icon-attachment size="28" @click="selectFile" style="color: #0960bd;" />
+              <input
+                ref="fileInput"
+                type="file"
+                style="display: none;"
+                @change="onFileSelected"
+              />
+            </spa>
+            <div class="uploadFileList">
+              <div class="files" v-for="(item,index) in uploaditemList" :key="index"
+                   style="position: relative;width: 200px;margin-top: 10px;">
+                <a-comment
+                  :author="item.name"
+                  :content="item.size +''"
+                  style="background: var(--color-bg-2);padding:10px;border-radius: 10px"
+                >
+                  <template #avatar>
+                    <a-button type="text" :loading="onFileSelectedLoading" v-if="onFileSelectedLoading"></a-button>
+                    <a-avatar v-if="!onFileSelectedLoading">
+                      <icon-file style="color: #0960bd" />
+                    </a-avatar>
+                  </template>
+                </a-comment>
+                <icon-close-circle-fill size="18px"
+                                        @click="deleteFile(item)"
+                                        style="position: absolute;right: -4px;top: -4px;color: red;cursor: pointer"/>
               </div>
             </div>
           </div>
@@ -239,17 +270,17 @@
 import { queryCanvasList } from "@/api/Agent";
 import { getAgentSessionDetailsApi } from "@/api/agentSession";
 import useClipboard from "vue-clipboard3";
+
 const sessionDetailList = ref([]); //鏍规嵁浼氳瘽id鍑烘潵鐨勪細璇濊鎯�
 const sessionList = ref([]); //浼氳瘽鍒楄〃
 const modalObj = reactive({ add: false });
 const dialogId = ref("");
 const chatDis = ref(false);
 const loading = ref(false);
-const loading1= ref(false);
 const agentType = ref("1");
 const agentTitle = ref("鏈懡鍚嶄細璇�");
 let chatObj = reactive({});
-const isStopChat = ref(false)
+const isStopChat = ref(false);
 const currIndex = ref(0);
 const displayedText = ref(""); // 姝e湪鏄剧ず鐨勬枃瀛�
 let timer: number | null = null;
@@ -264,48 +295,81 @@
 const selectValue = ref("");
 const sectionList = ref({});
 const uploadList = ref([]);
+const uploaditemList = ref([]);
 const uploadRef = ref();
 const files = ref([]);
+const file = ref('');
+const fileInput = ref(null);
+
+const selectFile = () => {
+  fileInput.value.click();
+};
+
+
+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);
+  uploaditemList.value = [];
+};
 
 const { toClipboard } = useClipboard();
 const copy = async (text) => {
   await toClipboard(text);    //鍙傛暟涓鸿澶嶅埗鐨勬枃鏈�
-}
+};
 
 const onChange = (fileList) => {
   // files.value = fileList;
 };
 
-const submitOne = (e) => {
-  e.stopPropagation();
-  console.log(files.value);
-  uploadRef.value.submit(files.value.find((x) => x.status === 'init'));
-};
 // 涓婁紶鏂囦欢
-const customRequest = async(option) => {
-  loading1.value=true;
-  const {onProgress, onError, onSuccess, fileItem, name} = option
-
-  const { code, data } = await getSessionDetailsApi(activeSessionId.value);
-  if (code === 200) {
-    console.log(data, "璇︽儏");
-    if (fileItem.file) {
-      const formData = new FormData();
-      formData.append('file', fileItem.file);
-      formData.append('conversation_id', data.id);
-      uploadWithoutKb(formData).then((res) => {
+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);
-        uploadList.value = [];
-        if (res.code == 200) {
-          console.log(res);
-          loading1.value=false;
-        }
-      });
-    }
+        console.log(uploadList.value);
+        fileItem.status = "done";
+        // uploadList.value = [];
+      } else {
+        fileItem.status = "error";
+      }
+    });
   }
 
-}
-
+};
 
 
 const DialogList = async () => {
@@ -385,10 +449,10 @@
   });
   console.log(dialogObj.type, "dialogObj");
   if (dialogObj.type == 1) {
-    agentType.value = '1';
+    agentType.value = "1";
     querySessionList();
   } else {
-    agentType.value = '2';
+    agentType.value = "2";
     queryAgentSessionList();
   }
 
@@ -401,8 +465,8 @@
 };
 // 閲嶆柊鐢熸垚
 const reGenerate = () => {
-  let inputContent = sessionDetailList.value[sessionDetailList.value.length-2].content
-  startChat(inputContent)
+  let inputContent = sessionDetailList.value[sessionDetailList.value.length - 2].content;
+  startChat(inputContent);
 };
 
 const sendMessage = async (event) => {
@@ -427,7 +491,7 @@
 
       if (inputMsg.value) {
 
-        startChat(inputMsg.value)
+        startChat(inputMsg.value);
 
         inputMsg.value = "";
       } else {
@@ -437,7 +501,7 @@
   }
 };
 
-const startChat = async(valMsg)=>{
+const startChat = async (valMsg) => {
   chatDis.value = true;
   loading.value = true;
   sessionDetailList.value.push({
@@ -497,33 +561,33 @@
   // querySessionList();
   chatDis.value = false;
   loading.value = false;
-}
+};
 
-const stopChat=async()=>{
+const stopChat = async () => {
   // const { code, data } = await stopChatApi(activeSessionId.value);
   // if (code === 200) {
   //   Message.success("宸插仠姝�");
   //   queryNewSessionDetail(activeSessionId.value);
   // }
   isStopChat.value = true;
-  console.log('stopChat');
-  console.log(displayedText.value, 'displayedText');
-  console.log(sessionDetailList.value, 'sessionDetailList');
-  let inputText = sessionDetailList.value[sessionDetailList.value.length-2].content
+  console.log("stopChat");
+  console.log(displayedText.value, "displayedText");
+  console.log(sessionDetailList.value, "sessionDetailList");
+  let inputText = sessionDetailList.value[sessionDetailList.value.length - 2].content;
   // 鏁扮粍鍚堝苟
   let lastArr = [{
     content: inputText,
     role: "user"
-  },{
+  }, {
     content: displayedText.value,
     role: "assistant"
-  }]
-  sessionDetailList.value = sessionDetailList.value.splice(0, sessionDetailList.value.length-2).concat(lastArr);
-  console.log(sessionDetailList.value, 'sessionDetailList2');
-  console.log(chatObj, 'chatObj瀵硅薄');
+  }];
+  sessionDetailList.value = sessionDetailList.value.splice(0, sessionDetailList.value.length - 2).concat(lastArr);
+  console.log(sessionDetailList.value, "sessionDetailList2");
+  console.log(chatObj, "chatObj瀵硅薄");
   chatObj.message = chatObj.message.concat(lastArr);
-    // clearTimeout(timer!);
-    // timer = null;
+  // clearTimeout(timer!);
+  // timer = null;
   // const { code, data } = await addSessionApi(chatObj);
   // if (data) {
   //   //鍋滄瀹氭椂鍣�
@@ -534,7 +598,7 @@
   // }
 
 
-}
+};
 
 const queryNewSessionDetail = async (id) => {
   activeSessionId.value = id;
@@ -798,15 +862,17 @@
     }
 
     .chat_bottom {
-      display: flex;
-      align-items: center;
+      //display: flex;
+      //align-items: center;
       width: 78%;
       margin: 0 auto;
+      position: relative;
+
       .center-bottom {
-        // position: absolute;
-        // width: 90%;
-        // bottom: 20px;
-        // left: 5%;
+        //position: absolute;
+        //width: 100%;
+        //bottom: 20px;
+        //left: 5%;
         background: #fff;
         border: 1px solid #00000014;
         border-radius: 24px;
@@ -823,7 +889,7 @@
         .btn-send {
           position: absolute !important;
           right: 10px;
-          top: 110px;
+          top: 90px;
           z-index: 10;
         }
 
@@ -948,7 +1014,12 @@
   transition: all 0.1s ease;
   font-size: 12px;
 }
+
 .action:hover {
   background: var(--color-fill-3);
 }
+
+:deep(.arco-upload-list-item-operation) {
+  //display: none;
+}
 </style>

--
Gitblit v1.8.0