From ff0ae974a1c561eaf2915988dac63cd066af189f Mon Sep 17 00:00:00 2001
From: yinbangzhong <zhongbangyin@126.com>
Date: 星期四, 12 九月 2024 09:23:44 +0800
Subject: [PATCH] bug fix

---
 src/views/sessionManager/index.vue |  201 +++++++++++++++++++++++++++++++-------------------
 1 files changed, 124 insertions(+), 77 deletions(-)

diff --git a/src/views/sessionManager/index.vue b/src/views/sessionManager/index.vue
index 973d7fa..6dfc3d0 100644
--- a/src/views/sessionManager/index.vue
+++ b/src/views/sessionManager/index.vue
@@ -121,7 +121,7 @@
                   />
                 </template>
                 <template #content>
-                  <a-card v-if="isExistTip(sessionDetail.content)">
+                  <a-card v-if="isExistTip(sessionDetail.content)" style="padding: 10px">
                     <div
                       :class="{ chatItemAnswer: theme === 'light' }"
                       :style="{
@@ -160,10 +160,13 @@
                               "
                             >
                               <img
-                                style="width: 20px; height: 20px"
+                                style="width: 15px; height: 15px"
                                 :src="tipImage"
                               />
                             </a-tooltip>
+                            <span v-if="tipIndex == item.len - 1">
+                              {{ breakContent.substring(item.index + 5) }}
+                            </span>
                           </span>
                           <span v-else-if="tipIndex == item.len - 1">
                             {{
@@ -179,7 +182,7 @@
                               "
                             >
                               <img
-                                style="width: 20px; height: 20px"
+                                style="width: 15px; height: 15px"
                                 :src="tipImage"
                               />
                             </a-tooltip>
@@ -199,7 +202,7 @@
                               "
                             >
                               <img
-                                style="width: 20px; height: 20px"
+                                style="width: 15px; height: 15px"
                                 :src="tipImage"
                               />
                             </a-tooltip>
@@ -238,12 +241,9 @@
                     </ul>
                   </div> -->
                 </template>
-                <!-- <div>{{ sessionDetail.role === 'assistant' }}</div> -->
+
                 <template #actions>
-                  <!-- <div
-                    v-for="(item, leng) in messagenList.reference"
-                    :key="leng"
-                  > -->
+
                   <div>
                     <div>
                       <template
@@ -291,27 +291,24 @@
                   />
                 </template>
                 <template #content>
-                  <a-textarea
-                    readonly
-                    auto-size
-                    v-model="displayedText"
-                    :class="{ chatItemAnswer: theme === 'light' }"
-                    :style="{
-                      backgroundColor:
-                        theme === 'light' ? '#ffffff' : '#000000',
-                    }"
-                    style="border: none"
-                  >
-                  </a-textarea>
+                  <a-spin :loading="chartLoading" dot style="width: 100%">
+                    <a-textarea
+                      readonly
+                      auto-size
+                      v-model="displayedText"
+                      :class="{ chatItemAnswer: theme === 'light' }"
+                      :style="{
+                        backgroundColor:
+                          theme === 'light' ? '#ffffff' : '#000000',
+                      }"
+                      style="border: none"
+                    >
+                    </a-textarea>
+                  </a-spin>
                 </template>
 
                 <template #actions>
-                  <!-- <div class="icon-box">
-                    <div>
-                      <img :src="getIconByExtension('pdf')" alt="" />
-                    </div>
-                    <div class="icon-text"> 鏂囦欢绫诲瀷 </div>
-                  </div> -->
+
                   <div
                     class="action"
                     @click="stopChat"
@@ -327,24 +324,12 @@
                 </template>
               </a-comment>
             </div>
-            <!-- <div class="chartStart" v-if="isStart" @click="startChat"
-              >鍋滄鐢熸垚</div
-            >
-            <div class="chartStart v-else" @click="stopChat">閲嶆柊鐢熸垚</div> -->
+
           </a-scrollbar>
 
           <div class="chat_bottom">
             <div class="center-bottom">
-              <!-- <a-textarea
-              v-model="inputMsg"
-              @keydown.shift.enter="sendMessage"
-              style="height: 180px"
-              placeholder="杈撳叆鎮ㄦ兂浜嗚В鐨勫唴瀹癸紝Shift+Enter鍙戦��"
-              :max-length="500"
-              allow-clear
-              show-word-limit
-            >
-            </a-textarea> -->
+
               <a-textarea
                 v-model="inputMsg"
                 @keydown.shift.enter="handleShiftEnter"
@@ -378,13 +363,10 @@
                 <updataFile
                   ref="fileInput"
                   :sessionId="activeSessionId"
+                  :hide="hide_upload"
                   @selectFileCallback="selectFileCallback"
                 ></updataFile>
-                <!-- <uploadFile
-                  ref="fileInput"
-                  :sessionId="activeSessionId"
-                  @selectFileCallback="selectFileCallback"
-                ></uploadFile> -->
+
                 <a-button
                   :disabled="chatDis"
                   @click="sentClick"
