web/im/src/store/modules/talk.js

131 lines
3.6 KiB
JavaScript

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) {
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;