From e7a44b64dceb984b0bb243bfdcae73edb099e5f1 Mon Sep 17 00:00:00 2001
From: zhangxiao <898441624@qq.com>
Date: 星期一, 26 八月 2024 21:04:49 +0800
Subject: [PATCH] agent

---
 src/views/sessionManager/index.vue |  160 +++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 125 insertions(+), 35 deletions(-)

diff --git a/src/views/sessionManager/index.vue b/src/views/sessionManager/index.vue
index 96bc8bb..2d252ee 100644
--- a/src/views/sessionManager/index.vue
+++ b/src/views/sessionManager/index.vue
@@ -87,30 +87,68 @@
                 <template #avatar>
                   <img
                     class="icon-user-jpg"
-                    src="../../assets/images/icon-chart.png"
+                    src="../../assets/images/icon-picture.png"
                     alt="鏈湴鍥剧墖"
                   />
                 </template>
                 <template #content>
-                  <!--                  <a-card :class="{ chatItemAnswer: theme === 'light' }">-->
-                  <!--                    <div-->
-                  <!--                      :class="{ light: theme === 'light' }"-->
-                  <!--                      v-html="sessionDetail.content.replace(/\n/g, '<br/>')"-->
-                  <!--                    >-->
-                  <!--                    </div>-->
-                  <!--                  </a-card>-->
-                  <a-textarea
-                    readonly
-                    auto-size
-                    v-model="sessionDetail.content"
-                    :class="{ chatItemAnswer: theme === 'light' }"
-                    :style="{
-                      backgroundColor:
-                        theme === 'light' ? '#ffffff' : '#000000',
-                    }"
-                    style="border: none"
-                  >
-                  </a-textarea>
+                  <a-card v-if="isExistTip(sessionDetail.content)">
+                    <div
+                      :class="{ chatItemAnswer: theme === 'light' }"
+                      :style="{
+                        backgroundColor:
+                          theme === 'light' ? '#ffffff' : '#000000',
+                      }"
+                      style="border: none; display: inline"
+                      v-for="(item, tipIndex) in tipMatch(sessionDetail)"
+                    >
+                      <span v-if="tipIndex == 0">
+                        {{ sessionDetail.content.substring(0, item.index) }}
+                        <a-tooltip
+                          background-color="#3491FA"
+                          :content="
+                            getTipContent(messagenList.reference, index)
+                          "
+                        >
+                          <img
+                            style="width: 20px; height: 20px"
+                            :src="tipImage"
+                          />
+                        </a-tooltip>
+                      </span>
+                      <span v-else>
+                        {{
+                          sessionDetail.content.substring(
+                            item.preIndex + item.item.length,
+                            item.index
+                          )
+                        }}
+                        <a-tooltip
+                          background-color="#3491FA"
+                          :content="
+                            getTipContent(messagenList.reference, index)
+                          "
+                        >
+                          <img
+                            style="width: 20px; height: 20px"
+                            :src="tipImage"
+                          />
+                        </a-tooltip>
+                      </span>
+                    </div>
+                  </a-card>
+                  <a-card v-else>
+                    <div
+                      :class="{ chatItemAnswer: theme === 'light' }"
+                      :style="{
+                        backgroundColor:
+                          theme === 'light' ? '#ffffff' : '#000000',
+                      }"
+                      style="border: none"
+                    >
+                      {{ sessionDetail.content }}
+                    </div>
+                  </a-card>
                 </template>
                 <!-- <div>{{ sessionDetail.role === 'assistant' }}</div> -->
                 <template #actions>
@@ -159,7 +197,7 @@
                 <template #avatar>
                   <img
                     class="icon-user-jpg"
-                    src="../../assets/images/icon-chart.png"
+                    src="../../assets/images/icon-picture.png"
                     alt="鏈湴鍥剧墖"
                   />
                 </template>
@@ -340,6 +378,12 @@
         </div>
       </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>
+    </a-modal>
     <a-modal
       v-model:visible="visible"
       title="淇敼鍚嶇О"
@@ -368,7 +412,7 @@
   </div>
 </template>
 <script setup lang="ts">
