
vue聊天功能模块(八)撤回消息实现
二、撤回消息,界面处理
发布日期:2021-05-08 00:22:19
浏览次数:21
分类:原创文章
本文共 4227 字,大约阅读时间需要 14 分钟。
需求:撤回消息
思路
- 鼠标右键弹出 撤回 按钮
- 点击撤回按钮,拿到当前选中消息id,遍历消息列表拿到消息相关数据,主要是拿到用户名
- 通过接口撤回当前消息
- 在撤回成功回调中重新更新列表数据
- 到这里,有两个办法更新列表 办法一、可以通过http刷新消息列表
办法二、也可以遍历本地消息,用元素替换掉当前消息即可
办法二效果肯定好一些,毕竟不需要等http回调
一、鼠标右键弹出 撤回 按钮
消息列表
<li class="tal" v-for="(item,index) in showMesDatas" @contextmenu.prevent="rightMessageClick(item.mid,item.uid)" </li>
右击事件,追加撤回按钮
//右击事件处理 rightMessageClick(msgId, uid) { console.log('右击事件'); this.withdrawMessageSmgId = msgId; //保存消息id if (uid === this.user.userId) { this.setMsg(msgId); } else { return; } }, //撤回,删除,取消 handelBackEvent(e, msgId) { let thisId = e.target.id; switch (thisId) { case 'delMsg': //删除消息 this.delMsg(msgId); break; case 'withdrawMessage'://撤回消息 this.withdrawMessage(msgId); break; case 'cancelBack'://取消 $('#backMsg').remove(); console.log('cancelBack'); break; } }, setMsg(num) { $('#backMsg').remove(); var backMsghtml = '<div id="backMsg" style="position: relative;z-index: 99;margin-right: 15%;">' + '<span id="delMsg" style="font-size: 5px;padding: 0;cursor:pointer ;">删除</span>' + '<span id="withdrawMessage" style="font-size: 5px;padding: 0;cursor:pointer ;margin: auto 2px">撤回</span>' + '<span id="cancelBack" style="font-size: 5px;padding: 0;cursor:pointer ;">取消</span>' + '</div>'; $('#msg' + num).append(backMsghtml); },
二、撤回消息,界面处理注意
let rspOBJ = DispatchmessageCtrl.backMsg(MsgIndex, TargetType, TargetInfo);这是通过websocket处理撤回
我们主要做的是删除消息,追加 let htmld = ' <div class="msgDrowBackContent" style="text-align: center">' + '<div><p></p></div><div>' + msgInfo.una + '撤回了一条消息' + '</div>'; $('#msg' + msgId).append(htmld);
//撤回消息 withdrawMessage(msgId) { if (msgId != null && msgId != '') { function findshowMes(findshowMesDatas) { for (let i = 0; i < findshowMesDatas.length; i++) { if (findshowMesDatas[i].mid == msgId) { var msgInfo = findshowMesDatas[i]; return msgInfo; break; } } } let msgInfo = findshowMes(this.showMesDatas); var MsgIndex;//消息编号 var TargetType;//对象类型 Int 0-终端 1-群组 2-调度员 3-临时组 var TargetInfo = { };//对象信息 if (msgInfo.gid === 0) { MsgIndex = msgInfo.mid; TargetType = 0; TargetInfo = { UserID: msgInfo.uid, UserNumber: this.conversationNumber, UserName: msgInfo.una, }; } else { MsgIndex = msgInfo.mid; TargetType = 1; TargetInfo = { GroupID: msgInfo.gid, GroupNumber: this.conversationNumber, GroupName: msgInfo.gna, }; } let rspOBJ = DispatchmessageCtrl.backMsg(MsgIndex, TargetType, TargetInfo); if (rspOBJ === 0) { // Dispatchmessage.backMsg(TargetInfo) //处理消息撤回后的界面 let deleteMesDatas = this.showMesDatas; let htmld = ' <div class="msgDrowBackContent" style="text-align: center">' + '<div><p></p></div><div>' + msgInfo.una + '撤回了一条消息' + '</div>'; $('#msg' + msgId).append(htmld); for (let i = 0; i < deleteMesDatas.length; i++) { if (JSON.stringify(deleteMesDatas[i]).indexOf(JSON.stringify(msgId)) != -1) { deleteMesDatas.splice(i, 1); console.log(deleteMesDatas); this.withdrawMessageShow = false; this.showMesDatas = deleteMesDatas; // this.getTalkHistorys(); $('#backMsg').remove(); break; } } } else { // Dispatchmessage.backMsg(-1) // 失败后的处理,参数传入-1 this.withdrawMessageShow = false; this.$message.warning('撤回失败'); $('#backMsg').remove(); } } else { $('#backMsg').remove(); } },
来看看效果
发表评论
最新留言
很好
[***.229.124.182]2025年04月13日 23时34分03秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
shell编程(六)语言编码规范之(变量)
2021-05-08
vim杂谈(三)之配色方案
2021-05-08
vim杂谈(五)之vim不加载~/.vimrc
2021-05-08
Linux杂谈之终端快捷键
2021-05-08
vimscript学习笔记(二)预备知识
2021-05-08
vimscript学习笔记(三)信息打印
2021-05-08
awk杂谈之数组习题
2021-05-08
Linux网络属性配置详解
2021-05-08
Python(三十)类的理解
2021-05-08
Extjs布局详解
2021-05-08
Android数据库
2021-05-08
Linux基础命令(十四)软件安装的后续
2021-05-08
HTML基础,块级元素/行内元素/行内块元素辨析【2分钟掌握】
2021-05-08
keil左侧文件调整方法
2021-05-08
本地分支关联远程分支
2021-05-08
STM8 GPIO模式
2021-05-08
python多态和封装
2021-05-08
STM32boot启动
2021-05-08
回调函数(callback function)
2021-05-08