You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

146 lines
3.7 KiB

import { defineStore } from 'pinia'
import utils from '@/utils/utils.js';
import msgApi from '@/api/message.js';
export const useMsgStore = defineStore({
id: 'message', // id必填,且需要唯一
state: () => {
return {
pushSocket: '',
chatSocket: '',
instantSocket: '',
webrtc:'',
topContacts:[],
contacts: [], //所有联系人
chatList:[], //聊天列表
wsSendData: '',
unread: 0,
sysUnread:0,
msgAt:0,
newMessage:{},
msgList:[],
webrtcLock:false
}
},
// actions 用来修改 state
actions: {
catchSocketAction(data){
this.chatSocket = data;
if (data.is_group == 2) {
this.unread += 1;
}
},
updateUnread (data) {
this.unread = parseInt(data);
},
//初始化联系人
initContacts (data) {
let contacts=utils.sortContacts(data);
let topContacts=[];
let otherContacts=[];
let unread=0;
let msgAt=0;
let mainContacts={};
contacts.forEach((item, index) => {
if (item.lastContent && item.is_notice==1) {
unread += item.unread;
}
if (item.is_at) {
msgAt += item.is_at;
}
if(item.lastContent && !['text','event','location','contact'].includes(item.type)){
item.lastContent=utils.getMsgType(item.type);
}
if(item.index=='群聊'){
item.index="#";
}
mainContacts[item.id] =item;
if (item.is_top == 1) {
topContacts.push(item)
}else{
otherContacts.push(item)
}
})
this.unread=unread;
this.msgAt=msgAt;
this.contacts =topContacts.concat(otherContacts);
uni.setStorageSync('allContacts',this.contacts);
uni.setStorageSync('mainContacts',mainContacts);
},
//更新联系人
updateContacts (data) {
const contacts = uni.getStorageSync('allContacts');
// 更新联系人
contacts.forEach((item, index) => {
let contact = contacts[index];
if (item.id == data.id) {
contacts[index] = Object.assign(contact, data);
}
})
this.initContacts(contacts);
},
//添加联系人
appendContacts (data) {
// 检查是否有该联系人,有就更新,没有就增加
const mainContacts = uni.getStorageSync('mainContacts');
if(mainContacts[data.id]){
return this.updateContacts(data);
}
const contacts = uni.getStorageSync('allContacts');
contacts.push(data);
this.initContacts(contacts);
},
//删除联系人
deleteContacts (data) {
const contacts = JSON.parse(JSON.stringify(this.contacts));
const newContacts = contacts.filter(obj => obj.id != data.id);
this.contacts=newContacts;
const mainContacts=uni.getStorageSync('mainContacts');
delete mainContacts[data.id];
uni.setStorageSync('allContacts',this.contacts);
uni.setStorageSync('mianContacts',mianContacts);
},
// 初始化当前页面的消息列表
initMsg(data){
this.msgList=data;
},
// 检查是否存在此消息,有的则跳过,没有就更新
checkMsg(msg){
let msgList=this.msgList;
let hasMsg=false;
msgList.forEach((item, index) => {
if (item.id==msg.id) {
hasMsg=true;
}
})
if(!hasMsg){
this.msgList.push(msg);
}
},
getContact(id,message){
if(!id){
let contacts=uni.getStorageSync('allContacts');
return contacts;
}else{
let contacts=uni.getStorageSync('mainContacts');
let contact = contacts[id];
if(!contact && message && message.contactInfo){
contact = message.contactInfo;
this.appendContacts(contact);
}
return contact;
}
},
getChatList(){
let contacts=uni.getStorageSync('allContacts');
this.chatList =contacts.filter(obj => obj.lastContent);
return this.chatList;
},
// 新消息推送
appendMsg(message){
this.newMessage=message;
},
wsSend (data) {
this.wsSendData = data;
}
}
})