From dfb7a8a63e87390dc095e81b04f0404697246d9f Mon Sep 17 00:00:00 2001
From: 张涛 <“2538313560@qq.com”>
Date: 星期五, 22 十一月 2024 20:20:56 +0800
Subject: [PATCH] 增加跳转的接口
---
src/views/sessionManager/index.vue | 191 ++++++++++++++++++++++++++++++-----------------
1 files changed, 120 insertions(+), 71 deletions(-)
diff --git a/src/views/sessionManager/index.vue b/src/views/sessionManager/index.vue
index 4845075..f86fb75 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,8 +768,29 @@
// formRef.value.resetFields();
};
- const selectFileCallback = (data) => {
+ 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);
@@ -774,6 +798,7 @@
const deleteFile = (item) => {
console.log(uploaditemList.value);
uploaditemList.value.splice(item.index, 1);
+ // EventBus.emit('queryAgent', item);
};
const { toClipboard } = useClipboard();
@@ -863,6 +888,7 @@
// 鍙戦��
const sentClick = () => {
+ displayedText.value="";
sendMessage('click');
uploaditemList.value = [];
};
@@ -921,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',
@@ -953,8 +983,9 @@
currIndex.value = 0;
while (true) {
if (toStop) {
- displayedText.value = '';
+ message_stop.push(message_id);
setChatDataMeg(chatDataMeg);
+ //displayedText.value = '';
break;
}
const x = await reader?.read();
@@ -964,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) {
@@ -975,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;
}
}
@@ -991,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');
@@ -1021,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,
@@ -1051,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');
};
@@ -1066,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(); //鍒锋柊婊氬姩鏉′綅缃�
@@ -1117,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 = [
@@ -1385,6 +1426,11 @@
}
}
}
+ .uploadFileDis {
+ :deep(.arco-upload-list-type-text) {
+ display: none;
+ }
+ }
.chat-item {
padding: 10px 0;
@@ -1426,6 +1472,9 @@
margin-left: 10px;
}
}
+ :deep(.arco-spin-loading .arco-spin-mask-icon) {
+ left: 10%;
+ }
}
.right {
--
Gitblit v1.8.0