const webim = require('../../../utils/webim_wx');
|
|
module.exports = {
|
/**
|
* 处理群组消息
|
* @param {*} msgs
|
* @param {*} callback
|
*/
|
handleGroupMessage(msgs, callback) {
|
for (var i = msgs.length - 1; i >= 0; i--) { //遍历消息,按照时间从后往前
|
var msg = msgs[i];
|
callback && callback(this.showMsg(msg));
|
}
|
},
|
|
/**
|
* 格式化消息
|
* @param {*} msg
|
*/
|
showMsg(msg) {
|
var isSelfSend, fromAccount, fromAccountNick, sessType, subType;
|
var ul, li, paneDiv, textDiv, nickNameSpan, contentSpan;
|
|
fromAccount = msg.getFromAccount();
|
if (!fromAccount) {
|
fromAccount = '';
|
}
|
fromAccountNick = msg.getFromAccountNick();
|
if (!fromAccountNick) {
|
fromAccountNick = '未知用户';
|
}
|
//解析消息
|
//获取会话类型,目前只支持群聊
|
//webim.SESSION_TYPE.GROUP-群聊,
|
//webim.SESSION_TYPE.C2C-私聊,
|
sessType = msg.getSession().type();
|
//获取消息子类型
|
//会话类型为群聊时,子类型为:webim.GROUP_MSG_SUB_TYPE
|
//会话类型为私聊时,子类型为:webim.C2C_MSG_SUB_TYPE
|
subType = msg.getSubType();
|
|
isSelfSend = msg.getIsSend(); //消息是否为自己发的
|
var content = "";
|
switch (subType) {
|
case webim.GROUP_MSG_SUB_TYPE.COMMON: //群普通消息
|
content = this.convertMsgtoHtml(msg);
|
break;
|
case webim.GROUP_MSG_SUB_TYPE.TIP: //群提示消息
|
content = "[群提示消息]" + this.convertMsgtoHtml(msg);
|
break;
|
default:
|
wx.showToast({
|
title: 'DEMO中展示普通消息'
|
});
|
break;
|
}
|
|
return {
|
fromAccountNick: fromAccountNick,
|
content: content
|
}
|
},
|
|
// 将msg转换为html
|
convertMsgtoHtml(msg) {
|
var html = "",
|
elems, elem, type, content;
|
elems = msg.getElems(); //获取消息包含的元素数组
|
for (var i in elems) {
|
elem = elems[i];
|
type = elem.getType(); //获取元素类型
|
content = elem.getContent(); //获取元素对象
|
switch (type) {
|
case webim.MSG_ELEMENT_TYPE.TEXT:
|
html += this.convertTextMsgToHtml(content);
|
break;
|
case webim.MSG_ELEMENT_TYPE.CUSTOM:
|
html += this.convertCustomMsgToHtml(content);
|
break;
|
|
// case webim.MSG_ELEMENT_TYPE.FACE:
|
// html += convertFaceMsgToHtml(content);
|
// break;
|
// case webim.MSG_ELEMENT_TYPE.IMAGE:
|
// html += convertImageMsgToHtml(content);
|
// break;
|
// case webim.MSG_ELEMENT_TYPE.SOUND:
|
// html += convertSoundMsgToHtml(content);
|
// break;
|
// case webim.MSG_ELEMENT_TYPE.FILE:
|
// html += convertFileMsgToHtml(content);
|
// break;
|
// case webim.MSG_ELEMENT_TYPE.LOCATION: //暂不支持地理位置
|
// //html += convertLocationMsgToHtml(content);
|
// break;
|
case webim.MSG_ELEMENT_TYPE.GROUP_TIP:
|
html += this.convertGroupTipMsgToHtml(content);
|
break;
|
|
default:
|
wx.showToast({
|
title: '未知消息元素类型: elemType=' + type
|
});
|
break;
|
}
|
}
|
return webim.Tool.formatHtml2Text(html);
|
},
|
|
/**
|
* 群提示消息
|
* @param {*} content
|
*/
|
convertGroupTipMsgToHtml(content) {
|
var WEB_IM_GROUP_TIP_MAX_USER_COUNT = 10;
|
var text = "";
|
var maxIndex = WEB_IM_GROUP_TIP_MAX_USER_COUNT - 1;
|
var opType, opUserId, userIdList;
|
var memberCount;
|
opType = content.getOpType(); //群提示消息类型(操作类型)
|
opUserId = content.getOpUserId(); //操作人id
|
switch (opType) {
|
case webim.GROUP_TIP_TYPE.JOIN: //加入群
|
userIdList = content.getUserIdList();
|
//text += opUserId + "邀请了";
|
for (var m in userIdList) {
|
text += userIdList[m] + ",";
|
if (userIdList.length > WEB_IM_GROUP_TIP_MAX_USER_COUNT && m == maxIndex) {
|
text += "等" + userIdList.length + "人";
|
break;
|
}
|
}
|
text = text.substring(0, text.length - 1);
|
text += "进入房间";
|
text += ';{"type":' + opType + ',"userIdList":"' + userIdList.join(',') + '"}';
|
//房间成员数加1
|
// memberCount = $('#user-icon-fans').html();
|
memberCount = parseInt(memberCount) + 1;
|
break;
|
case webim.GROUP_TIP_TYPE.QUIT: //退出群
|
text += opUserId + "离开房间";
|
text += ';{"type":' + opType + ',"userIdList":"' + opUserId + '"}';
|
//房间成员数减1
|
if (memberCount > 0) {
|
memberCount = parseInt(memberCount) - 1;
|
}
|
break;
|
case webim.GROUP_TIP_TYPE.KICK: //踢出群
|
text += opUserId + "将";
|
userIdList = content.getUserIdList();
|
for (var m in userIdList) {
|
text += userIdList[m] + ",";
|
if (userIdList.length > WEB_IM_GROUP_TIP_MAX_USER_COUNT && m == maxIndex) {
|
text += "等" + userIdList.length + "人";
|
break;
|
}
|
}
|
text += "踢出该群";
|
break;
|
case webim.GROUP_TIP_TYPE.SET_ADMIN: //设置管理员
|
text += opUserId + "将";
|
userIdList = content.getUserIdList();
|
for (var m in userIdList) {
|
text += userIdList[m] + ",";
|
if (userIdList.length > WEB_IM_GROUP_TIP_MAX_USER_COUNT && m == maxIndex) {
|
text += "等" + userIdList.length + "人";
|
break;
|
}
|
}
|
text += "设为管理员";
|
break;
|
case webim.GROUP_TIP_TYPE.CANCEL_ADMIN: //取消管理员
|
text += opUserId + "取消";
|
userIdList = content.getUserIdList();
|
for (var m in userIdList) {
|
text += userIdList[m] + ",";
|
if (userIdList.length > WEB_IM_GROUP_TIP_MAX_USER_COUNT && m == maxIndex) {
|
text += "等" + userIdList.length + "人";
|
break;
|
}
|
}
|
text += "的管理员资格";
|
break;
|
|
case webim.GROUP_TIP_TYPE.MODIFY_GROUP_INFO: //群资料变更
|
text += opUserId + "修改了群资料:";
|
var groupInfoList = content.getGroupInfoList();
|
var type, value;
|
for (var m in groupInfoList) {
|
type = groupInfoList[m].getType();
|
value = groupInfoList[m].getValue();
|
switch (type) {
|
case webim.GROUP_TIP_MODIFY_GROUP_INFO_TYPE.FACE_URL:
|
text += "群头像为" + value + "; ";
|
break;
|
case webim.GROUP_TIP_MODIFY_GROUP_INFO_TYPE.NAME:
|
text += "群名称为" + value + "; ";
|
break;
|
case webim.GROUP_TIP_MODIFY_GROUP_INFO_TYPE.OWNER:
|
text += "群主为" + value + "; ";
|
break;
|
case webim.GROUP_TIP_MODIFY_GROUP_INFO_TYPE.NOTIFICATION:
|
text += "群公告为" + value + "; ";
|
break;
|
case webim.GROUP_TIP_MODIFY_GROUP_INFO_TYPE.INTRODUCTION:
|
text += "群简介为" + value + "; ";
|
break;
|
default:
|
text += "未知信息为:type=" + type + ",value=" + value + "; ";
|
break;
|
}
|
}
|
break;
|
|
case webim.GROUP_TIP_TYPE.MODIFY_MEMBER_INFO: //群成员资料变更(禁言时间)
|
text += opUserId + "修改了群成员资料:";
|
var memberInfoList = content.getMemberInfoList();
|
var userId, shutupTime;
|
for (var m in memberInfoList) {
|
userId = memberInfoList[m].getUserId();
|
shutupTime = memberInfoList[m].getShutupTime();
|
text += userId + ": ";
|
if (shutupTime != null && shutupTime !== undefined) {
|
if (shutupTime == 0) {
|
text += "取消禁言; ";
|
} else {
|
text += "禁言" + shutupTime + "秒; ";
|
}
|
} else {
|
text += " shutupTime为空";
|
}
|
if (memberInfoList.length > WEB_IM_GROUP_TIP_MAX_USER_COUNT && m == maxIndex) {
|
text += "等" + memberInfoList.length + "人";
|
break;
|
}
|
}
|
break;
|
default:
|
text += "未知群提示消息类型:type=" + opType;
|
break;
|
}
|
return text;
|
},
|
|
convertTextMsgToHtml(content) {
|
return content.getText();
|
},
|
|
|
/**
|
* 自定义消息转换为字符串
|
* @param {*} content
|
*/
|
convertCustomMsgToHtml(content) {
|
var data = content.getData();
|
var desc = content.getDesc();
|
var ext = content.getExt();
|
return JSON.stringify({
|
data,
|
desc,
|
ext
|
});
|
}
|
}
|