mirror of
https://gitee.com/beijing_hongye_huicheng/lilishop-ui.git
synced 2026-06-23 10:30:26 +08:00
IM
This commit is contained in:
132
im/src/store/modules/talk.js
Normal file
132
im/src/store/modules/talk.js
Normal file
@@ -0,0 +1,132 @@
|
||||
import { getSort, getMutipSort } from "@/utils/functions";
|
||||
import { formatTalkItem } from "@/utils/talk";
|
||||
import { ServeGetTalkList } from "@/api/chat";
|
||||
import store from '@/store/index.js'
|
||||
import Vue from 'vue'
|
||||
const Talk = {
|
||||
state: {
|
||||
// 用户对话列表
|
||||
items: [],
|
||||
|
||||
// 最后一条消息
|
||||
unreadMessage: {
|
||||
num: 0,
|
||||
nickname: "未知",
|
||||
content: "...",
|
||||
},
|
||||
|
||||
// 对话列表重载状态
|
||||
heavyLoad: false,
|
||||
},
|
||||
getters: {
|
||||
// 过滤所有置顶对话列表
|
||||
topItems: (state) => {
|
||||
return state.items.filter((item) => item.is_top == 1);
|
||||
},
|
||||
talkItems: (state) => {
|
||||
return state.items.sort(
|
||||
getMutipSort([getSort((a, b) => a.lastTalkTime > b.lastTalkTime)])
|
||||
);
|
||||
},
|
||||
// 消息未读数总计
|
||||
unreadNum: (state) => {
|
||||
return state.items.reduce((total, item) => {
|
||||
return total + parseInt(item.unread);
|
||||
}, 0);
|
||||
},
|
||||
talkNum: (state) => state.items.length,
|
||||
},
|
||||
mutations: {
|
||||
// 设置对话列表
|
||||
SET_TALK_ITEMS(state, resource) {
|
||||
console.log("设置对话列表", resource.items);
|
||||
Vue.set(state,'items',resource.items)
|
||||
},
|
||||
|
||||
// 更新对话节点
|
||||
UPDATE_TALK_ITEM(state, resource) {
|
||||
console.log("%c 更新对话节点", "color:#32c");
|
||||
console.log("state", state);
|
||||
console.log("resource", resource);
|
||||
|
||||
console.log("%c 更新对话节点结束", "color:#32c",state.items);
|
||||
let index = state.items.findIndex(
|
||||
(item) => item.userId === resource.index_name.split("_")[1]
|
||||
);
|
||||
if (index >= 0) {
|
||||
Object.assign(state.items[index], resource);
|
||||
}
|
||||
},
|
||||
|
||||
// 新增对话节点
|
||||
PUSH_TALK_ITEM(state, resource) {
|
||||
console.log(state)
|
||||
state.items.push(resource);
|
||||
},
|
||||
|
||||
// 移除对话节点
|
||||
REMOVE_TALK_ITEM(state, index_name) {
|
||||
for (let i in state.items) {
|
||||
if (state.items[i].index_name === index_name) {
|
||||
state.items.splice(i, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
// async getTalkList() {
|
||||
// let { code, result } = ServeGetTalkList();
|
||||
// if (code !== 200) return false;
|
||||
|
||||
// store.commit("SET_TALK_ITEMS", {
|
||||
// items: result.map((item) => formatTalkItem(item)),
|
||||
// });
|
||||
// },
|
||||
|
||||
// 更新对话消息
|
||||
UPDATE_TALK_MESSAGE(state, resource) {
|
||||
console.log("%c 更新对话消息", "color:green");
|
||||
|
||||
|
||||
console.log("state", state);
|
||||
console.log("resource", resource);
|
||||
console.log("%c 更新对话结束", "color:green",state.items);
|
||||
|
||||
let enableGetTalkList = true
|
||||
state.items.forEach(item=>{
|
||||
if(item.userId == resource.index_name.split("_")[1]){
|
||||
item.unread++;
|
||||
item.msg_text = resource.msg_text;
|
||||
item.lastTalkTime = resource.updated_at;
|
||||
item.lastTalkMessage = resource.msg_text;
|
||||
item.updated_at = resource.updated_at;
|
||||
enableGetTalkList = false
|
||||
}
|
||||
})
|
||||
// 循环如果当前用户不在对话记录列表中 就重新请求对话列表接口
|
||||
enableGetTalkList ? this.commit('getTalkList'):''
|
||||
},
|
||||
|
||||
// 触发对话列表重新加载
|
||||
TRIGGER_TALK_ITEMS_LOAD(state, status = false) {
|
||||
state.heavyLoad = status;
|
||||
},
|
||||
|
||||
SET_TLAK_UNREAD_MESSAGE(state, resource) {
|
||||
state.unreadMessage.num++;
|
||||
state.unreadMessage.nickname = resource.nickname;
|
||||
state.unreadMessage.content = resource.content;
|
||||
},
|
||||
|
||||
// 清除最后一条未读消息
|
||||
CLEAR_TLAK_UNREAD_MESSAGE(state) {
|
||||
state.unreadMessage = {
|
||||
num: 0,
|
||||
nickname: "未知",
|
||||
content: "...",
|
||||
};
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
export default Talk;
|
||||
Reference in New Issue
Block a user