//app.js //聊天控件 let WebIM = wx.WebIM = require("./utils/WebIM.js").default; let disp = require("./utils/broadcast"); App({ getRoomPage: function () { return this.getPage("pages/consulting/consulting") }, getPage: function (pageName) { var pages = getCurrentPages() return pages.find(function (page) { return page.__route__ == pageName }) }, onLaunch: function (option) { var that = this //调用API从本地缓存中获取数据 var userToken = wx.getStorageSync('userToken') var userId = wx.getStorageSync('userId') var tourist = wx.getStorageSync('tourist') if (tourist || tourist == true ){ this.globalData.tourist = true } this.globalData.token = userToken this.globalData.userId = userId this.globalData.currentId = userId[0] console.log(userToken) // wx.navigateTo({ // url: 'pages/BloodSugerHome/BloodSugerHome' // }) if (option.query) { if (option.query.mpid) { this.globalData.openInfo.mpid = option.query.mpid wx.setStorageSync('mpid', option.query.mpid) } } var mpid = wx.getStorageSync('mpid') if(mpid){ this.globalData.openInfo.mpid = mpid } wx.login({ success: function (res) { // success that.globalData.openInfo.childCode = res.code }, fail: function (res) { // fail }, complete: function (res) { // complete } }) //聊天 WebIM.conn.listen({ onOpened: function (message) { console.log("登录成功") wx.setStorageSync('isHxOpend', true) // WebIM.conn.setPresence() // WebIM.conn.getRoster(rosters) }, onPresence: function (message) { console.log('onPresence', message) var pages = getCurrentPages() if (message.type == "unsubscribe") { pages[0].moveFriend(message) } if (message.type === "subscribe") { //console.log('MMMMMMMMMMMMMM',message.status) if (message.status === '[resp:true]') { return } else { /*同意添加好友操作的实现方法*/ WebIM.conn.subscribed({ to: message.from }); } } }, onRoster: function (message) { // console.log('onRoster', message) // var pages = getCurrentPages() // if (pages[0]) { // pages[0].onShow() // } }, onTextMessage(message){ console.log("onTextMessage", message); var page = that.getRoomPage(); if(message){ if(onMessageError(message)){ if (page && page.data != null && page.data.yourhxname && message.from == page.data.yourhxname) { page.receiveMsg(message, 'txt') }else{ var value = WebIM.parseEmoji(message.data.replace(/\n/mg, '')) var time = WebIM.time() var msgData = { info: { from: message.from, to: message.to }, username: '', yourname: message.from, serviceId: message.ext.serviceId, msg: { type: 'txt', data: value, url: message.url }, style: '', time: time, mid: 'txt' + message.id } wx.vibrateLong({ success:function() { console.log('震动调取成功') }, }) that.globalData.unrederMsg.push(msgData); } } } }, onEmojiMessage: function (message) { console.log("onEmojiMessage", message); if(message){ if(onMessageError(message)){ msgStorage.saveReceiveMsg(message, msgType.EMOJI); } calcUnReadSpot(message); //ack(message); } }, onPictureMessage(message){ console.log("onPictureMessage", message); var page = that.getRoomPage() if(message){ if(onMessageError(message)){ if (page && page.data != null && page.data.yourhxname && message.from == page.data.yourhxname) { page.receiveMsg(message, 'img') }else{ var time = WebIM.time() var msgData = { info: { from: message.from, to: message.to }, username: '', yourname: message.from, serviceId: message.ext.serviceId, msg: { type: 'img', data: message.url, url: message.url }, style: '', time: time, mid: 'img' + message.id } wx.vibrateLong({ success:function() { console.log('震动调取成功') }, }) that.globalData.unrederMsg.push(msgData); } } calcUnReadSpot(message); //ack(message); } }, onAudioMessage: function ( message ) { console.log("onAudioMessage", message); var page = that.getRoomPage() if(message){ if(onMessageError(message)){ if (page && page.data != null && page.data.yourhxname && message.from == page.data.yourhxname) { page.receiveMsg(message, 'audio') }else{ var time = WebIM.time() var msgData = { info: { from: message.from, to: message.to }, username: '', yourname: message.from, serviceId: message.ext.serviceId, msg: { type: 'audio', data: message.url, url: message.url, length : message.length, token : message.accessToken }, style: '', time: time, mid: 'audio' + message.id } wx.vibrateLong({ success:function() { console.log('震动调取成功') }, }) that.globalData.unrederMsg.push(msgData); } } calcUnReadSpot(message); //ack(message); } }, // 各种异常 onError(error){ console.log(error) // 16: server-side close the websocket connection if(error.type == WebIM.statusCode.WEBIM_CONNCTION_DISCONNECTED && !logout){ if(WebIM.conn.autoReconnectNumTotal < WebIM.conn.autoReconnectNumMax){ return; } wx.showToast({ title: "server-side close the websocket connection", duration: 1000 }); wx.redirectTo({ url: "../login/login" }); logout = true return; } // 8: offline by multi login if(error.type == WebIM.statusCode.WEBIM_CONNCTION_SERVER_ERROR){ wx.showToast({ title: "offline by multi login", duration: 1000 }); wx.redirectTo({ url: "../login/login" }); } if(error.type == WebIM.statusCode.WEBIM_CONNCTION_OPEN_ERROR){ wx.hideLoading() disp.fire("em.xmpp.error.passwordErr"); // wx.showModal({ // title: "用户名或密码错误", // confirmText: "OK", // showCancel: false // }); } if (error.type == WebIM.statusCode.WEBIM_CONNCTION_AUTH_ERROR) { wx.hideLoading() disp.fire("em.xmpp.error.tokenErr"); } if (error.type == 'socket_error') {///sendMsgError console.log('socket_errorsocket_error', error) wx.showToast({ title: "网络已断开", icon: 'none', duration: 2000 }); disp.fire("em.xmpp.error.sendMsgErr", error); } }, onOffline: function () { console.log("onOffline:") }, onOnline: function () { console.log("onOnline:") } }) }, getUserInfo: function (cb) { var that = this if (this.globalData.userInfo) { typeof cb == "function" && cb(this.globalData.userInfo) } else { //调用登录接口 wx.login({ success: function () { wx.getUserInfo({ success: function (res) { that.globalData.userInfo = res.userInfo typeof cb == "function" && cb(that.globalData.userInfo) } }) } }) } }, globalData: { userInfo: null, token: '', userId:'', openInfo: {}, artList:[], days:0, currentId:'', tourist:false, unrederMsg:[] }, }) function calcUnReadSpot(message){ let myName = wx.getStorageSync("myUsername"); let members = wx.getStorageSync("member") || []; //好友 var listGroups = wx.getStorageSync('listGroup')|| []; //群组 let allMembers = members.concat(listGroups) let count = allMembers.reduce(function(result, curMember, idx){ let chatMsgs; if (curMember.groupid) { chatMsgs = wx.getStorageSync(curMember.groupid + myName.toLowerCase()) || []; }else{ chatMsgs = wx.getStorageSync(curMember.name.toLowerCase() + myName.toLowerCase()) || []; } return result + chatMsgs.length; }, 0); getApp().globalData.unReadMessageNum = count; disp.fire("em.xmpp.unreadspot", message); } function ack(receiveMsg){ // 处理未读消息回执 var bodyId = receiveMsg.id; // 需要发送已读回执的消息id var ackMsg = new WebIM.message("read", WebIM.conn.getUniqueId()); ackMsg.set({ id: bodyId, to: receiveMsg.from }); WebIM.conn.send(ackMsg.body); } function onMessageError(err){ if(err.type === "error"){ wx.showToast({ title: err.errorText }); return false; } return true; } function getCurrentRoute(){ let pages = getCurrentPages(); let currentPage = pages[pages.length - 1]; return currentPage.route; }