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 : []; }) } }, }