添加通用交互重连
This commit is contained in:
parent
48289fafc6
commit
6a6c5c53fb
|
|
@ -35,6 +35,7 @@ const activePath = ref(route.fullPath)
|
||||||
const tabs = useTabsStore();
|
const tabs = useTabsStore();
|
||||||
// 设置标签
|
// 设置标签
|
||||||
const setTags = (route: any) => {
|
const setTags = (route: any) => {
|
||||||
|
console.log("set tag:",route);
|
||||||
const isExist = tabs.list.some(item => {
|
const isExist = tabs.list.some(item => {
|
||||||
return item.path === route.fullPath;
|
return item.path === route.fullPath;
|
||||||
});
|
});
|
||||||
|
|
@ -45,6 +46,7 @@ const setTags = (route: any) => {
|
||||||
path: route.fullPath
|
path: route.fullPath
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
console.log("tabs list:", tabs.list);
|
||||||
};
|
};
|
||||||
setTags(route);
|
setTags(route);
|
||||||
onBeforeRouteUpdate(to => {
|
onBeforeRouteUpdate(to => {
|
||||||
|
|
|
||||||
|
|
@ -553,22 +553,26 @@ onMounted(() => {
|
||||||
// // 浏览器环境
|
// // 浏览器环境
|
||||||
// md.use(markdownItMermaid);
|
// md.use(markdownItMermaid);
|
||||||
// }
|
// }
|
||||||
let url =
|
IMWSConnect();
|
||||||
"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");
|
|
||||||
|
|
||||||
socket.value.onmessage = (event) => {
|
|
||||||
|
|
||||||
|
userUIconfigInfo.value = JSON.parse(
|
||||||
|
localStorage.getItem("userUIconfigInfo") || "{}"
|
||||||
|
);
|
||||||
|
console.log("userUIconfigInfo:", userUIconfigInfo.value);
|
||||||
|
messagesContainer.value = document.querySelector(".chat-messages");
|
||||||
|
//console.log("userUIconfigInfo:", userUIconfigInfo.value);
|
||||||
|
});
|
||||||
|
|
||||||
|
onUnmounted(() => {
|
||||||
|
if (socket.value) {
|
||||||
|
socket.value.close();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const doReceiveMessage = (event) => {
|
||||||
|
// 处理接收到的消息
|
||||||
let msg: WSMessage = JSON.parse(event.data);
|
let msg: WSMessage = JSON.parse(event.data);
|
||||||
const existingMessage = messages.find(
|
const existingMessage = messages.find(
|
||||||
(msg) => msg.role === "assistant" && !msg.finished
|
(msg) => msg.role === "assistant" && !msg.finished
|
||||||
|
|
@ -584,64 +588,7 @@ onMounted(() => {
|
||||||
finished: false,
|
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);
|
|
||||||
});
|
|
||||||
|
|
||||||
onUnmounted(() => {
|
|
||||||
if (socket.value) {
|
|
||||||
socket.value.close();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
const doReceiveMessage = (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;
|
sessionID.value = msg.session_id;
|
||||||
currentAIMessage.value += msg.msg.msg.response;
|
currentAIMessage.value += msg.msg.msg.response;
|
||||||
if (msg.msg.msg.done) {
|
if (msg.msg.msg.done) {
|
||||||
|
|
@ -675,14 +622,23 @@ const updateUserUIconfigInfo = () => {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
const sendMessage = () => {
|
const sendMessage = async () => {
|
||||||
localStorage.setItem("gen_ai_chat_model_id", selectModel.value.toString());
|
//测试ws是否连接断开
|
||||||
sendMessageWithFile()
|
if (socket.value == null) {
|
||||||
|
await IMWSConnect();
|
||||||
|
|
||||||
|
}
|
||||||
|
if(loading.value === true){
|
||||||
|
ElMessage.warning("正在等待AI回复,请稍后再试");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
await nextTick();
|
||||||
|
sendMessageWithFile();
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
const sendMessageWithFile = () => {
|
const sendMessageWithFile =async () => {
|
||||||
if (inputMessage.value.trim() === "") {
|
if (inputMessage.value.trim() === "") {
|
||||||
ElMessage.warning("消息不能为空");
|
ElMessage.warning("消息不能为空");
|
||||||
return;
|
return;
|
||||||
|
|
@ -725,33 +681,13 @@ const sendMessageWithFile = () => {
|
||||||
}
|
}
|
||||||
console.log("end_msg:", end_msg);
|
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 {
|
try {
|
||||||
socket.value.send(JSON.stringify(end_msg));
|
socket.value.send(JSON.stringify(end_msg));
|
||||||
console.log("send msg:", end_msg);
|
console.log("send msg:", end_msg);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
ElMessage.error("发送失败!连接已断开!");
|
//ElMessage.error("发送失败!请刷新页面!");
|
||||||
socket.value = new WebSocket(socket.value.url);
|
await IMWSConnect();
|
||||||
return;
|
socket.value.send(JSON.stringify(end_msg));
|
||||||
}
|
}
|
||||||
if (sessionID.value == 0) {
|
if (sessionID.value == 0) {
|
||||||
sessionName.value = inputMessage.value;
|
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;
|
pMsgContent = pMsgContent + "输入:" + file_msg.text;
|
||||||
} else {
|
} else {
|
||||||
pMsgContent = end_msg.msg;
|
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) => {
|
const loadSession = async (session_id: number) => {
|
||||||
sessionID.value = session_id;
|
sessionID.value = session_id;
|
||||||
messages.length = 0; // 清空消息
|
messages.length = 0; // 清空消息
|
||||||
|
|
@ -836,7 +799,7 @@ const getMessage = async (session_id: number) => {
|
||||||
};
|
};
|
||||||
result = await GetMessageService(req);
|
result = await GetMessageService(req);
|
||||||
if (result["code"] === 0) {
|
if (result["code"] === 0) {
|
||||||
console.log(result["data"]);
|
// console.log(result["data"]);
|
||||||
let data = result["data"];
|
let data = result["data"];
|
||||||
for (let i = 0; i < data.length; i++) {
|
for (let i = 0; i < data.length; i++) {
|
||||||
if (data[i]["Type"] === 3) {
|
if (data[i]["Type"] === 3) {
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@
|
||||||
<el-dialog title="查看详情" v-model="visible1" width="700px" destroy-on-close>
|
<el-dialog title="查看详情" v-model="visible1" width="700px" destroy-on-close>
|
||||||
<TableDetail :data="viewData"></TableDetail>
|
<TableDetail :data="viewData"></TableDetail>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
<div>
|
<div v-if="code_edit">
|
||||||
<transition name="fade">
|
<transition name="fade">
|
||||||
<div
|
<div
|
||||||
v-if="code_edit"
|
v-if="code_edit"
|
||||||
|
|
|
||||||
|
|
@ -82,7 +82,7 @@ let columns = ref([
|
||||||
{ prop: 'Function', label: '功能' },
|
{ prop: 'Function', label: '功能' },
|
||||||
{ prop: 'Info', label: '描述信息' },
|
{ prop: 'Info', label: '描述信息' },
|
||||||
{ prop: 'CreatedAt', label: '创建时间',type: 'date' },
|
{ 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({
|
const page = reactive({
|
||||||
index: 1,
|
index: 1,
|
||||||
|
|
|
||||||
|
|
@ -87,7 +87,7 @@ let columns = ref([
|
||||||
{ prop: 'FileNameList', label:"知识库文件", width: 300},
|
{ prop: 'FileNameList', label:"知识库文件", width: 300},
|
||||||
{ prop: 'CreatedAt', label: '创建时间',type: 'date' },
|
{ prop: 'CreatedAt', label: '创建时间',type: 'date' },
|
||||||
{ prop: 'UpdatedAt', 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({
|
const page = reactive({
|
||||||
index: 1,
|
index: 1,
|
||||||
|
|
|
||||||
|
|
@ -92,7 +92,7 @@ let columns = ref([
|
||||||
{prop: 'Url', label: 'URl'},
|
{prop: 'Url', label: 'URl'},
|
||||||
{ prop: 'token', label: '消耗token数',width:50},
|
{ prop: 'token', label: '消耗token数',width:50},
|
||||||
{ prop: 'CreatedAt', label: '创建时间',type: 'date' },
|
{ 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({
|
const page = reactive({
|
||||||
index: 1,
|
index: 1,
|
||||||
|
|
|
||||||
|
|
@ -103,7 +103,7 @@ let columns = ref([
|
||||||
{ prop: "Context", label: "会话背景参数" ,width: 100},
|
{ prop: "Context", label: "会话背景参数" ,width: 100},
|
||||||
{ prop: 'CreatedAt', label: '创建时间',type: 'date',width: 180 },
|
{ prop: 'CreatedAt', label: '创建时间',type: 'date',width: 180 },
|
||||||
{ prop: 'UpdatedAt', 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 () => {
|
const getData = async () => {
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<transition name="slide">
|
<transition name="slide">
|
||||||
<div v-if="show" class="side-panel">
|
<div class="side-panel">
|
||||||
<button @click="handleClose" class="close-btn"></button>
|
<button @click="handleClose" class="close-btn"></button>
|
||||||
<el-button type="primary" @click="UpdateFileCOntent">保存修改</el-button>
|
<el-button type="primary" @click="UpdateFileCOntent">保存修改</el-button>
|
||||||
<div class="content">
|
<div class="content">
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue