Node+WebSocket+Vue 一對一、一對多聊天室訊息已讀未讀
Node + WebSocket + Vue 一對一、一對多聊天室訊息已讀未讀 - 第四章
前言
這篇文章非常的短小,在之前文章基礎上就實現一個非常小的功能點,訊息已讀和未讀。如果您還沒有看過之前的文字,請點選下方連結檢視!
推薦文章:
WebSocket客戶端UI介面更改
...
<div class="user-list">
<div class="user" @click="triggerGroup">群1
<span class="tips-num">{{getMsgNum()}}</span>
</div>
<div class="user" @click="triggerPersonal(item)" v-if="item.uid!=uid" v-for="item in users">
{{item.nickname}}
<span class="tips-num">{{getMsgNum(item)}}</span>
</div>
</div>
...
這裡就加了一個非常小的改動,加了一個tips-num
tips,先展示未讀訊息。
WebSocket服務端
...
boardcast({
type: 2,
date: moment().format('YYYY-MM-DD HH:mm:ss'),
msg: obj.msg,
uid: obj.uid,
nickname: obj.nickname,
// 增加引數
bridge: obj.bridge,
status: 1
});
...
服務端就在傳送訊息的地方增加一個欄位,status:1
來表示未讀。
WebSocket客戶端
由UI介面的程式碼可以看出,我們呼叫了一個getMsgNum
方法來展示未讀訊息數量。所以我們客戶端只需要在原來的基礎上,新增一個獲取未讀訊息數量的方法即可。
export default {
...
data(){
...
},
mounted() {
...
},
computed: {
currentMessage() {
let vm = this;
let data = vm.messageList.filter(item=>{
return item.bridge.sort().join(',') == vm.bridge.sort().join(',')
})
data.map(item=>{
item.status = 0
return item;
})
return data;
}
},
methods: {
getMsgNum(user){
if(!user){
return this.messageList.filter(item=>{
return !item.bridge.length && item.status === 1
}).length
}
return this.messageList.filter(item=>{
return item.bridge.length && item.uid === user.uid && item.status === 1
}).length
}
...
}
}
上方…的程式碼區域都是和前面文章一樣的地方,所有就省略了。
1、引數user
沒有值時,表示是獲取群訊息未讀,判斷messageList
裡面的沒有bridge
(即是群聊訊息),並且status
為1(即未讀)
2、如果有user
時,獲取對應使用者未讀訊息,判斷messageList
裡面的有bridge
(即是使用者對話訊息)、uid
相等,並且status
為1(即未讀)
3、開啟的是當前對話,即將當前對話的訊息狀態status
改為0(已讀)
data.map(item=>{
item.status = 0
return item;
})
快速預覽效果
總結
訊息未讀,主要是判斷狀態,然後搞清楚物件,是誰發的訊息沒有讀。已讀,就很簡單了,就是當前展示的訊息列表都改成已讀,所以直接把currentMessage
列表的訊息改成已讀即可。
原始碼地址:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/75/viewspace-2822828/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 訊息已讀、未讀是怎麼設計的?
- Nodejs + WebSocket + Vue 一對一、一對多聊天室 - 第三章NodeJSWebVue
- Java聊天室——一對一模式Java模式
- JPA(3) 表關聯關係(多對一、一對多、多對多、一對一)
- gorm 關係一對一,一對多,多對多查詢GoORM
- Spring Data JPA 之 一對一,一對多,多對多 關係對映Spring
- MyBatis表關聯 一對多 多對一 多對多MyBatis
- mybatis一對多&&多對一處理MyBatis
- MyBatis07-(多對一、一對多)MyBatis
- Mybatis一對多、多對一處理MyBatis
- spring data jpa關聯查詢(一對一、一對多、多對多)Spring
- Mybatis09_一對一、一對多、多對多、延遲載入MyBatis
- Mybatis【一對多、多對一、多對多】知識要點MyBatis
- JPA中對映關係詳細說明(一對多,多對一,一對一、多對多)、@JoinColumn、mappedBy說明APP
- mybatis的一對多,多對一,以及多對對的配置和使用MyBatis
- 一文讀懂訊息佇列一些設計佇列
- MyBatis 使用resultMap 以及 一對一和一對多MyBatis
- Rails 一對多AI
- 透過 adc 實現一個IO對多個按鍵讀取
- 一文讀懂Python中的對映Python
- Spring Boot 入門系列(二十八) JPA 的實體對映關係,一對一,一對多,多對多關係對映!Spring Boot
- 多對一處理 和一對多處理的處理
- php 站內信,訊息未讀已讀,資料表設計思路與方案值得揣摩!PHP
- flutter 帶未讀訊息的底部導航Flutter
- 開發一對一直播聊天室一對一表演按分鐘賺錢的軟體系統。
- 未來不是夢,一對一視訊直播交友原始碼圓夢原始碼
- 資料融合重磅功能丨一對多實時分發、批次讀取模式模式
- jpa一對多查詢
- 模型關聯一對多模型
- 為什麼反向關聯 一對一和一對多都是同一個方法
- #MyBatis多表查詢 #多對一、一對多的兩種實現方式 @FDDLCMyBatis
- [增刪改查] 最規範的 JPA 一對多/多對一 CRUD 示例
- 一對一直播交友帶社群匹配聊天一對多直播交友appAPP
- APP一對一直播交友帶社群動態短視訊功能一對多直播交友系統原始碼APP原始碼
- [增刪改查] 最簡單的 JPA 一對多/多對一 CRUD 設計
- 一對一影片直播原始碼,利用列舉提升程式碼的可讀性原始碼
- 快速實現底部導航欄及未讀訊息
- 會議室無線投屏模式:一對多投屏與多對一投屏模式