From 8fc16c6f29bd098598a03e8306788d9b3d2a60ba Mon Sep 17 00:00:00 2001
From: yinbangzhong <zhongbangyin@126.com>
Date: 星期二, 27 八月 2024 16:04:41 +0800
Subject: [PATCH] agent
---
src/views/sessionManager/index.vue | 270 ++++++++++++++++++++++++++++++++++++++++-------------
1 files changed, 202 insertions(+), 68 deletions(-)
diff --git a/src/views/sessionManager/index.vue b/src/views/sessionManager/index.vue
index 94c0d2a..e0adb16 100644
--- a/src/views/sessionManager/index.vue
+++ b/src/views/sessionManager/index.vue
@@ -78,53 +78,155 @@
/>
</template>
<template #content>
- <div :class="{ chartUserText: theme === 'light' }"
- >{{ sessionDetail.content }}
+ <div :class="{ chartUserText: theme === 'light' }">
+ {{ sessionDetail.content }}
+ <!-- <a-input
+ :style="{ width: '100%' }"
+ v-model="sessionDetail.content"
+ v-if="isEdit"
+ />
+
+ <div v-else>
+ {{ sessionDetail.content }}
+ </div> -->
</div>
+ <!-- <div v-if="!isEdit">
+ <span
+ class="action"
+ v-if="index != 0"
+ @click="copy(sessionDetail.content)"
+ >
+ <icon-copy /> 澶嶅埗
+ </span>
+ <span class="action" @click="edit()">
+ <icon-pen /> 缂栬緫
+ </span>
+ </div>
+ <a-space v-else>
+ <a-button type="outline" size="mini" @click="cancelEdit(1)"
+ >鍙栨秷</a-button
+ >
+ <a-button type="primary" size="mini" @click="cancelEdit(2)"
+ >纭畾</a-button
+ >
+ </a-space> -->
</template>
</a-comment>
<a-comment v-else-if="sessionDetail.role === 'assistant'">
<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"
+ v-for="(breakContent, breakIndex) in breakLine(
+ sessionDetail.content
+ )"
>
- <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
+ :class="{ chatItemAnswer: theme === 'light' }"
+ :style="{
+ backgroundColor:
+ theme === 'light' ? '#ffffff' : '#000000',
+ }"
+ style="border: none"
+ v-if="isExistTip(breakContent)"
+ >
+ <div
+ :class="{ chatItemAnswer: theme === 'light' }"
+ :style="{
+ backgroundColor:
+ theme === 'light' ? '#ffffff' : '#000000',
+ }"
+ style="border: none"
+ v-for="(item, tipIndex) in tipMatch(breakContent)"
+ >
+ <span v-if="tipIndex == 0">
+ {{ breakContent.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-if="tipIndex == item.len - 1">
+ {{
+ breakContent.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>
+ {{ breakContent.substring(item.index + 5) }}
+ </span>
+ <span v-else>
+ {{
+ breakContent.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>
+ </div>
+ <div v-else>
+ {{ breakContent }}
+ </div>
</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 v-else>
+ <a-textarea
+ readonly
+ auto-size
+ :default-value="chartText(sessionDetail.content)"
+ :class="{ chatItemAnswer: theme === 'light' }"
+ :style="{
+ backgroundColor:
+ theme === 'light' ? '#ffffff' : '#000000',
+ }"
+ style="border: none"
+ >
+ </a-textarea>
+ <!-- <div v-html="chartText(sessionDetail.content)">
+
+ </div> -->
</a-card>
</template>
<!-- <div>{{ sessionDetail.role === 'assistant' }}</div> -->
@@ -168,13 +270,14 @@
>
<icon-refresh /> 閲嶆柊鐢熸垚
</span>
+ <!-- <span class="action"><icon-to-bottom />涓嬭浇 </span> -->
</template>
</a-comment>
<a-comment v-else-if="sessionDetail.role === 'last'">
<template #avatar>
<img
class="icon-user-jpg"
- src="../../assets/images/icon-chart.png"
+ src="../../assets/images/icon-picture.png"
alt="鏈湴鍥剧墖"
/>
</template>
@@ -389,7 +492,7 @@
</div>
</template>
<script setup lang="ts">
-import { useAppStore, userModelState, useUserStore } from "@/store";
+ import { useAppStore, userModelState, useUserStore } from '@/store';
import {
computed,
nextTick,
@@ -419,20 +522,21 @@
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';
+ import { is } from 'immutable';
// const url = ref('../../assets/session/PDF.png');
@@ -481,8 +585,7 @@
let documenttype = ref('docx');
let previewSrc = ref('');
-
-const modelStore = userModelState();
+ const modelStore = userModelState();
const httpUrl = modelStore.hrefUrl;
const rules = {
@@ -509,25 +612,44 @@
}
};
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[] => {
+ const breakLine = (message: string): string[] => {
+ //鎸塡n鍒嗗壊瀛楃涓�
+ let arr = message.split('\n');
+ return arr;
+ };
+
+ const chartText = (message: string): string => {
+ //鍘婚櫎鎵�鏈夌殑#鍜�**
+ let arr = message.replace(/\*\*|\#\#\#/g, '');
+ return arr;
+ };
+
+ const tipMatch = (msg: string): 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 });
+ let preTip = 0;
+ let matches = msg.match(/##([0-9]+)\$\$/g);
+ matches?.map((item) => {
+ let i = msg.indexOf(item);
+ indexs.push({
+ index: i,
+ item: item,
+ preIndex: preTip,
+ len: matches.length,
+ });
preTip = i;
});
return indexs;
- }
+ };
const getTxt = (data, role, message, index) => {
if (isExistTip(message)) {
@@ -543,16 +665,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 +744,7 @@
const selectFileCallback = (data) => {
console.log(data, 'selectFileCallback');
- uploaditemList.value = [
- ...uploaditemList.value,
- ...data
- ];
+ uploaditemList.value = [...uploaditemList.value, ...data];
};
let onFileSelectedLoading = ref(false);
@@ -639,6 +757,19 @@
const { toClipboard } = useClipboard();
const copy = async (text) => {
await toClipboard(text); //鍙傛暟涓鸿澶嶅埗鐨勬枃鏈�
+ };
+
+ const isEdit = ref(false);
+ const edit = () => {
+ isEdit.value = !isEdit.value;
+ };
+ const cancelEdit = (val) => {
+ if (val == 1) {
+ isEdit.value = !isEdit.value;
+ } else {
+ //缂栬緫淇濆瓨
+ isEdit.value = !isEdit.value;
+ }
};
const DialogList = async () => {
@@ -711,6 +842,7 @@
// 鍙戦��
const sentClick = () => {
sendMessage('click');
+ uploaditemList.value = [];
};
// 閲嶆柊鐢熸垚
const reGenerate = () => {
@@ -744,7 +876,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);
--
Gitblit v1.8.0