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