mirror of
https://github.com/yawaflua/LuckyDiamond.git
synced 2025-12-10 04:09:29 +02:00
139 lines
3.7 KiB
Vue
139 lines
3.7 KiB
Vue
<template>
|
|
<aside class="chat">
|
|
<div class="chat__content">
|
|
<div class="chat__container--title">
|
|
<div class="chat__title">
|
|
<h2>Чат</h2>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="chat__content--users">
|
|
<ul>
|
|
<transition-group name="fade">
|
|
<li v-for="msg in array" :key="msg">
|
|
<div
|
|
class="card__user"
|
|
:class="{
|
|
'mention-message': isCurrentUser(msg),
|
|
'system-message': msg.username === '🛠️ System',
|
|
}"
|
|
>
|
|
<div class="user__icon">
|
|
<img :src="msg.icon" />
|
|
</div>
|
|
<div class="content">
|
|
<h1>{{ msg.username }}</h1>
|
|
<p>{{ msg.msg }}</p>
|
|
</div>
|
|
</div>
|
|
</li>
|
|
</transition-group>
|
|
</ul>
|
|
</div>
|
|
<writechat-component @send="ClaimDatamsg"></writechat-component>
|
|
<!-- <div class="chat__mute-button">
|
|
<button @click="muteChat">Mute</button>
|
|
</div> -->
|
|
</aside>
|
|
</template>
|
|
|
|
<script>
|
|
import "@/assets/css/ComponentsStyles/chat.css";
|
|
import { GetChatHistory } from "@/assets/js/rest/RestMethods.js";
|
|
import { GetCookie } from "@/assets/js/storage/CookieStorage";
|
|
|
|
import WritechatComponent from "@/components/WritechatComponent.vue";
|
|
import { SendMessageToChat } from "@/assets/js/chat/ChatLogic.js";
|
|
import { eventBus } from "@/main";
|
|
|
|
export default {
|
|
components: { WritechatComponent },
|
|
inject: ["eventBus"],
|
|
data() {
|
|
return {
|
|
array: [],
|
|
id: 0,
|
|
lastMsgTime: null,
|
|
};
|
|
},
|
|
methods: {
|
|
ScrollToBottom() {
|
|
this.$nextTick(() => {
|
|
const chatContent = this.$el.querySelector(".chat__content--users");
|
|
chatContent.scrollTop = chatContent.scrollHeight;
|
|
});
|
|
},
|
|
isCurrentUser(msg) {
|
|
return msg.msg.includes(GetCookie("SpUserName"));
|
|
},
|
|
ClaimDatamsg(msg) {
|
|
const now = Date.now();
|
|
if (!this.lastMsgTime || now - this.lastMsgTime >= 1000) {
|
|
SendMessageToChat(msg[0]);
|
|
this.lastMsgTime = now;
|
|
} else {
|
|
alert("Вы не можете отправлять сообщения так часто");
|
|
}
|
|
},
|
|
muteChat() {
|
|
// Mute the chat by disabling the event listener for incoming messages.
|
|
this.eventBus.$off("dataChat");
|
|
},
|
|
},
|
|
mounted() {
|
|
eventBus.on("dataChat", (dataFromServer) => {
|
|
try {
|
|
const dataObject = JSON.parse(dataFromServer);
|
|
|
|
let imageUrl =
|
|
"https://avatar.spworlds.ru/face/55/" + dataObject.SpUserName;
|
|
|
|
const MsgUser = {
|
|
id: this.id + 1,
|
|
msg: dataObject.Message,
|
|
username: dataObject.SpUserName,
|
|
icon: imageUrl,
|
|
};
|
|
|
|
if (MsgUser.username === "🛠️ System") {
|
|
MsgUser.icon = "https://avatar.spworlds.ru/face/55/CONSOLE";
|
|
}
|
|
|
|
this.array.push(MsgUser);
|
|
|
|
this.ScrollToBottom();
|
|
} catch (error) {
|
|
console.error("Error parsing JSON data:", error);
|
|
}
|
|
});
|
|
},
|
|
created() {
|
|
GetChatHistory().then((response) => {
|
|
if (response && response.length) {
|
|
response.forEach((element) => {
|
|
let imageUrl =
|
|
"https://avatar.spworlds.ru/face/55/" + element.userName;
|
|
|
|
const MsgUser = {
|
|
id: this.id + 1,
|
|
msg: element.message,
|
|
username: element.userName,
|
|
icon: imageUrl,
|
|
};
|
|
|
|
if (MsgUser.username === "🛠️ System") {
|
|
MsgUser.icon = "https://avatar.spworlds.ru/face/55/CONSOLE";
|
|
}
|
|
|
|
this.array.push(MsgUser);
|
|
});
|
|
this.ScrollToBottom();
|
|
}
|
|
});
|
|
},
|
|
};
|
|
</script>
|
|
|
|
<style scoped>
|
|
</style>
|