@@ -479,10 +461,10 @@
       </a-col>
     </a-row>
     <a-modal title=" " v-model:visible="fileVisible" :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>
+      <excel v-if="documenttype == ('xlsx' || 'xls')" :previewSrc="previewSrc"></excel>
+      <Pdf v-if="documenttype == 'pdf'" :previewSrc="previewSrc"></Pdf>
+      <txt  v-if="documenttype == 'txt'" :previewSrc="previewSrc"></txt>
     </a-modal>
     <a-modal
       v-model:visible="visible"
@@ -543,6 +525,9 @@
     getSessionDetailsApi,
     sessionListApi,
     uploadWithoutKb,
+    uploadAndParse,
+    chatInfos,
+    chatRm,
   } from '@/api/session';
   import { getAuthorization } from '@/utils/auth';
   import { queryCanvasList } from '@/api/Agent';
@@ -557,7 +542,8 @@
 
   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 Pdf from '@/views/dmx/knowledgeLib/components/Pdf.vue';
+  import txt from '@/views/dmx/knowledgeLib/components/txt.vue';
   import { is } from 'immutable';
   import uploadFile from './components/uploadFile.vue';
 
@@ -574,6 +560,7 @@
   const modalObj = reactive({ add: false });
   const dialogId = ref('');
   const chatDis = ref(false);
+  const chartLoading = ref(false);
   const loading = ref(false);
   const agentType = ref('1');
   const agentTitle = ref('鏈懡鍚嶄細璇�');
@@ -581,13 +568,14 @@
   let from = reactive({
     name: '鏈懡鍚嶄細璇�',
   });
-  const isStopChat = ref(false);
+
   const currIndex = ref(0);
   const displayedText = ref(''); // 姝e湪鏄剧ず鐨勬枃瀛�
   let timer: number | null = null;
   const streamStr = ref('');
   const inputMsg = ref('');
   const activeSessionId = ref('');
+  const hide_upload=ref(2);
   const fieldNames = { value: 'id', label: 'name' };
   const dialogs = ref([]);
   const dialogObj = reactive({});
@@ -624,13 +612,16 @@
     if (errors) return;
     let chatData = {
       id: chatObj.id,
-      conversation_id: chatObj.id,
-      name: from.name,
+      dialog_id: chatObj.dialog_id,
+      conversation_desc: from.name,
     };
     const { code, data } = await addSessionApi(chatData);
     if (data) {
       Message.success('淇敼鎴愬姛');
       handleCancel();
+      if (data?.id) {
+        activeSessionId.value = data.id;
+      }
       queryNewSessionDetail(activeSessionId.value);
     }
   };
