添加通用交互重连
This commit is contained in:
parent
48289fafc6
commit
6a6c5c53fb
|
|
@ -35,6 +35,7 @@ const activePath = ref(route.fullPath)
|
|||
const tabs = useTabsStore();
|
||||
// 设置标签
|
||||
const setTags = (route: any) => {
|
||||
console.log("set tag:",route);
|
||||
const isExist = tabs.list.some(item => {
|
||||
return item.path === route.fullPath;
|
||||
});
|
||||
|
|
@ -45,6 +46,7 @@ const setTags = (route: any) => {
|
|||
path: route.fullPath
|
||||
});
|
||||
}
|
||||
console.log("tabs list:", tabs.list);
|
||||
};
|
||||
setTags(route);
|
||||
onBeforeRouteUpdate(to => {
|
||||
|
|
|
|||
|
|
@ -553,68 +553,15 @@ onMounted(() => {
|
|||
// // 浏览器环境
|
||||
// md.use(markdownItMermaid);
|
||||
// }
|
||||
let url =
|
||||
"wss://pm.ljsea.top/im/ai_chat_ws?" +
|
||||
"token=" +
|
||||
localStorage.getItem("token");
|
||||
//获取模型列表
|
||||
let test_url = "ws://127.0.0.1:8084/im/ai_chat_ws?" + "token=" + localStorage.getItem("token");
|
||||
//url =test_url;
|
||||
socket.value = new WebSocket(url);
|
||||
socket.value.onopen = () => {
|
||||
console.log("WebSocket 连接已建立");
|
||||
ElMessage.success("连接成功");
|
||||
};
|
||||
//getMessage(125);
|
||||
messagesContainer.value = document.querySelector(".chat-messages");
|
||||
IMWSConnect();
|
||||
|
||||
socket.value.onmessage = (event) => {
|
||||
let msg: WSMessage = JSON.parse(event.data);
|
||||
const existingMessage = messages.find(
|
||||
(msg) => msg.role === "assistant" && !msg.finished
|
||||
);
|
||||
if (existingMessage) {
|
||||
// 追加内容
|
||||
existingMessage.content += msg.msg.msg.response;
|
||||
} else {
|
||||
// 新消息
|
||||
messages.push({
|
||||
role: "assistant",
|
||||
content: msg.msg.msg.response,
|
||||
finished: false,
|
||||
});
|
||||
}
|
||||
//console.log("resp:", msg);
|
||||
sessionID.value = msg.session_id;
|
||||
currentAIMessage.value += msg.msg.msg.response;
|
||||
if (msg.msg.msg.done) {
|
||||
const assistantMessage = messages[messages.length - 1];
|
||||
assistantMessage.finished = true;
|
||||
loading.value = false;
|
||||
doButtonD();
|
||||
}
|
||||
nextTick(() => {
|
||||
scrollToBottom(); // 新增滚动调用
|
||||
});
|
||||
};
|
||||
|
||||
socket.value.onclose = () => {
|
||||
console.log("WebSocket 连接已关闭");
|
||||
ElMessage.error("连接已关闭");
|
||||
//重新连接
|
||||
//socket.value = new WebSocket(url);
|
||||
socket.value = null;
|
||||
};
|
||||
|
||||
socket.value.onerror = (error) => {
|
||||
//socket.value = new WebSocket(url);
|
||||
socket.value = null;
|
||||
console.error("WebSocket 发生错误:", error);
|
||||
};
|
||||
|
||||
userUIconfigInfo.value = JSON.parse(
|
||||
localStorage.getItem("userUIconfigInfo") || "{}"
|
||||
);
|
||||
console.log("userUIconfigInfo:", userUIconfigInfo.value);
|
||||
messagesContainer.value = document.querySelector(".chat-messages");
|
||||
//console.log("userUIconfigInfo:", userUIconfigInfo.value);
|
||||
});
|
||||
|
||||
|
|
@ -641,7 +588,7 @@ const doReceiveMessage = (event) => {
|
|||
finished: false,
|
||||
});
|
||||
}
|
||||
//console.log("resp:", msg);
|
||||
|
||||
sessionID.value = msg.session_id;
|
||||
currentAIMessage.value += msg.msg.msg.response;
|
||||
if (msg.msg.msg.done) {
|
||||
|
|
@ -675,14 +622,23 @@ const updateUserUIconfigInfo = () => {
|
|||
});
|
||||
}
|
||||
|
||||
const sendMessage = () => {
|
||||
localStorage.setItem("gen_ai_chat_model_id", selectModel.value.toString());
|
||||
sendMessageWithFile()
|
||||
const sendMessage = async () => {
|
||||
//测试ws是否连接断开
|
||||
if (socket.value == null) {
|
||||
await IMWSConnect();
|
||||
|
||||
}
|
||||
if(loading.value === true){
|
||||
ElMessage.warning("正在等待AI回复,请稍后再试");
|
||||
return;
|
||||
}
|
||||
await nextTick();
|
||||
sendMessageWithFile();
|
||||
return;
|
||||
};
|
||||
|
||||
|
||||
const sendMessageWithFile = () => {
|
||||
const sendMessageWithFile =async () => {
|
||||
if (inputMessage.value.trim() === "") {
|
||||
ElMessage.warning("消息不能为空");
|
||||
return;
|
||||
|
|
@ -725,33 +681,13 @@ const sendMessageWithFile = () => {
|
|||
}
|
||||
console.log("end_msg:", end_msg);
|
||||
|
||||
if(socket.value == null){
|
||||
socket.value = new WebSocket(wssUrl);
|
||||
socket.value.onmessage = (event) => {
|
||||
doReceiveMessage(event);
|
||||
};
|
||||
socket.value.onclose = () => {
|
||||
console.log("WebSocket 连接已关闭");
|
||||
ElMessage.error("连接已关闭");
|
||||
//重新连接
|
||||
//socket.value = new WebSocket(url);
|
||||
socket.value = null;
|
||||
};
|
||||
socket.value.onerror = (error) => {
|
||||
//socket.value = new WebSocket(url);
|
||||
socket.value = null;
|
||||
console.error("WebSocket 发生错误:", error);
|
||||
};
|
||||
ElMessage.error("已重新连接!");
|
||||
}
|
||||
|
||||
try {
|
||||
socket.value.send(JSON.stringify(end_msg));
|
||||
console.log("send msg:", end_msg);
|
||||
} catch (e) {
|
||||
ElMessage.error("发送失败!连接已断开!");
|
||||
socket.value = new WebSocket(socket.value.url);
|
||||
return;
|
||||
//ElMessage.error("发送失败!请刷新页面!");
|
||||
await IMWSConnect();
|
||||
socket.value.send(JSON.stringify(end_msg));
|
||||
}
|
||||
if (sessionID.value == 0) {
|
||||
sessionName.value = inputMessage.value;
|
||||
|
|
@ -769,10 +705,6 @@ const sendMessageWithFile = () => {
|
|||
}
|
||||
|
||||
}
|
||||
// let img_content= img_msg.image_content
|
||||
// for (let i = 0; i < img_content.length; i++) {
|
||||
// pMsgContent += `![${img_content[i].img_name}](${img_content[i].img_url})` + "\n";
|
||||
// }
|
||||
pMsgContent = pMsgContent + "输入:" + file_msg.text;
|
||||
} else {
|
||||
pMsgContent = end_msg.msg;
|
||||
|
|
@ -788,6 +720,37 @@ const sendMessageWithFile = () => {
|
|||
}
|
||||
};
|
||||
|
||||
const IMWSConnect = async () =>{
|
||||
let url =
|
||||
"wss://pm.ljsea.top/im/ai_chat_ws?" +
|
||||
"token=" +
|
||||
localStorage.getItem("token");
|
||||
//获取模型列表
|
||||
let test_url = "ws://127.0.0.1:8084/im/ai_chat_ws?" + "token=" + localStorage.getItem("token");
|
||||
//url =test_url;
|
||||
socket.value =new WebSocket(url);
|
||||
socket.value.onopen = () => {
|
||||
console.log("WebSocket 连接已建立");
|
||||
ElMessage.success("连接成功");
|
||||
};
|
||||
socket.value.onmessage = (event) => {
|
||||
doReceiveMessage(event);
|
||||
};
|
||||
|
||||
socket.value.onclose = () => {
|
||||
console.log("WebSocket 连接已关闭");
|
||||
ElMessage.error("连接已关闭");
|
||||
//重新连接
|
||||
//socket.value = new WebSocket(url);
|
||||
socket.value = null;
|
||||
};
|
||||
|
||||
socket.value.onerror = (error) => {
|
||||
socket.value = null;
|
||||
console.log("WebSocket 连接发生错误:", error);
|
||||
};
|
||||
}
|
||||
|
||||
const loadSession = async (session_id: number) => {
|
||||
sessionID.value = session_id;
|
||||
messages.length = 0; // 清空消息
|
||||
|
|
@ -836,7 +799,7 @@ const getMessage = async (session_id: number) => {
|
|||
};
|
||||
result = await GetMessageService(req);
|
||||
if (result["code"] === 0) {
|
||||
console.log(result["data"]);
|
||||
// console.log(result["data"]);
|
||||
let data = result["data"];
|
||||
for (let i = 0; i < data.length; i++) {
|
||||
if (data[i]["Type"] === 3) {
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@
|
|||
<el-dialog title="查看详情" v-model="visible1" width="700px" destroy-on-close>
|
||||
<TableDetail :data="viewData"></TableDetail>
|
||||
</el-dialog>
|
||||
<div>
|
||||
<div v-if="code_edit">
|
||||
<transition name="fade">
|
||||
<div
|
||||
v-if="code_edit"
|
||||
|
|
|
|||
|
|
@ -82,7 +82,7 @@ let columns = ref([
|
|||
{ prop: 'Function', label: '功能' },
|
||||
{ prop: 'Info', label: '描述信息' },
|
||||
{ prop: 'CreatedAt', label: '创建时间',type: 'date' },
|
||||
{ prop: 'operator', label: '操作', width: 250 , operate: { view: true, edit: true, delete: true,push: {link: false,label:"继续该会话"},gen: {show: false,label:"下载文件"} }},
|
||||
{ prop: 'operator', label: '操作', width: 250 , operate: { view: true, edit: true, delete: true,push: {link: false,label:"继续该会话"},gen: {show: false,label:"下载文件"}, genv2:{type:"", label:"", show:false} }},
|
||||
])
|
||||
const page = reactive({
|
||||
index: 1,
|
||||
|
|
|
|||
|
|
@ -87,7 +87,7 @@ let columns = ref([
|
|||
{ prop: 'FileNameList', label:"知识库文件", width: 300},
|
||||
{ prop: 'CreatedAt', label: '创建时间',type: 'date' },
|
||||
{ prop: 'UpdatedAt', label: '上次更新时间', type: 'date'},
|
||||
{ prop: 'operator', label: '操作', width: 250 , operate: { view: true, edit: true, delete: true,push: {link: false,label:"继续该会话"},gen: {show: false,label:"下载文件"} }},
|
||||
{ prop: 'operator', label: '操作', width: 250 , operate: { view: true, edit: true, delete: true,push: {link: false,label:"继续该会话"},gen: {show: false,label:"下载文件"}, genv2:{type:"", label:"", show:false} }},
|
||||
])
|
||||
const page = reactive({
|
||||
index: 1,
|
||||
|
|
|
|||
|
|
@ -92,7 +92,7 @@ let columns = ref([
|
|||
{prop: 'Url', label: 'URl'},
|
||||
{ prop: 'token', label: '消耗token数',width:50},
|
||||
{ prop: 'CreatedAt', label: '创建时间',type: 'date' },
|
||||
{ prop: 'operator', label: '操作', width: 250 , operate: { view: true, edit: true, delete: true,push: {link: false,label:"继续该会话"},gen: {show: false,label:"下载文件"} }},
|
||||
{ prop: 'operator', label: '操作', width: 250 , operate: { view: true, edit: true, delete: true,push: {link: false,label:"继续该会话"},gen: {show: false,label:"下载文件"},genv2:{type:"", label:"", show:false} }},
|
||||
])
|
||||
const page = reactive({
|
||||
index: 1,
|
||||
|
|
|
|||
|
|
@ -103,7 +103,7 @@ let columns = ref([
|
|||
{ prop: "Context", label: "会话背景参数" ,width: 100},
|
||||
{ prop: 'CreatedAt', label: '创建时间',type: 'date',width: 180 },
|
||||
{ prop: 'UpdatedAt', label: '更新时间',type: 'date',width: 180 },
|
||||
{ prop: 'operator', label: '操作' , operate: { view: false, edit: true, delete: true,push: {link: true,label:"继续该会话"},gen: {show: false,label:"下载文件"}}},
|
||||
{ prop: 'operator', label: '操作' , operate: { view: false, edit: true, delete: true,push: {link: true,label:"继续该会话"},gen: {show: false,label:"下载文件"}, genv2:{type:"", label:"", show:false}}},
|
||||
])
|
||||
|
||||
const getData = async () => {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<template>
|
||||
<transition name="slide">
|
||||
<div v-if="show" class="side-panel">
|
||||
<div class="side-panel">
|
||||
<button @click="handleClose" class="close-btn"></button>
|
||||
<el-button type="primary" @click="UpdateFileCOntent">保存修改</el-button>
|
||||
<div class="content">
|
||||
|
|
|
|||
Loading…
Reference in New Issue