refactor: ♻️ 优化 websocket 示例样式

This commit is contained in:
郝先瑞 2023-10-10 20:59:01 +08:00
parent 5463a3a760
commit 8fbf8aa3d4
1 changed files with 45 additions and 48 deletions

View File

@ -1,6 +1,5 @@
<!-- websocket 示例 -->
<script setup lang="ts">
// https://github.com/sockjs/sockjs-client/issues/547 global is not defined
import SockJS from "sockjs-client";
import Stomp from "stompjs";
@ -9,11 +8,18 @@ import { useUserStoreHook } from "@/store/modules/user";
const userStore = useUserStoreHook();
const isConnected = ref(false);
const socketEndpoint = ref("http://47.117.115.107:8989/ws");
const socketEndpoint = ref("http://47.117.115.107:8989/ws"); // 线
// const socketEndpoint = ref("http://localhost:8989/ws"); //
const receiverUsername = ref("root");
const receiver = ref("root");
const systemMessages = ref<string[]>([]); //
interface MessageType {
type?: string; // tip-
sender?: string;
content: string;
}
const messages = ref<MessageType[]>([]);
const topicMessage = ref(
"亲爱的大冤种们由于一只史诗级的BUG系统版本已经被迫回退到了0.0.1。"
@ -21,7 +27,7 @@ const topicMessage = ref(
const queneMessage = ref(
"hi , " +
receiverUsername.value +
receiver.value +
" , 我是" +
userStore.user.username +
" , 想和你交个朋友 ! "
@ -36,11 +42,7 @@ function sendToAll() {
}
function sendToUser() {
stompClient.send(
"/app/sendToUser/" + receiverUsername.value,
{},
queneMessage.value
);
stompClient.send("/app/sendToUser/" + receiver.value, {}, queneMessage.value);
messages.value.push({
sender: userStore.user.username,
content: queneMessage.value,
@ -58,15 +60,21 @@ function connectWebSocket() {
{ Authorization: userStore.token },
() => {
isConnected.value = true;
systemMessages.value.push("Websocket 已连接");
messages.value.push({
sender: "Server",
content: "Websocket 已连接",
type: "tip",
});
stompClient.subscribe("/topic/notice", (res: any) => {
console.log("接收到订阅主题消息", res);
messages.value.push({ sender: "Server", content: res.body });
messages.value.push({
sender: "Server",
content: res.body,
});
});
stompClient.subscribe("/user/queue/greeting", (res) => {
const messageData = JSON.parse(res.body) as MessageType;
messages.value.push({
sender: messageData.sender,
content: messageData.content,
@ -74,8 +82,13 @@ function connectWebSocket() {
});
},
(error) => {
console.log("连接失败: " + error);
isConnected.value = false; //
systemMessages.value.push("Websocket 已断开");
messages.value.push({
sender: "Server",
content: "Websocket 已断开",
type: "tip",
});
}
);
}
@ -84,18 +97,15 @@ function disconnectWebSocket() {
if (stompClient && stompClient.connected) {
stompClient.disconnect(() => {
isConnected.value = false; //
systemMessages.value.push("Websocket 已断开");
messages.value.push({
sender: "Server",
content: "Websocket 已断开",
type: "tip",
});
});
}
}
interface MessageType {
sender?: string;
content: any;
}
const messages = ref<MessageType[]>([]);
onMounted(() => {
connectWebSocket();
});
@ -110,7 +120,6 @@ onMounted(() => {
class="mb-[20px]"
>示例源码 请点击>>>></el-link
>
<el-row :gutter="10">
<el-col :span="12">
<el-card>
@ -160,7 +169,7 @@ onMounted(() => {
<el-input type="textarea" v-model="queneMessage" />
</el-form-item>
<el-form-item label="消息接收人">
<el-input v-model="receiverUsername" />
<el-input v-model="receiver" />
</el-form-item>
<el-form-item>
<el-button @click="sendToUser" type="primary"
@ -174,26 +183,17 @@ onMounted(() => {
<el-col :span="12">
<el-card>
<div class="message-container">
<div
class="system-message"
v-for="(message, index) in systemMessages"
:key="index"
>
{{ message }}
</div>
<div
v-for="(message, index) in messages"
:key="index"
class="message-item"
:class="{
'message-item--sent':
message.sender === userStore.user.username,
'message-item--received':
message.sender !== userStore.user.username,
'tip-message': message.type === 'tip',
message: message.type !== 'tip',
'message--sent': message.sender === userStore.user.username,
'message--received': message.sender !== userStore.user.username,
}"
>
<div class="message-content">
<div v-if="message.type != 'tip'" class="message-content">
<div
:class="{
'message-sender':
@ -204,8 +204,9 @@ onMounted(() => {
>
{{ message.sender }}
</div>
<div class="message-text">{{ message.content }}</div>
<div class="color-#333">{{ message.content }}</div>
</div>
<div v-else>{{ message.content }}</div>
</div>
</div>
</el-card>
@ -220,18 +221,18 @@ onMounted(() => {
flex-direction: column;
}
.message-item {
.message {
padding: 10px;
margin: 10px;
border-radius: 5px;
}
.message-item--sent {
.message--sent {
align-self: flex-end;
background-color: #dcf8c6;
}
.message-item--received {
.message--received {
align-self: flex-start;
background-color: #e8e8e8;
}
@ -253,11 +254,7 @@ onMounted(() => {
text-align: left;
}
.message-text {
color: #333;
}
.system-message {
.tip-message {
align-self: center;
padding: 5px 10px;
margin-bottom: 5px;