@@ -678,6 +669,12 @@
     if (isExistTip(message)) {
       if (role == 'assistant' && index) {
         let i = index / 2 - 1 > 0 ? index / 2 - 1 : 0;
+        if (data.length == 1) {
+          i = 0;
+        }
+        if (data.length == i) {
+          i = data.length-1;
+        }
         dataItem = data[i].doc_aggs;
       }
     } else {
@@ -690,6 +687,12 @@
   const getTipContent = (data, index): string => {
     let maxSimilarityContent = '';
     let i = index / 2 - 1 > 0 ? index / 2 - 1 : 0;
+    if (data.length == 1) {
+      i = 0;
+    }
+    if (data.length == i) {
+      i = data.length-1;
+    }
     let maxSimilarity = 0;
     data[i].chunks.forEach((chunk) => {
       if (chunk.similarity > maxSimilarity) {
@@ -702,7 +705,7 @@
 
   const clickHref = async (item) => {
     documenttype.value = item.doc_name.split('.').pop();
-    previewSrc.value = httpUrl + `/api/v1/document/get/${item.doc_id}`;
+    previewSrc.value = httpUrl + `/api/v1/document/get/${item.doc_id}`+"?t="+new Date().getTime();
     fileVisible.value = true;
   };
 
@@ -765,10 +768,29 @@
     // formRef.value.resetFields();
   };
 
-  const selectFileCallback = (data) => {
-    debugger;
-    console.log(data, 'selectFileCallback');
+  const selectFileCallback = (data,conversation_id) => {
     uploaditemList.value = [...uploaditemList.value, ...data];
+    activeSessionId.value = conversation_id;
+  };
+
+
+  //涓婁紶鎴愬姛瑙f瀽getinfo
+  const getInfo = async (id) => {
+    const { code, data } = await chatInfos({
+      doc_ids: activeSessionId.value,
+    });
+    if (code === 200) {
+      uploaditemList.value = data;
+    }
+  };
+  //鍒犻櫎涓婁紶鏂囨。
+  const deleteUpload = async (id) => {
+    const { code, data } = await chatRm({
+      doc_id: id,
+    });
+    if (code === 200) {
+      getInfo();
+    }
   };
 
   let onFileSelectedLoading = ref(false);
@@ -776,6 +798,7 @@
   const deleteFile = (item) => {
     console.log(uploaditemList.value);
     uploaditemList.value.splice(item.index, 1);
+    // EventBus.emit('queryAgent', item);
   };
 
   const { toClipboard } = useClipboard();
@@ -865,6 +888,7 @@
 
   // 鍙戦��
   const sentClick = () => {
+    displayedText.value="";
     sendMessage('click');
     uploaditemList.value = [];
   };
@@ -923,10 +947,14 @@
     }
   };
 
+  let message_stop = [];
+  let message_id = "";
   const startChat = async (valMsg) => {
     chatDis.value = true;
     loading.value = true;
     toStop = false;
+    displayedText.value = '';
+    chartLoading.value = true;
     sessionDetailList.value.push({
       content: valMsg,
       role: 'user',
@@ -955,6 +983,7 @@
     currIndex.value = 0;
     while (true) {
       if (toStop) {
+        message_stop.push(message_id);
         displayedText.value = '';
         setChatDataMeg(chatDataMeg);
         break;
@@ -966,9 +995,20 @@
         try {
           const val = JSON.parse(value?.data || '');
           const d = val?.data;
+          if (message_id != d.message_id) {
+            message_id = d.message_id;
+            message_stop = [];
+          } else {
+            //message_stop涓煡鎵緈essage_id
+            const index = message_stop.findIndex(item => item === message_id);
+            if (index > -1) {
+              break;
+            }
+          }
           if (typeof d !== 'boolean') {
             // console.info("data:", d);
             streamStr.value = d.content;
+            chartLoading.value = false;
             startDisplayStr();
           }
         } catch (e) {
@@ -977,12 +1017,9 @@
         if (done) {
           console.info('done');
           displayedText.value = '';
-          if (isStopChat.value) {
-            setChatDataMeg(chatDataMeg);
-          } else {
-            queryNewSessionDetail(activeSessionId.value);
-            EventBus.emit('queryAppUsageList');
-          }
+          chartLoading.value = false;
+          queryNewSessionDetail(activeSessionId.value);
+          EventBus.emit('queryAppUsageList');
           break;
         }
       }
@@ -993,14 +1030,8 @@
   };
 
   const stopChat = async () => {
-    // const { code, data } = await stopChatApi(activeSessionId.value);
-    // if (code === 200) {
-    //   Message.success("宸插仠姝�");
-    //   queryNewSessionDetail(activeSessionId.value);
-    // }
     loading.value = false;
     chatDis.value = false;
-    isStopChat.value = true;
     toStop = true;
     console.log('stopChat');
     console.log(displayedText.value, 'displayedText');
@@ -1023,7 +1054,9 @@
       .concat(lastArr);
     console.log(sessionDetailList.value, 'sessionDetailList2');
     console.log(chatObj, 'chatObj瀵硅薄');
-    chatObj.message = chatObj.message.concat(lastArr);
+    if (chatObj?.message) {
+      chatObj.message = chatObj.message.concat(lastArr);
+    }
     Object.assign(chatDataMeg, {
       id: chatObj.id,
       conversation_id: chatObj.id,
@@ -1053,11 +1086,12 @@
       agentTitle.value = data.name;
       from.name = data.name;
       refreshScroll(); //鍒锋柊婊氬姩鏉′綅缃�
-      isStopChat.value = false;
     }
   };
 
   const changeAgentType = (val, session) => {
+    hide_upload.value = hide_upload.value+1;
+    uploaditemList.value=[];
     agentType.value = val;
     console.log(val, 'val');
   };
@@ -1068,6 +1102,7 @@
     from.name = session.name;
     const { code, data } = await getSessionDetailsApi(session.id);
     if (code === 200) {
+      Object.assign(chatObj, data);
       sessionDetailList.value = data.message;
       messagenList.value = data;
       refreshScroll(); //鍒锋柊婊氬姩鏉′綅缃�
@@ -1119,12 +1154,16 @@
     activeSessionId.value = '';
   });
   onMounted(() => {
+    document.getElementsByTagName;
     let container = document.getElementById('container');
     container.addEventListener('click', () => {
-      fileInput.value.cancel();
+      // fileInput.value.cancel();
     });
     EventBus.on('newChat', () => {
+      uploaditemList.value = [];
       agentType.value = '1';
+      chatObj = {};
+      hide_upload.value = hide_upload.value+1;
       // createSession('');
       activeSessionId.value = '';
       sessionDetailList.value = [
@@ -1227,11 +1266,11 @@
         }
       }
     }
-    .uploadFileDis {
-      :deep(.arco-upload-list-type-text) {
-        display: none;
-      }
-    }
+    // .uploadFileDis {
+    //   :deep(.arco-upload-list-type-text) {
+    //     display: none;
+    //   }
+    // }
     .prompt {
       ul {
         margin: 0;
@@ -1387,6 +1426,11 @@
         }
       }
     }
+    .uploadFileDis {
+      :deep(.arco-upload-list-type-text) {
+        display: none;
+      }
+    }
 
     .chat-item {
       padding: 10px 0;
@@ -1428,6 +1472,9 @@
           margin-left: 10px;
         }
       }
+      :deep(.arco-spin-loading .arco-spin-mask-icon) {
+        left: 10%;
+      }
     }
 
     .right {

--
Gitblit v1.8.0