|
@@ -121,7 +121,7 @@
|
|
|
/>
|
|
/>
|
|
|
</template>
|
|
</template>
|
|
|
<template #content>
|
|
<template #content>
|
|
|
- <a-card v-if="isExistTip(sessionDetail.content)">
|
|
|
|
|
|
|
+ <a-card v-if="isExistTip(sessionDetail.content)" style="padding: 10px">
|
|
|
<div
|
|
<div
|
|
|
:class="{ chatItemAnswer: theme === 'light' }"
|
|
:class="{ chatItemAnswer: theme === 'light' }"
|
|
|
:style="{
|
|
:style="{
|
|
@@ -160,10 +160,13 @@
|
|
|
"
|
|
"
|
|
|
>
|
|
>
|
|
|
<img
|
|
<img
|
|
|
- style="width: 20px; height: 20px"
|
|
|
|
|
|
|
+ style="width: 15px; height: 15px"
|
|
|
:src="tipImage"
|
|
:src="tipImage"
|
|
|
/>
|
|
/>
|
|
|
</a-tooltip>
|
|
</a-tooltip>
|
|
|
|
|
+ <span v-if="tipIndex == item.len - 1">
|
|
|
|
|
+ {{ breakContent.substring(item.index + 5) }}
|
|
|
|
|
+ </span>
|
|
|
</span>
|
|
</span>
|
|
|
<span v-else-if="tipIndex == item.len - 1">
|
|
<span v-else-if="tipIndex == item.len - 1">
|
|
|
{{
|
|
{{
|
|
@@ -179,7 +182,7 @@
|
|
|
"
|
|
"
|
|
|
>
|
|
>
|
|
|
<img
|
|
<img
|
|
|
- style="width: 20px; height: 20px"
|
|
|
|
|
|
|
+ style="width: 15px; height: 15px"
|
|
|
:src="tipImage"
|
|
:src="tipImage"
|
|
|
/>
|
|
/>
|
|
|
</a-tooltip>
|
|
</a-tooltip>
|
|
@@ -199,7 +202,7 @@
|
|
|
"
|
|
"
|
|
|
>
|
|
>
|
|
|
<img
|
|
<img
|
|
|
- style="width: 20px; height: 20px"
|
|
|
|
|
|
|
+ style="width: 15px; height: 15px"
|
|
|
:src="tipImage"
|
|
:src="tipImage"
|
|
|
/>
|
|
/>
|
|
|
</a-tooltip>
|
|
</a-tooltip>
|
|
@@ -238,12 +241,9 @@
|
|
|
</ul>
|
|
</ul>
|
|
|
</div> -->
|
|
</div> -->
|
|
|
</template>
|
|
</template>
|
|
|
- <!-- <div>{{ sessionDetail.role === 'assistant' }}</div> -->
|
|
|
|
|
|
|
+
|
|
|
<template #actions>
|
|
<template #actions>
|
|
|
- <!-- <div
|
|
|
|
|
- v-for="(item, leng) in messagenList.reference"
|
|
|
|
|
- :key="leng"
|
|
|
|
|
- > -->
|
|
|
|
|
|
|
+
|
|
|
<div>
|
|
<div>
|
|
|
<div>
|
|
<div>
|
|
|
<template
|
|
<template
|
|
@@ -308,12 +308,7 @@
|
|
|
</template>
|
|
</template>
|
|
|
|
|
|
|
|
<template #actions>
|
|
<template #actions>
|
|
|
- <!-- <div class="icon-box">
|
|
|
|
|
- <div>
|
|
|
|
|
- <img :src="getIconByExtension('pdf')" alt="" />
|
|
|
|
|
- </div>
|
|
|
|
|
- <div class="icon-text"> 文件类型 </div>
|
|
|
|
|
- </div> -->
|
|
|
|
|
|
|
+
|
|
|
<div
|
|
<div
|
|
|
class="action"
|
|
class="action"
|
|
|
@click="stopChat"
|
|
@click="stopChat"
|
|
@@ -329,24 +324,12 @@
|
|
|
</template>
|
|
</template>
|
|
|
</a-comment>
|
|
</a-comment>
|
|
|
</div>
|
|
</div>
|
|
|
- <!-- <div class="chartStart" v-if="isStart" @click="startChat"
|
|
|
|
|
- >停止生成</div
|
|
|
|
|
- >
|
|
|
|
|
- <div class="chartStart v-else" @click="stopChat">重新生成</div> -->
|
|
|
|
|
|
|
+
|
|
|
</a-scrollbar>
|
|
</a-scrollbar>
|
|
|
|
|
|
|
|
<div class="chat_bottom">
|
|
<div class="chat_bottom">
|
|
|
<div class="center-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
|
|
<a-textarea
|
|
|
v-model="inputMsg"
|
|
v-model="inputMsg"
|
|
|
@keydown.shift.enter="handleShiftEnter"
|
|
@keydown.shift.enter="handleShiftEnter"
|
|
@@ -382,12 +365,6 @@
|
|
|
:sessionId="activeSessionId"
|
|
:sessionId="activeSessionId"
|
|
|
@selectFileCallback="selectFileCallback"
|
|
@selectFileCallback="selectFileCallback"
|
|
|
></updataFile>
|
|
></updataFile>
|
|
|
- <!-- <uploadFile
|
|
|
|
|
- ref="fileInput"
|
|
|
|
|
- :handleRemove="handleRemove"
|
|
|
|
|
- :typeXLse="false"
|
|
|
|
|
- @selectFileCallback="selectFileCallback"
|
|
|
|
|
- ></uploadFile> -->
|
|
|
|
|
|
|
|
|
|
<a-button
|
|
<a-button
|
|
|
:disabled="chatDis"
|
|
:disabled="chatDis"
|
|
@@ -483,11 +460,10 @@
|
|
|
</a-col>
|
|
</a-col>
|
|
|
</a-row>
|
|
</a-row>
|
|
|
<a-modal title=" " v-model:visible="fileVisible" :footer="false" fullscreen>
|
|
<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>
|
|
<docx v-if="documenttype == 'docx'" :previewSrc="previewSrc"></docx>
|
|
|
- <excel v-if="documenttype == 'xlsx'" :previewSrc="previewSrc"></excel>
|
|
|
|
|
|
|
+ <excel v-if="documenttype == ('xlsx' || 'xls')" :previewSrc="previewSrc"></excel>
|
|
|
<Pdf v-if="documenttype == 'pdf'" :previewSrc="previewSrc"></Pdf>
|
|
<Pdf v-if="documenttype == 'pdf'" :previewSrc="previewSrc"></Pdf>
|
|
|
- <txt v-if="documenttype == 'txt'" :previewSrc="previewSrc"></txt>
|
|
|
|
|
|
|
+ <txt v-if="documenttype == 'txt'" :previewSrc="previewSrc"></txt>
|
|
|
</a-modal>
|
|
</a-modal>
|
|
|
<a-modal
|
|
<a-modal
|
|
|
v-model:visible="visible"
|
|
v-model:visible="visible"
|
|
@@ -591,7 +567,7 @@
|
|
|
let from = reactive({
|
|
let from = reactive({
|
|
|
name: '未命名会话',
|
|
name: '未命名会话',
|
|
|
});
|
|
});
|
|
|
- const isStopChat = ref(false);
|
|
|
|
|
|
|
+
|
|
|
const currIndex = ref(0);
|
|
const currIndex = ref(0);
|
|
|
const displayedText = ref(''); // 正在显示的文字
|
|
const displayedText = ref(''); // 正在显示的文字
|
|
|
let timer: number | null = null;
|
|
let timer: number | null = null;
|
|
@@ -712,7 +688,7 @@
|
|
|
|
|
|
|
|
const clickHref = async (item) => {
|
|
const clickHref = async (item) => {
|
|
|
documenttype.value = item.doc_name.split('.').pop();
|
|
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;
|
|
fileVisible.value = true;
|
|
|
};
|
|
};
|
|
|
|
|
|
|
@@ -780,53 +756,6 @@
|
|
|
activeSessionId.value = conversation_id;
|
|
activeSessionId.value = conversation_id;
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
- //上传
|
|
|
|
|
- // const selectFileCallback = async (resData, file) => {
|
|
|
|
|
- // console.log(111);
|
|
|
|
|
- // try {
|
|
|
|
|
- // const formData = new FormData();
|
|
|
|
|
- // uploaditemList.value = resData;
|
|
|
|
|
- // uploaditemList.value.map((item) => {
|
|
|
|
|
- // if (item.name == file[0].file.name) {
|
|
|
|
|
- // item.onFileSelectedLoading = true;
|
|
|
|
|
- // item.textName = '上传中';
|
|
|
|
|
- // }
|
|
|
|
|
- // return item;
|
|
|
|
|
- // });
|
|
|
|
|
- // debugger;
|
|
|
|
|
- // if (!activeSessionId.value) {
|
|
|
|
|
- // await createSession(resData);
|
|
|
|
|
- // }
|
|
|
|
|
-
|
|
|
|
|
- // // onFileSelectedLoading.value = true;
|
|
|
|
|
- // // textName.value = '上传中';
|
|
|
|
|
-
|
|
|
|
|
- // formData.append('files', file[0].file);
|
|
|
|
|
- // formData.append('conversation_id', activeSessionId.value);
|
|
|
|
|
-
|
|
|
|
|
- // console.log(formData, 'formData');
|
|
|
|
|
- // const { data, code } = await uploadAndParse(formData);
|
|
|
|
|
- // if (code === 200) {
|
|
|
|
|
- // uploaditemList.value.map((item: any) => {
|
|
|
|
|
- // item.onFileSelectedLoading = false;
|
|
|
|
|
- // item.textName = '上传成功';
|
|
|
|
|
- // return item;
|
|
|
|
|
- // });
|
|
|
|
|
- // getInfo(data);
|
|
|
|
|
- // // onFileSelectedLoading.value = false;
|
|
|
|
|
- // // textName.value = '上传成功';
|
|
|
|
|
- // }
|
|
|
|
|
- // } catch (err) {
|
|
|
|
|
- // uploaditemList.value.map((item: any) => {
|
|
|
|
|
- // item.onFileSelectedLoading = false;
|
|
|
|
|
- // item.textName = '上传失败';
|
|
|
|
|
- // return item;
|
|
|
|
|
- // });
|
|
|
|
|
- // // onFileSelectedLoading.value = false;
|
|
|
|
|
- // // textName.value = '上传失败';
|
|
|
|
|
- // Message.error('上传失败');
|
|
|
|
|
- // }
|
|
|
|
|
- // };
|
|
|
|
|
|
|
|
|
|
//上传成功解析getinfo
|
|
//上传成功解析getinfo
|
|
|
const getInfo = async (id) => {
|
|
const getInfo = async (id) => {
|
|
@@ -942,6 +871,7 @@
|
|
|
|
|
|
|
|
// 发送
|
|
// 发送
|
|
|
const sentClick = () => {
|
|
const sentClick = () => {
|
|
|
|
|
+ displayedText.value="";
|
|
|
sendMessage('click');
|
|
sendMessage('click');
|
|
|
uploaditemList.value = [];
|
|
uploaditemList.value = [];
|
|
|
};
|
|
};
|
|
@@ -1000,11 +930,14 @@
|
|
|
}
|
|
}
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
|
|
+ let message_stop = [];
|
|
|
|
|
+ let message_id = "";
|
|
|
const startChat = async (valMsg) => {
|
|
const startChat = async (valMsg) => {
|
|
|
chatDis.value = true;
|
|
chatDis.value = true;
|
|
|
loading.value = true;
|
|
loading.value = true;
|
|
|
- chartLoading.value = true;
|
|
|
|
|
toStop = false;
|
|
toStop = false;
|
|
|
|
|
+ displayedText.value = '';
|
|
|
|
|
+ chartLoading.value = true;
|
|
|
sessionDetailList.value.push({
|
|
sessionDetailList.value.push({
|
|
|
content: valMsg,
|
|
content: valMsg,
|
|
|
role: 'user',
|
|
role: 'user',
|
|
@@ -1033,6 +966,7 @@
|
|
|
currIndex.value = 0;
|
|
currIndex.value = 0;
|
|
|
while (true) {
|
|
while (true) {
|
|
|
if (toStop) {
|
|
if (toStop) {
|
|
|
|
|
+ message_stop.push(message_id);
|
|
|
displayedText.value = '';
|
|
displayedText.value = '';
|
|
|
setChatDataMeg(chatDataMeg);
|
|
setChatDataMeg(chatDataMeg);
|
|
|
break;
|
|
break;
|
|
@@ -1044,6 +978,16 @@
|
|
|
try {
|
|
try {
|
|
|
const val = JSON.parse(value?.data || '');
|
|
const val = JSON.parse(value?.data || '');
|
|
|
const d = val?.data;
|
|
const d = val?.data;
|
|
|
|
|
+ if (message_id != d.message_id) {
|
|
|
|
|
+ message_id = d.message_id;
|
|
|
|
|
+ message_stop = [];
|
|
|
|
|
+ } else {
|
|
|
|
|
+ //message_stop中查找message_id
|
|
|
|
|
+ const index = message_stop.findIndex(item => item === message_id);
|
|
|
|
|
+ if (index > -1) {
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
if (typeof d !== 'boolean') {
|
|
if (typeof d !== 'boolean') {
|
|
|
// console.info("data:", d);
|
|
// console.info("data:", d);
|
|
|
streamStr.value = d.content;
|
|
streamStr.value = d.content;
|
|
@@ -1057,12 +1001,8 @@
|
|
|
console.info('done');
|
|
console.info('done');
|
|
|
displayedText.value = '';
|
|
displayedText.value = '';
|
|
|
chartLoading.value = false;
|
|
chartLoading.value = false;
|
|
|
- if (isStopChat.value) {
|
|
|
|
|
- setChatDataMeg(chatDataMeg);
|
|
|
|
|
- } else {
|
|
|
|
|
- queryNewSessionDetail(activeSessionId.value);
|
|
|
|
|
- EventBus.emit('queryAppUsageList');
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ queryNewSessionDetail(activeSessionId.value);
|
|
|
|
|
+ EventBus.emit('queryAppUsageList');
|
|
|
break;
|
|
break;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -1073,14 +1013,8 @@
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
const stopChat = async () => {
|
|
const stopChat = async () => {
|
|
|
- // const { code, data } = await stopChatApi(activeSessionId.value);
|
|
|
|
|
- // if (code === 200) {
|
|
|
|
|
- // Message.success("已停止");
|
|
|
|
|
- // queryNewSessionDetail(activeSessionId.value);
|
|
|
|
|
- // }
|
|
|
|
|
loading.value = false;
|
|
loading.value = false;
|
|
|
chatDis.value = false;
|
|
chatDis.value = false;
|
|
|
- isStopChat.value = true;
|
|
|
|
|
toStop = true;
|
|
toStop = true;
|
|
|
console.log('stopChat');
|
|
console.log('stopChat');
|
|
|
console.log(displayedText.value, 'displayedText');
|
|
console.log(displayedText.value, 'displayedText');
|
|
@@ -1103,7 +1037,9 @@
|
|
|
.concat(lastArr);
|
|
.concat(lastArr);
|
|
|
console.log(sessionDetailList.value, 'sessionDetailList2');
|
|
console.log(sessionDetailList.value, 'sessionDetailList2');
|
|
|
console.log(chatObj, 'chatObj对象');
|
|
console.log(chatObj, 'chatObj对象');
|
|
|
- chatObj.message = chatObj.message.concat(lastArr);
|
|
|
|
|
|
|
+ if (chatObj?.message) {
|
|
|
|
|
+ chatObj.message = chatObj.message.concat(lastArr);
|
|
|
|
|
+ }
|
|
|
Object.assign(chatDataMeg, {
|
|
Object.assign(chatDataMeg, {
|
|
|
id: chatObj.id,
|
|
id: chatObj.id,
|
|
|
conversation_id: chatObj.id,
|
|
conversation_id: chatObj.id,
|
|
@@ -1133,7 +1069,6 @@
|
|
|
agentTitle.value = data.name;
|
|
agentTitle.value = data.name;
|
|
|
from.name = data.name;
|
|
from.name = data.name;
|
|
|
refreshScroll(); //刷新滚动条位置
|
|
refreshScroll(); //刷新滚动条位置
|
|
|
- isStopChat.value = false;
|
|
|
|
|
}
|
|
}
|
|
|
};
|
|
};
|
|
|
|
|
|
|
@@ -1205,6 +1140,7 @@
|
|
|
// fileInput.value.cancel();
|
|
// fileInput.value.cancel();
|
|
|
});
|
|
});
|
|
|
EventBus.on('newChat', () => {
|
|
EventBus.on('newChat', () => {
|
|
|
|
|
+ uploaditemList.value = [];
|
|
|
agentType.value = '1';
|
|
agentType.value = '1';
|
|
|
// createSession('');
|
|
// createSession('');
|
|
|
activeSessionId.value = '';
|
|
activeSessionId.value = '';
|