-  import { useAppStore, useUserStore } from '@/store';
+  import { useAppStore, userModelState, useUserStore } from '@/store';
   import {
     computed,
     nextTick,
@@ -407,6 +451,11 @@
   import pdfImg3 from '@/assets/session/execl.png';
   import pdfImg4 from '@/assets/session/icon-txt.png';
   import pdfImg5 from '@/assets/session/txt.png';
+  import tipImage from '@/assets/session/tip.png';
+
+  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';
 
   // const url = ref('../../assets/session/PDF.png');
 
@@ -450,7 +499,13 @@
   const fileInput = ref(null);
   const chatDataMeg = reactive({});
   const visible = ref(false);
+  const fileVisible = ref(false);
   let toStop = false;
+  let documenttype = ref('docx');
+  let previewSrc = ref('');
+
+  const modelStore = userModelState();
+  const httpUrl = modelStore.hrefUrl;
 
   const rules = {
     name: [
@@ -476,8 +531,28 @@
     }
   };
   let dataItem = [];
-  const getTxt = (data, role, message, index) => {
+  const isExistTip = (message: string): boolean => {
     if (/##[0-9]\$\$/.test(message)) {
+      return true;
+    } else {
+      return false;
+    }
+  };
+
+  const tipMatch = (session: any): any[] => {
+    //match session.content涓殑##[0-9]$$鐨勭储寮�
+    let indexs: any[] = [];
+    let preTip = 0;
+    session.content.match(/##([0-9]+)\$\$/g)?.map((item) => {
+      let i = session.content.indexOf(item);
+      indexs.push({ index: i, item: item, preIndex: preTip });
+      preTip = i;
+    });
+    return indexs;
+  };
+
+  const getTxt = (data, role, message, index) => {
+    if (isExistTip(message)) {
       if (role == 'assistant' && index) {
         let i = index / 2 - 1 > 0 ? index / 2 - 1 : 0;
         dataItem = data[i].doc_aggs;
@@ -489,13 +564,23 @@
     return dataItem;
   };
 
-  const clickHref = (item) => {
-    // return Message.warning('鏆傛棤娉曟煡鐪�');
-    // window.open(`/api/v1/document/get/${item.doc_id}`, '_blank');
-    downloadFile({
-      url: `/api/v1/document/get/${item.doc_id}`,
-      filename: item.doc_name,
+  const getTipContent = (data, index): string => {
+    let maxSimilarityContent = '';
+    let i = index / 2 - 1 > 0 ? index / 2 - 1 : 0;
+    let maxSimilarity = 0;
+    data[i].chunks.forEach((chunk) => {
+      if (chunk.similarity > maxSimilarity) {
+        maxSimilarity = chunk.similarity;
+        maxSimilarityContent = chunk.content_with_weight;
+      }
     });
+    return maxSimilarityContent;
+  };
+
+  const clickHref = async (item) => {
+    documenttype.value = item.doc_name.split('.').pop();
+    previewSrc.value = httpUrl + `/api/v1/document/get/${item.doc_id}`;
+    fileVisible.value = true;
   };
 
   const downloadFile = ({
@@ -559,7 +644,7 @@
 
   const selectFileCallback = (data) => {
     console.log(data, 'selectFileCallback');
-    uploaditemList.value = data;
+    uploaditemList.value = [...uploaditemList.value, ...data];
   };
 
   let onFileSelectedLoading = ref(false);
@@ -644,6 +729,7 @@
   // 鍙戦��
   const sentClick = () => {
     sendMessage('click');
+    uploaditemList.value = [];
   };
   // 閲嶆柊鐢熸垚
   const reGenerate = () => {
@@ -669,7 +755,6 @@
             //鏂板缓浼氳瘽
             // 濡傛灉鏈変細璇漣d
             console.log(inputMsg.value, '鏂板缓浼氳瘽鍚嶇О');
-
             const res = await addSessionApi({
               dialog_id: '',
               conversation_desc: inputMsg.value,
@@ -678,9 +763,15 @@
             if (res.code == 200) {
               // console.log(res.data.conversation_id);
               activeSessionId.value = res.data?.conversation_id;
-              startChat(inputMsg.value);
-              inputMsg.value = '';
-              // queryNewSessionDetail(res.data?.conversation_id);
+              const { code, data } = await getSessionDetailsApi(
+                res.data?.conversation_id
+              );
+              if (code === 200) {
+                console.log(data, '鏂板缓浼氳瘽璇︽儏');
+                Object.assign(chatObj, data);
+                startChat(inputMsg.value);
+                inputMsg.value = '';
+              }
             } else {
               Message.error('鍒涘缓浼氳瘽澶辫触锛岃閲嶈瘯');
             }
@@ -793,7 +884,6 @@
     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);

--
Gitblit v1.8.0