mirror of https://gitee.com/godoos/godoos.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
75 lines
1.7 KiB
75 lines
1.7 KiB
<template>
|
|
<el-row justify="space-between">
|
|
<el-col :span="1">
|
|
<chat-nav />
|
|
</el-col>
|
|
<el-col :span="6">
|
|
<chat-domain />
|
|
</el-col>
|
|
<el-col :span="17">
|
|
<chat-content />
|
|
</el-col>
|
|
</el-row>
|
|
</template>
|
|
|
|
<script setup lang="ts">
|
|
import { onMounted, onUnmounted } from "vue";
|
|
|
|
import { useLocalChatStore } from "@/stores/localchat";
|
|
import { ElMessage } from "element-plus";
|
|
import { getSystemConfig } from "@/system/config";
|
|
const store = useLocalChatStore();
|
|
const config = getSystemConfig();
|
|
|
|
let source:any;
|
|
onMounted(async () => {
|
|
await store.init()
|
|
init()
|
|
});
|
|
onUnmounted(() => {
|
|
if (source) {
|
|
source.close();
|
|
}
|
|
});
|
|
function init() {
|
|
if (typeof EventSource === "undefined") {
|
|
ElMessage.error("您的浏览器不支持SSE");
|
|
return;
|
|
}
|
|
const sseUrl = config.apiUrl + "/localchat/sse";
|
|
source = new EventSource(sseUrl);
|
|
// 当接收到消息时触发
|
|
source.onmessage = async function (event:any) {
|
|
//console.log("has message!");
|
|
const eventData = event.data; // 先保存原始数据
|
|
const jsonData = JSON.parse(eventData); // 解析数据
|
|
console.log(jsonData);
|
|
if (jsonData.type == "user_list") {
|
|
//store.userList = jsonData;
|
|
store.setUserList(jsonData.content);
|
|
//await nextTick();
|
|
}
|
|
if(jsonData.type == 'text'){
|
|
store.addText(jsonData);
|
|
}
|
|
if(jsonData.type == 'file'){
|
|
store.addFile(jsonData);
|
|
}
|
|
};
|
|
// 当与服务器的连接打开时触发
|
|
source.onopen = function () {
|
|
console.log("Connection opened.");
|
|
};
|
|
|
|
// 当与服务器的连接关闭时触发
|
|
source.onerror = function () {
|
|
console.log("Connection closed.");
|
|
};
|
|
}
|
|
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
|
|
|
|
</style>
|