chat.js
import $U from "./util.js";
class chat {
constructor(arg) {
this.url = arg.url
this.isOnline = false
this.socket = null
// 获取当前用户相关信息
let user = $U.getStorage('user');
this.user = user ? JSON.parse(user) : {}
// 连接和监听
if(this.user.token){
this.connectSocket()
}
}
// 连接socket
connectSocket(){
this.socket = uni.connectSocket({
url:this.url+'?token='+this.user.token,
complete:()=>{}
})
// 监听连接成功
this.socket.onOpen(()=>this.onOpen())
// 监听接收信息
this.socket.onMessage((res)=>this.onMessage(res))
// 监听断开
this.socket.onClose(()=>this.onClose())
// 监听错误
this.socket.onError(()=>this.onError())
}
// 监听打开
onOpen(){
// 用户状态上线
this.isOnline = true;
console.log('socket连接成功');
// 获取用户离线消息
}
// 监听关闭
onClose(){
// 用户下线
this.isOnline = false;
this.socket = null;
console.log('socket连接关闭');
}
// 监听消息
onMessage(data){
console.log('监听消息',data);
}
// 监听连接错误
onError(){
// 用户下线
this.isOnline = false;
this.socket = null;
console.log('socket连接错误');
}
}
export default chat
store/module/user.js
import $U from '@/common/free-lib/util.js';
import $H from '@/common/free-lib/request.js';
import Chat from '@/common/free-lib/chat.js';
import $C from '@/common/free-lib/config.js';
export default {
state: {
user: false,
apply: {
rows: [],
count: 0,
},
mailList:[],
chat:null
},
actions: {
// 登录后处理
login({
state,
dispatch
}, user) {
// 存到状态种
state.user = user;
// 存储到本地存储中
$U.setStorage('token', user.token);
$U.setStorage('user', JSON.stringify(user));
$U.setStorage('user_id', user.id);
// 获取好友申请列表
dispatch('getApply');
// 更新角标提示
dispatch('updateMailBadge');
// 连接socket
state.chat = new Chat({
url:$C.socketUrl
})
},
// 退出登录
logout({
state
}) {
// 清除登录状态
state.user = false;
// 清除本地存储数据
$U.removeStorage('token');
$U.removeStorage('user');
$U.removeStorage('user_id');
// 跳转到登录页
uni.reLaunch({
url: '/pages/common/login/login'
})
},
// 初始化登录状态
initLogin({
state,
dispatch
}) {
// 拿到存储的数据
let user = $U.getStorage('user');
if (user) {
// 初始化登录状态
state.user = JSON.parse(user);
// 连接socket
state.chat = new Chat({
url:$C.socketUrl
})
// 获取离线信息
// 获取好友申请列表
dispatch('getApply');
}
},
// 获取好友申请列表
getApply({
state,
dispatch
}, page = 1) {
$H.get('/apply/' + page).then(res => {
if (page === 1) {
state.apply = res
} else {
// 下拉刷新
state.apply.rows = [...state.apply.rows, ...res.rows]
state.apply.count = res.count
}
// 更新通讯录角标提示
dispatch('updateMailBadge');
});
},
// 更新通讯录角标提示
updateMailBadge({
state
}) {
let count = state.apply.count > 99 ? '99+' : state.apply.count.toString();
console.log(state.apply.count);
if (state.apply.count > 0) {
return uni.setTabBarBadge({
index: 1,
text: count
})
}
uni.removeTabBarBadge({
index: 1
})
},
// 获取通讯录列表
getMailList({state}){
$H.get('/friend/list').then(res=>{
state.mailList = res.rows.newList ? res.rows.newList : [];
})
}
},
}