zhangxiao
2024-08-26 a4ca216c5b215f323b3c439b2f445dad72bbfce1
src/views/sessionManager/index.vue
@@ -87,42 +87,65 @@
                <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 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)"
                    <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
                          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" />
                        {{
                          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">
                  <a-card v-else>
                    <div
                      :class="{ chatItemAnswer: theme === 'light' }"
                      :style="{
                        backgroundColor:
                          theme === 'light' ? '#ffffff' : '#000000',
                      }"
                      style="border: none"
                    >
                      {{ sessionDetail.content }}
                    </div>
                  </a-card>
@@ -174,7 +197,7 @@
                <template #avatar>
                  <img
                    class="icon-user-jpg"
                    src="../../assets/images/icon-chart.png"
                    src="../../assets/images/icon-picture.png"
                    alt="本地图片"
                  />
                </template>
@@ -389,7 +412,7 @@
  </div>
</template>
<script setup lang="ts">
import { useAppStore, userModelState, useUserStore } from "@/store";
  import { useAppStore, userModelState, useUserStore } from '@/store';
  import {
    computed,
    nextTick,
@@ -419,20 +442,20 @@
    sessionListApi,
    uploadWithoutKb,
  } from '@/api/session';
import { getAuthorization } from "@/utils/auth";
import { queryCanvasList } from "@/api/Agent";
import { getAgentSessionDetailsApi } from "@/api/agentSession";
import useClipboard from "vue-clipboard3";
import pdfImg1 from "@/assets/session/PDF.png";
import pdfImg2 from "@/assets/session/wps-write.png";
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 { getAuthorization } from '@/utils/auth';
  import { queryCanvasList } from '@/api/Agent';
  import { getAgentSessionDetailsApi } from '@/api/agentSession';
  import useClipboard from 'vue-clipboard3';
  import pdfImg1 from '@/assets/session/PDF.png';
  import pdfImg2 from '@/assets/session/wps-write.png';
  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";
  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');
@@ -481,8 +504,7 @@
  let documenttype = ref('docx');
  let previewSrc = ref('');
const modelStore = userModelState();
  const modelStore = userModelState();
  const httpUrl = modelStore.hrefUrl;
  const rules = {
@@ -509,25 +531,25 @@
    }
  };
  let dataItem = [];
  const isExistTip=(message:string):boolean=>{
  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;
    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)) {
@@ -543,16 +565,15 @@
  };
  const getTipContent = (data, index): string => {
    let maxSimilarityContent = "";
    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;
        }
      if (chunk.similarity > maxSimilarity) {
        maxSimilarity = chunk.similarity;
        maxSimilarityContent = chunk.content_with_weight;
      }
    );
    });
    return maxSimilarityContent;
  };
@@ -623,10 +644,7 @@
  const selectFileCallback = (data) => {
    console.log(data, 'selectFileCallback');
    uploaditemList.value = [
      ...uploaditemList.value,
      ...data
    ];
    uploaditemList.value = [...uploaditemList.value, ...data];
  };
  let onFileSelectedLoading = ref(false);
@@ -744,7 +762,9 @@
            if (res.code == 200) {
              // console.log(res.data.conversation_id);
              activeSessionId.value = res.data?.conversation_id;
              const { code, data } = await getSessionDetailsApi(res.data?.conversation_id);
              const { code, data } = await getSessionDetailsApi(
                res.data?.conversation_id
              );
              if (code === 200) {
                console.log(data, '新建会话详情');
                Object.assign(chatObj, data);