文章目录

  • 标题
    • 代码地址
    • 表情包资源
    • chat.data.ts
    • index.vue

标题

接上一篇博文
这里使用 Vue3 + Typescript + Websocket 实现在线聊天功能的前端部分
部分后台接口需要自己实现调用(查询用户列表以及查询聊天记录)。

代码地址

https://gitee.com/zhang_deming_1995/vue-vben-admin/tree/master/src/views/business/domain/chat-online

表情包资源

点击这里

chat.data.ts

消息展示的时候,需要动态生成加载图标和消息发送失败时的感叹号图标,直接使用base64的方式显示

export const errorImg =
'data:image/png;base64,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';export const loadingImg ='data:image/png;base64,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';

index.vue

<template><div style="width: 100%; height: 100%"><div class="chat_horline"> </div><div class="content"><div class="content__verline"></div><div class="content__left"><!-- 分为聊天室和私聊窗口 --><!-- 聊天室按钮 --><div class="content__left_chatroom"><divv-for="(value, key) in filterUserList('room', '')":key="key":class="key == currentTalkUserId ? 'content__left_item_selected' : 'content__left_item'"@click.stop="clickCard(key)"><Badge :count="value.unread" :offset="[22, 0]"><div> {{ value.realname }}</div></Badge><div style="font-weight: 500"> 用户A:我发了个消息 </div></div></div><!-- 成员列表 --><div class="content__left_user_searcher"><a-input-search v-model:value="searchValue" placeholder="搜索联系人" @search="onSearch"/></div><!-- <p>用户列表</p> --><div class="content__left_user"><divv-for="(value, key) in filterUserList('user', searchValue)":key="key":class="key == currentTalkUserId ? 'content__left_item_selected' : 'content__left_item'"@click.stop="clickCard(key)"><Badge :count="value.unread" :offset="[0, 0]"><div><img style="float: left; height: 35px; width: 40px; padding-left: 5px" /></div></Badge><div style="top: 10px; display: inline-block; margin-left: 15px">{{ value.realname }}<div v-if="value.login"><Badge style="color: green" color="green" text="在线" /></div><div v-else><Badge style="color: gray" color="gray" text="离线" /></div></div></div></div></div><div class="content__verline"></div><div class="content__right"><div class="content__right_room"><!-- 聊天框 --><div class="chat_content_parent"><div ref="messageBoxRef" class="chat_content_child"><divstyle="margin-bottom: 0px"v-for="(value, key, index) in messageList":key="index"><div v-html="showMessage(value)"></div></div></div></div><!-- 分割线 --><div class="chat_line"> </div><!-- 输入框 + 发送按钮 --><div class="chat_sender"><div class="sender_header"><Popover v-model:visible="popoverVisible" trigger="click" placement="topLeft"><template #content><div style="height: 260px; overflow: auto"><!-- 表情列表 --><a-card title="" style="width: 337px; height: 100%"><a-card-gridv-for="(value, name, index) in emojisList":key="index"style="width: 30px; height: 30px; text-align: center; padding: 0px"><img :src="value" @click="clickEmo(name)" /></a-card-grid></a-card></div></template><SmileOutlined class="icon_left" /></Popover><Popover trigger="click" placement="topLeft"><template #content> </template><PlusCircleOutlined class="icon_left" /></Popover><Button class="btn_right" size="small" @click="clickSend"> 发送</Button></div><a-textarea ref="textareaRef" v-model:value="messageText" :bordered="false" /></div></div></div><div class="content__verline"></div><div class="content__components"></div><div class="content__verline"></div></div><div class="chat_horline"> </div></div>
</template>
<script lang="ts">import { PlusCircleOutlined, SmileOutlined } from '@ant-design/icons-vue';import { Button, Popover, Badge } from 'ant-design-vue';import { defineComponent, ref } from 'vue';import { errorImg, loadingImg } from './chat.data.ts';import { useMessage } from '/@/hooks/web/useMessage';import { Persistent } from '/@/utils/cache/persistent';import { getUserListApi, getMessListApi } from '/@/api/business/chatonline';import { getUserInfo } from '/@/api/sys/user';export default defineComponent({components: { Button, Popover, Badge, SmileOutlined, PlusCircleOutlined },setup() {//表情列表const emojisList = ref({});//当前用户const currentUser = ref('');//其他用户列表//{//  realname: 真实姓名,//  login: 登陆状态,//  type: 类型 用户/群组,//  unread:  未读消息,//};const usersList = ref({});//当前聊天的对象或者是群组的IDconst currentTalkUserId = ref(null);//准备发送的消息const messageText = ref('');//查询用户条件const searchValue = ref('');//表情popover是否显示const popoverVisible = ref(false);//输入框组件const textareaRef = ref(null);//消息展示框const messageBoxRef = ref(null);//消息列表// {//   id: {//     isSelf: false, 是否是自己发送的消息//      message: data.message, 消息//      senderId: data.senderId,发送人ID//      receiverId: data.receiverId,接收人ID//      loading: true,发送中?//      success: false,发送成功?//   }// }const messageList = ref({});const { notification, createErrorModal } = useMessage();//定义一个websocketvar websocket = null;// 初始化用户列表const initUserList = async () => {//先加上一个聊天室这是固定的usersList.value['group_181eaae57ee84b1296efa45bd1d86801'] = {realname: '聊天室',login: true,type: 'room',unread: 0,};//调用接口查询用户列表const users = await getUserListApi();if (users !== undefined && users.length > 0) {for (let i = 0; i < users.length; i++) {usersList.value[users[i].id] = {realname: users[i].realName,//默认登陆状态都是未登录login: false,type: 'user',unread: 0,};}}//默认选中聊天室clickCard('group_181eaae57ee84b1296efa45bd1d86801');};//初始化WebSocketconst wsInit = async () => {if (websocket) {return;}//获取当前用户的信息currentUser.value = await getUserInfo();//判断当前浏览器是否支持WebSocket(固定写法)if ('WebSocket' in window) {websocket = new WebSocket('ws://localhost:16001/websocket/' + currentUser.value.userId);} else {notification.error({description: '浏览器不支持websocket',duration: 3,});}//连接发生错误的回调方法websocket.onerror = function (e) {console.log('发生错误', e);};//连接成功建立的回调方法websocket.onopen = function () {console.log('建立连接' + 'event');};//接收到消息的回调方法websocket.onmessage = function (event) {var data = JSON.parse(event.data);if (data.messageType === 3) {const uuid = data.uuid;console.log(uuid, messageList.value[uuid]);if (messageList.value[uuid] && messageList.value[uuid].isSelf == true) {//当前聊天信息列表中在该条消息 并且发回到了自己 表示消息发送成功messageList.value[uuid].loading = false;messageList.value[uuid].success = true;} else {//用户聊天消息//判断接受人是群组还是自己//是自己表示是有人单独给自己发消息let id = '';if (data.receiverId.indexOf('group_') > -1) {id = data.receiverId;} else {id = data.senderId;}//判断当前聊天窗口的用户/群组ID 是不是发送消息的用户ID 或 群组IDif (id === currentTalkUserId.value) {const uuid = guid();messageList.value[uuid] = {isSelf: false,message: data.message,senderId: data.senderId,receiverId: data.receiverId,loading: false,success: true,};} else {//如果不是的话 就在卡片上显示一个有消息的框usersList.value[id].unread = usersList.value[id].unread + 1;}}} else if (data.messageType === 4) {//弹窗提示 并直接关闭聊天窗口createErrorModal({title: '警告',content: '用户异地登录聊天室,当前连接已断开',getContainer: () => document.body,});//断开连接closeSocket();} else if (data.messageType === 1 || data.messageType === 2) {const logined = data.userLists;//等一会再处理 第一次打开的时候用户列表没有加载完setTimeout(() => {Object.keys(usersList.value).reduce((data, key) => {if (contains(logined, String(key))) {usersList.value[key].login = true;} else {usersList.value[key].login = false;}}, {});}, 200);}};//连接关闭的回调方法websocket.onclose = function () {console.log('关闭连接');};};//判断数组中是否存在某个值function contains(arr, val) {if (!arr) {return false;}for (var i = 0; i < arr.length; i++) {if (arr[i] == val) {return true;}}return false;}// 关闭socketconst closeSocket = () => {websocket.close();};// 初始化表情列表const initEmoji = () => {const key = 'EMOJI_LIST';//初始化本地缓存对象const fn_get = Persistent.getLocal;//判断对象是不是已经加载const emojis = fn_get(key);const fn_set = Persistent.setLocal;if (emojis === undefined || JSON.stringify(emojis) == '{}') {//读取表情文件并放入缓存中const files = import.meta.globEager('./emojis/*.gif');const emojilib = {};for (let key in files) {const url = files[key].default;const id = '[emo#' + url.split('/').slice(-1)[0].split('.')[0] + ']';emojilib[id] = url;}//缓存信息emojisList.value = emojilib;fn_set(key, emojilib, true);} else {emojisList.value = emojis;// fn_set(key, {}, true);}};// 点击表情事件const clickEmo = (name) => {popoverVisible.value = false;messageText.value = messageText.value + name;//焦点还原到输入框中textareaRef.value.focus();};//是否显示叹号function showImg(loading, success) {if (loading === false && success === false) {return 'inline-block';} else {return 'None';}}//是否显示加载圈function showLoading(loading) {if (loading === false) {return 'None';} else {return 'inline-block';}}// 显示信息动态解析const showMessage = (value) => {const message = value.message;const isLoginBoard = value.isLoginBoard;const isSelf = value.isSelf;const loading = value.loading;const success = value.success;const senderId = value.senderId;const sds = message.split(/(\[emo#\d+\])/);let mesShow = '';const showType = showImg(loading, success);const showLoad = showLoading(loading);const divStyle ='<div style="background-color:#e9e7e7;display:inline-block;text-align:left;white-space: pre-wrap;white-space: -moz-pre-wrap;' +'white-space: -pre-wrap;white-space: -o-pre-wrap;word-wrap: break-word;width: fit-content;width: -webkit-fit-content;' +'width: -moz-fit-content;max-width: 500px;min-height: 31px;font-size: 16px;padding-left: 5px;padding-right: 5px;margin: 5px;' +'border: #222222 2px solid;border-radius: 5px;">';if (isLoginBoard) {mesShow =mesShow +'<div style="width:100%;text-align:center">' +'<p style="background-color:#e9e7e7;font-size:12px;border:1px black solid;border-radius: 10px;">' +'欢迎进入聊天室</p></div>';} else {if (isSelf) {mesShow +='<div style="width:100%;text-align:right">' +'<img style="height:26px;width:26px;display:' +showType +'" src="' +errorImg +'"/>' +'<img style="height:22px;width:22px;display:' +showLoad +'" src="' +loadingImg +'"/>' +divStyle;} else {mesShow +='<div style="width:100%:height:100px">' +'<div style="padding-left:42px;color:#7c7a7a;font-size:12px;font-weight:600">' +// '在这里是名字' +usersList.value[senderId]?.realname +'</div><img style="float:left;height:35px;width:40px;padding-left: 5px;"></img>' +divStyle;}var re = new RegExp(/(\[emo#\d+\])/);for (let i = 0; i < sds.length; i++) {//拼接内部显示的东西if (sds[i].length === 0) {continue;}if (sds[i].match(re) && emojisList.value.hasOwnProperty(sds[i])) {// 表情替换mesShow =mesShow +'<img style="height:26px;width:26px;display:inline-block" src="' +emojisList.value[sds[i]] +'"/>';} else {// 直接拼接mesShow = mesShow + sds[i];}}// 处理头像if (isSelf) {// 在右边mesShow =mesShow +'</div><img style="display:inline-block;float:right;height:35px;width:40px;padding-right: 5px;"></img></div>';} else {mesShow = mesShow + '</div></div>';}}setTimeout(() => {messageBoxRef.value.scrollTop = messageBoxRef.value.scrollHeight;}, 20);return mesShow;};// 点击发送事件const clickSend = () => {const message = messageText.value;if (message.trim().length === 0) {notification.error({description: '不能发送空信息',duration: 3,});textareaRef.value.focus();return;}//解析消息中的表情const uuid = guid();messageList.value[uuid] = {isSelf: true,message: message,loading: true,success: false,};//调用消息接口传消息try {const param = {};param.uuid = uuid;param.message = message;param.receiverId = currentTalkUserId.value;wsInit();websocket.send(JSON.stringify(param));//消息发送之后//十五秒后判断当前 uuid 的消息是否已经成功 若loading仍是true 那么就认为是失败了//后台不会放弃该任务 所以可能会导致 前端已经判断消息发送失败,前端显示感叹号 但是后端在15秒之后发送成功 //此时消息状态会再次被修改setTimeout(() => {if (messageList.value[uuid].loading === true) {messageList.value[uuid].loading = false;messageList.value[uuid].success = false;}}, 15000);} catch (e) {messageList.value[uuid].success = false;}//焦点还原到输入框中messageText.value = '';textareaRef.value.focus();};//guid生成function guid() {return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {var r = (Math.random() * 16) | 0,v = c == 'x' ? r : (r & 0x3) | 0x8;return v.toString(16);});}//点击用户或聊天室const clickCard = (index) => {if (currentTalkUserId.value !== index) {currentTalkUserId.value = index;usersList.value[index].unread = 0;changeUsers();}};//筛选用户const filterUserList = (type, sv) => {let filterData = {};Object.keys(usersList.value).reduce((data, key) => {if (usersList.value[key].type === type) {if (sv && usersList.value[key].realname.indexOf(sv) > -1) {filterData[key] = usersList.value[key];} else if (!sv) {filterData[key] = usersList.value[key];}}}, {});return filterData;};//切换用户的操作async function changeUsers() {//点击好友或者群组之后,清空当前聊天面板并 =查询历史记录(待更新)//先清空当前面板messageList.value = {};//查询对应用户的聊天信息并加载(TODO)const message = await getMessListApi(currentTalkUserId.value);if (message) {for (let i = 0; i < message.length; i++) {const uuid = guid();const data = message[i];function isSelfFunc() {return data.senderId == currentUser.value.userId;}messageList.value[uuid] = {isSelf: isSelfFunc(),message: data.message,senderId: data.senderId,receiverId: data.receiverId,sendTime: data.sendTime,loading: false,success: true,};}}}const onSearch = () => {// console.log('searchValue', searchValue);};return {initUserList,emojisList,initEmoji,messageText,clickEmo,popoverVisible,textareaRef,messageBoxRef,clickSend,showMessage,messageList,wsInit,usersList,closeSocket,currentTalkUserId,clickCard,filterUserList,searchValue,onSearch,};},mounted() {//初始化用户列表this.initUserList();//初始化表情this.initEmoji();//初始化wsthis.wsInit();},beforeUnmount() {this.closeSocket();},});
</script>
<style lang="less" scoped>.chat_horline {width: 100%;height: 2px;background-color: rgb(49, 49, 49);}.content {display: flex;width: 100%;height: calc(100% - 4px);&__ {&left {width: 220px;height: 100%;flex-shrink: 0;&_chatroom {width: 220px;border-radius: 10px;}&_user_searcher {//预留一个搜索框的位置height: 40px;padding: 5px;background-color: #fffbfb;}&_user {width: 220px;position: absolute;top: 97px; //要算上边框的宽度bottom: 0px;overflow-y: auto;&::-webkit-scrollbar {display: none;}}&_item {padding: 5px;padding-top: 10px;color: #444444;font-weight: 600;margin-top: 2px;margin-left: 3px;margin-right: 3px;width: auto;height: 55px;background-color: transparent;border-radius: 10px;&:hover {background-color: rgb(180, 180, 180);}}&_item_selected {padding: 5px;padding-top: 10px;margin-left: 3px;margin-right: 3px;width: auto;color: #444444;font-weight: 600;margin-top: 2px;height: 55px;background-color: transparent;border-radius: 10px;background-color: rgb(200, 200, 200);}}&verline {width: 2px;flex-shrink: 1;background-color: rgb(49, 49, 49);}&right {flex: 2;background-color: whitesmoke;border-top-right-radius: 5px;border-bottom-right-radius: 5px;&_room {width: 100%;height: 100%;.chat_content_parent {position: relative;height: calc(100% - 162px);::-webkit-scrollbar {display: none;}}.chat_content_child {position: absolute;width: 100%;overflow-y: auto;height: 100%;background-color: whitesmoke;padding: 5px;}.chat_line {width: 100%;height: 2px;background-color: rgb(49, 49, 49);}.chat_sender {padding: 5px;width: 100%;height: 160px;.sender_header {height: 30px;width: 100%;.btn_right {color: whitesmoke !important;font-weight: 600;float: right;margin-left: 8px;color: rgb(36, 36, 36);background: rgb(36, 36, 36);border: #222222 2px solid;}.icon_left {float: left;margin-right: 4px;font-size: 24px;color: rgb(36, 36, 36);background: whitesmoke;}}textarea {padding: 3px;color: rgb(24, 23, 23);resize: none;width: 100%;height: calc(100% - 30px);background-color: whitesmoke;border: #222222 2px solid;border-radius: 5px;}}}}&components {flex-shrink: 3;width: 50px;height: 100%;border-top-right-radius: 5px;border-bottom-right-radius: 5px;background-color: whitesmoke;}}}// 在代码中书写 因为会影响其他页面所以 样式使用scoped限制 但是scoped的会导致动态生成的元素样式失效.textMessage {// 原文本格式显示 识别空格 并且自动换行white-space: pre-wrap;white-space: -moz-pre-wrap;white-space: -pre-wrap;white-space: -o-pre-wrap;// 自动换行word-wrap: break-word;// 宽度自适应内容width: fit-content;width: -webkit-fit-content;width: -moz-fit-content;// 最大宽度max-width: 500px;min-height: 31px;font-size: 16px;padding-left: 5px;padding-right: 5px;margin: 2px;border: #e9e7e7 2px solid;border-radius: 5px;}
</style>

Vue3 -- 基于Websocket实现简易聊天室相关推荐

  1. 基于Node.js + WebSocket 的简易聊天室

    代码地址如下: http://www.demodashi.com/demo/13282.html Node.js聊天室运行说明 Node.js的本质就是运行在服务端的JavaScript.Node.j ...

  2. php即时聊天的框架_workerman-chat(PHP开发的基于Websocket协议的聊天室框架)(thinkphp也是支持socket聊天的)...

    workerman-chat(PHP开发的基于Websocket协议的聊天室框架)(thinkphp也是支持socket聊天的) 一.总结 1.下面链接里面还有一个来聊的php聊天室源码可以学习 2. ...

  3. workerman-chat(PHP开发的基于Websocket协议的聊天室框架)(thinkphp也是支持socket聊天的)...

    workerman-chat(PHP开发的基于Websocket协议的聊天室框架)(thinkphp也是支持socket聊天的) 一.总结 1.下面链接里面还有一个来聊的php聊天室源码可以学习 2. ...

  4. ajax无刷新聊天室,实现一个无刷新的基于ajax的简易聊天室

    实现一个基于ajax的简易聊天室 1 程序主页面 在线交流对话 include_once("server1.server.php"); #servidor para XAJAX $ ...

  5. 原创 回归前端学习第21天-实现俄罗斯方块小游戏3(深入了解Websocket~优化简易聊天室)

    对昨天的简易聊天室进行优化 增加一个mes对象,将传送的数据放在对象里 增加一个mes对象,将传送的数据放在对象里 wsServer.js中替换代码 broadcast(conn.nickname + ...

  6. .NET Core 实现基于Websocket的在线聊天室

    什么是Websocket 我们在传统的客户端程序要实现实时双工通讯第一想到的技术就是socket通讯,但是在web体系是用不了socket通讯技术的,因为http被设计成无状态,每次跟服务器通讯完成后 ...

  7. websocket一直无法链接_.NET Core 实现基于Websocket的在线聊天室

    什么是Websocket 我们在传统的客户端程序要实现实时双工通讯第一想到的技术就是socket通讯,但是在web体系是用不了socket通讯技术的,因为http被设计成无状态,每次跟服务器通讯完成后 ...

  8. javaweb课程设计:基于websocket的网络聊天室(所有的资源和代码还有详细步骤我都会提供)

    1 课程设计目的和任务 本项目的是实现在web应用上进行多人聊天,为以后在大型项目中实现客服在线服务做一个测试,提前了解HTML5新特性,熟练掌握websocket技术. 2 课程设计的主要内容 实现 ...

  9. 局域网通信 | 基于广播实现简易聊天室

    前言 事情是这个样子的,实验室的那个横向项目有一个需求:同一个 WIFI 下的设备之间可以实现实时的语音聊天. 于是这两天抽空闲时间捣鼓了一下局域网通信.现在基本实现语音通信了,是基于 UDP 广播实 ...

最新文章

  1. rabbitMQ简单使用
  2. SDN控制器策略制定和表项下发—Vecloud
  3. Django从理论到实战(part20)--DLT常用过滤器
  4. C语言按行和列求平均成绩代码(指针,二维数组)
  5. 牛客15666 又见斐波那契(矩阵快速幂)
  6. AI小白必读:深度学习、迁移学习、强化学习别再傻傻分不清
  7. 英语语法最终珍藏版笔记-8虚拟语气
  8. 荣耀8X0安卓系统切换鸿蒙系统,华为大改安卓Q,EMUI 10将启用全新UI,花粉沸腾:静候鸿蒙...
  9. 学习笔记-2-Review of Optimization-3-Quadratic
  10. 计算机安全模式快捷键,windows7怎么进入安全模式(快捷键进入的方法)
  11. 大疆精灵4多光谱无人机P4M影像辐射定标方法(三)
  12. 古龙冰洞超级计算机指令,龙族幻想古龙冰洞异闻攻略 古龙冰洞指令介绍
  13. Linux设备驱动编程第三版-笔记
  14. 海龟编辑器怎么运行html,海龟编辑器绘制五角星的操作流程
  15. OVN 流表基础 -- 基于 kubeOVN (一)
  16. 为了忘却的纪念---番茄花园 Windows XP 下载地址合集
  17. ROS2承上启下【05】:在单个进程中布置多个节点
  18. Python判断两个数中最大值的几种方法,可以去跟小伙伴炫(zhuang)耀(bi)了!
  19. 自动保存表单草稿插件
  20. 【C语言进阶剖析】14.C语言中的单引号和双引号

热门文章

  1. 2018巅峰极客writeup(Misc)
  2. vCenter 6.7 HTML web console连接vm黑屏
  3. springcloud 启动 Run Dashboard
  4. 进阶版的Java发牌小程序
  5. 找到一个非常智能的机器人接口分享出来。
  6. NAS如何设置硬盘休眠及定时开关机
  7. python合成图片_python图片合成的示例
  8. 赚钱:停更是不可能停的,但是有时候你不得不停。
  9. java使用poi-tl操作word文件
  10. Symfony Vue 教程