|
@ -0,0 +1,2015 @@
|
|
|
var winHeight=window.innerHeight;//窗体高度
|
|
|
var winWidth=window.innerWidth;//窗体高度
|
|
|
var self;
|
|
|
var docInfo;
|
|
|
var teamInfo;
|
|
|
var members; //{"37906b9986f211e6b394fa163e424525": {"jobName":"","code":"37906b9986f211e6b394fa163e424525","level":0,"sex":2,"name":"叶亚娟","photo":"","id":3317,"hospital":"3502120800"}}
|
|
|
var pageSize = 10;
|
|
|
var myScroll;
|
|
|
var chatCache = {};
|
|
|
var firstMsg;
|
|
|
var offTop = 16, offBot = 52;
|
|
|
var winHei;
|
|
|
var otherCode, isPatient;
|
|
|
var observer = false;
|
|
|
var imMsg = '';
|
|
|
|
|
|
var isSend = true;
|
|
|
var andriodVideoUrl = "";//andriod录像文件地址
|
|
|
var urlRegex = new RegExp('((https|http|ftp|rtsp|mms)?://)'
|
|
|
+ '?(([0-9a-zA-Z_!~*\'().&=+$%-]+: )?[0-9a-zA-Z_!~*\'().&=+$%-]+@)?' //ftp的user@
|
|
|
+ '(([0-9]{1,3}\\.){3}[0-9]{1,3}' // IP形式的URL- 199.194.52.184
|
|
|
+ '|' // 允许IP和DOMAIN(域名)
|
|
|
+ '([0-9a-zA-Z_!~*\'()-]+\\.)*' // 域名- www.
|
|
|
+ '([0-9a-zA-Z][0-9a-zA-Z-]{0,61})?[0-9a-zA-Z]\\.' // 二级域名
|
|
|
+ '(gov|edu|int|com|cn|cx|cn|wang|cc|xin|net|org|top|tech|red|pub|ink|info|xyz|win))' // first level domain- .com or .museum
|
|
|
+ '(:[0-9]{1,4})?' // 端口- :80
|
|
|
+ '((/[0-9a-zA-Z_!~*\'().;?:@&=+$,%#-]+)+/?)?'
|
|
|
+ '((\\?[0-9a-zA-Z_!~*\'().;:@&=+$,%#-]+)+/?)?');
|
|
|
|
|
|
mui.init({
|
|
|
gestureConfig:{
|
|
|
doubletap: true,
|
|
|
longtap: true,
|
|
|
hold: true,
|
|
|
release: true
|
|
|
}
|
|
|
});
|
|
|
|
|
|
var UIPasteboard;
|
|
|
var AndroidClip;
|
|
|
var AndroidContext;
|
|
|
var AndroidMain;
|
|
|
//开启websql数据库
|
|
|
sqlite.open('MyData','1.0','My Database', 128);
|
|
|
var networkStatus = "";//当前网络状态
|
|
|
mui.plusReady(function(){
|
|
|
self = plus.webview.currentWebview();
|
|
|
var opener = self.opener();
|
|
|
if(opener && (opener.id=="jumingim.html" || opener.id=="yishengim.html")){
|
|
|
mui.fire(self.opener(), "xiaoxiUpdate");
|
|
|
}
|
|
|
|
|
|
winHei = $('body').height();
|
|
|
|
|
|
self.setStyle({
|
|
|
softinputMode: "adjustResize"
|
|
|
});
|
|
|
|
|
|
if(plus.os.name == "Android"){
|
|
|
$(".andriod-video-li").show();
|
|
|
AndroidContext = plus.android.importClass("android.content.Context");
|
|
|
AndroidMain = plus.android.runtimeMainActivity();
|
|
|
AndroidClip = AndroidMain.getSystemService(AndroidContext.CLIPBOARD_SERVICE);
|
|
|
} else{
|
|
|
$(".ios-video-li").show();
|
|
|
UIPasteboard = plus.ios.importClass("UIPasteboard");
|
|
|
}
|
|
|
|
|
|
//观察者模式隐藏输入框
|
|
|
// var userAgent = JSON.parse(plus.storage.getItem("userAgent"));
|
|
|
// if(userAgent.observer == "1"){
|
|
|
// observer = true;
|
|
|
// $("#input_div").hide();
|
|
|
// $('#wrapper1').css({top:'16px', bottom: '0px'});//也不能发送指导和教育
|
|
|
// }
|
|
|
document.addEventListener("netchange",onNetChange,false);
|
|
|
onNetChange();
|
|
|
bindEvents();
|
|
|
})
|
|
|
|
|
|
function onNetChange(){
|
|
|
var nt = plus.networkinfo.getCurrentType();
|
|
|
switch(nt){
|
|
|
case plus.networkinfo.CONNECTION_ETHERNET:
|
|
|
case plus.networkinfo.CONNECTION_WIFI:
|
|
|
networkStatus = "wifi";
|
|
|
break;
|
|
|
case plus.networkinfo.CONNECTION_CELL2G:
|
|
|
networkStatus = "2g";
|
|
|
break;
|
|
|
case plus.networkinfo.CONNECTION_CELL3G:
|
|
|
networkStatus = "3g";
|
|
|
break;
|
|
|
case plus.networkinfo.CONNECTION_CELL4G:
|
|
|
networkStatus = "4g";
|
|
|
break;
|
|
|
default:
|
|
|
mui.toast("当前没有网络");
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 获取成员信息
|
|
|
*/
|
|
|
function getMembers(callBack){
|
|
|
// if(members) {
|
|
|
// callBack? callBack() : getNewMsgs(true);
|
|
|
// } else {
|
|
|
console.log(sessionId)
|
|
|
imClient.Sessions.getParticipants(sessionId, function(rs){
|
|
|
members = {};
|
|
|
var patientCode;
|
|
|
$.each( rs , function(i, v) {
|
|
|
if(v.id!=docInfo.code)
|
|
|
otherCode = v.id;
|
|
|
if(v.is_patient==1){
|
|
|
isPatient = true;
|
|
|
patientCode = v.id;
|
|
|
}
|
|
|
members[v.id] = {
|
|
|
code: v.id,
|
|
|
name: v.name,
|
|
|
sex: v.sex,
|
|
|
photo: v.avatar,
|
|
|
role: v.role,
|
|
|
is_patient: v.is_patient,//0 医生,1 患者
|
|
|
last_fetch_time:v.last_fetch_time
|
|
|
};
|
|
|
});
|
|
|
otherCode = patientCode||otherCode;
|
|
|
callBack? callBack() : getFirstMsgs();
|
|
|
// getNewMsgs(true); //读取对话消息,
|
|
|
}, function(msg){
|
|
|
console.log("e:"+JSON.stringify(msg))
|
|
|
mui.toast("获取成员列表失败!");
|
|
|
})
|
|
|
// }
|
|
|
}
|
|
|
|
|
|
|
|
|
/*
|
|
|
* 医生缓存信息 姓名和头像
|
|
|
*/
|
|
|
function getMineInfo(){
|
|
|
myScroll = $('#contain').lscroll({
|
|
|
type: 2, pullDownMsg1: "下拉加载更多", pullDownMsg2: "松手开始加载",
|
|
|
pullDownAction: function(g){
|
|
|
getMsgList(g.options.page, false, true);
|
|
|
}, style: "top: "+ offTop +"px; bottom: "+ offBot +"px"});
|
|
|
var infoStr = plus.storage.getItem("docInfo");
|
|
|
if(infoStr) {
|
|
|
docInfo = JSON.parse(infoStr);
|
|
|
console.log(docInfo.code)
|
|
|
docName = docInfo.name;
|
|
|
docPhoto = docInfo.photo || (docInfo.sex==1 ? "../../../images/d-male.png" : "../../../images/d-female.png");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function getUserId(){
|
|
|
return docInfo.code;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* 回复消息
|
|
|
*/
|
|
|
function clickReply() {
|
|
|
var text = $("#input_content").text().trim();
|
|
|
// $("#input_content").focus()
|
|
|
if(text.length == 0) {
|
|
|
mui.toast("发送内容不能为空,请重新输入");
|
|
|
return;
|
|
|
}
|
|
|
$("#input_content").text("");
|
|
|
isSend = false;
|
|
|
showSendBtn(false);
|
|
|
uploadMsg(1, text);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 插入预浏览图片
|
|
|
* @param {Object} imgs
|
|
|
*/
|
|
|
function appendPrevImgs(imgs){
|
|
|
if(imgs){
|
|
|
var html = "";
|
|
|
$.each(imgs, function(i, v) {
|
|
|
html += '<img class="l-previmg" style="display: none;" data-code="'+ v.id +'" data-preview-src="'+ v.content +'" data-preview-group="1">';
|
|
|
});
|
|
|
$('body').prepend(html);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取未读消息成功处理(初始化获取消息)
|
|
|
* @param {Object} data
|
|
|
*/
|
|
|
function getNewMsgHandle(data, isInit) {
|
|
|
// debugger
|
|
|
console.log("newdata:" + JSON.stringify(data));
|
|
|
if(!isInit){
|
|
|
// addMsgToCache(data, true);
|
|
|
showMsg(data, false, false, true);
|
|
|
// refreshBadge();
|
|
|
}else {
|
|
|
var len = data.length;
|
|
|
if(len == 0){
|
|
|
// if(isCached){
|
|
|
// //取缓存数据,并展示信息
|
|
|
// getCacheMsg(undefined, pageSize, function(tx, rs){
|
|
|
// showMsg(rs, false, false, true);
|
|
|
// });
|
|
|
// } else {
|
|
|
//从服务端加载数据, 并插入缓存, 展示信息
|
|
|
getMsgs(1, pageSize, "", "", function(res){
|
|
|
showMsg(res, false, false, true);
|
|
|
// addMsgToCache(res, true);
|
|
|
});
|
|
|
// }
|
|
|
} else {
|
|
|
if(len < pageSize) {
|
|
|
// if(isCached){
|
|
|
// addMsgToCache(data, true);
|
|
|
// //从缓存中取剩余数据
|
|
|
// getCacheMsg(undefined, pageSize-len, function(tx, rs){
|
|
|
// rs = rs.concat(data);
|
|
|
// showMsg(rs, false, false, true);
|
|
|
// })
|
|
|
// } else {
|
|
|
//从服务端加载剩余数据
|
|
|
getMsgs( 1, pageSize-len, "", data[0].id,
|
|
|
function(res){
|
|
|
data = data.concat(res);
|
|
|
showMsg(data, false, false, true);
|
|
|
// addMsgToCache(data, true);
|
|
|
} , null, 1);
|
|
|
// }
|
|
|
} else {
|
|
|
//将消息插入缓存, 并展示信息
|
|
|
// addMsgToCache(data, true);
|
|
|
showMsg(data, false, false, true);
|
|
|
}
|
|
|
// refreshBadge();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 定位聊天记录位置
|
|
|
* @param {Object} id
|
|
|
*/
|
|
|
function locationLog(id){
|
|
|
var $logdom = $('.chat-log[data-code="'+ id +'"]');
|
|
|
if($logdom.length){
|
|
|
myScroll.scrollToElement( $logdom[0], 0, 0, -20 );
|
|
|
plus.nativeUI.closeWaiting();
|
|
|
} else {
|
|
|
getCacheMsgById(id, function(tx, data){
|
|
|
if(data.length>0){
|
|
|
getCacheMsg("", "", function(tx, ls){
|
|
|
showMsg(ls, false, true, false, true);
|
|
|
}, data[0].timestamp, true )
|
|
|
} else {
|
|
|
|
|
|
getLastCacheMsg(function(tx, msg){
|
|
|
var startmsg = msg.length>0? msg[msg.length-1] : undefined;
|
|
|
|
|
|
getMsgs(1, 1000, startmsg? startmsg.id : "", id, function(ls){
|
|
|
if(ls.length>0 && (!firstMsg || (firstMsg.timestamp<ls[0].timestamp) ))
|
|
|
firstMsg = ls[0];
|
|
|
// addMsgToCache(ls);
|
|
|
showMsg(msg.concat(ls), false, true, false, true);
|
|
|
}, function(res){
|
|
|
console.error("e:"+JSON.stringify(res))
|
|
|
})
|
|
|
|
|
|
}, lastTimestamp);
|
|
|
|
|
|
}
|
|
|
})
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 定位图片位置
|
|
|
* @param {Object} id
|
|
|
*/
|
|
|
function locationImg(id){
|
|
|
|
|
|
var $logdom = $('.chat-log[data-code="'+ id +'"]');
|
|
|
if($logdom.length){
|
|
|
myScroll.scrollToElement( $logdom[0], 0, 0, -20 );
|
|
|
plus.nativeUI.closeWaiting();
|
|
|
} else {
|
|
|
getCacheMsgById(id, function(tx, data){
|
|
|
if(data.length>0){
|
|
|
getCacheMsg("", "", function(tx, ls){
|
|
|
showMsg(ls, false, true, false, true);
|
|
|
}, data[0].timestamp, true )
|
|
|
} else {
|
|
|
|
|
|
getLastCacheMsg(function(tx, msg){
|
|
|
var startmsg = msg.length>0? msg[msg.length-1] : undefined;
|
|
|
|
|
|
getMsgs(1, 1000, startmsg? startmsg.id : "", id, function(ls){
|
|
|
if(ls.length>0 && (!firstMsg || (firstMsg.timestamp<ls[0].timestamp) ))
|
|
|
firstMsg = ls[0];
|
|
|
addMsgToCache(ls);
|
|
|
showMsg(msg.concat(ls), false, true, false, true);
|
|
|
}, function(res){
|
|
|
console.error("e:"+JSON.stringify(res))
|
|
|
})
|
|
|
|
|
|
}, lastTimestamp);
|
|
|
|
|
|
}
|
|
|
})
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 设置获取到的最后一条消息
|
|
|
*/
|
|
|
function setLastMsg(msg){
|
|
|
if(!lastTimestamp || lastTimestamp>msg.timestamp){
|
|
|
lastTimestamp = msg.timestamp;
|
|
|
lastSeq = msg.seq;
|
|
|
lastId = msg.id.indexOf("loc")==0? lastId : msg.id;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 显示消息
|
|
|
*/
|
|
|
function showMsg(msgList, isClear, isPre, appendImg, scrollToTop) {
|
|
|
if(msgList.length == 0) {
|
|
|
plus.nativeUI.closeWaiting();
|
|
|
myScroll.refresh(msgList.length==0);
|
|
|
return;
|
|
|
}
|
|
|
var html = "";
|
|
|
var preTime = 0;
|
|
|
var typeMsg = 1;
|
|
|
var doctor_img ;
|
|
|
var doctor_name = "";
|
|
|
var msg;
|
|
|
var sender;
|
|
|
//设置对方已读标志
|
|
|
var lastFetchTime = members[otherCode]?members[otherCode].last_fetch_time:new Date("1970-01-01");//对聊医生最后读取消息时间或对聊患者最后读取消息时间
|
|
|
for(var i = msgList.length - 1; i >= 0; i--) {
|
|
|
msg = msgList[i];
|
|
|
setLastMsg(msg);
|
|
|
typeMsg = parseInt(msg.content_type);
|
|
|
var contentMsg = msg.content;
|
|
|
if(typeMsg == 7 || typeMsg==10 || typeMsg==13 || typeMsg==14){
|
|
|
if(typeMsg == 7 && msg.sender_id == 'system'){
|
|
|
contentMsg = "居民24小时内未回复,系统自动结束咨询";
|
|
|
}
|
|
|
if(typeMsg != 14){ //14标记患者进入咨询
|
|
|
html += '<div class="time-tips"><div>'+ contentMsg +' </div></div>';
|
|
|
}
|
|
|
|
|
|
continue;
|
|
|
} else if(typeMsg == 5){
|
|
|
var con = JSON.parse(msg.content);
|
|
|
if(msg.sender_id == docInfo.code){
|
|
|
console.log(msg.content)
|
|
|
html += '<div class="time-tips"><div>已向'+ con.doctor_name +'医生求助<a data-name="'+ con.doctor_name +'" data-code="'+ con.doctor +'" class="qiuzhu5" href="javascript:void(0)">立即查看</a> </div></div>';
|
|
|
}
|
|
|
continue;
|
|
|
}
|
|
|
sender = members[msg.sender_id];
|
|
|
if(!sender){
|
|
|
sendPostNoAsync("doctor/baseinfo", {code:msg.sender_id}, null, function(res) {
|
|
|
if(res.status == 200) {
|
|
|
var dtemp = res.data;
|
|
|
doctor_name = dtemp.name;
|
|
|
doctor_img = getImgUrl(dtemp.photo);
|
|
|
|
|
|
members[dtemp.code] = {
|
|
|
code: dtemp.code,
|
|
|
name: dtemp.name,
|
|
|
sex: dtemp.sex,
|
|
|
photo: getImgUrl(dtemp.photo),
|
|
|
role: 1,//角色不再此讨论组中
|
|
|
is_patient: 0 //不是患者
|
|
|
};
|
|
|
sender = members[msg.sender_id];
|
|
|
}
|
|
|
});
|
|
|
}else{
|
|
|
doctor_name = sender.name;
|
|
|
// doctor_img = sender.photo ? sender.photo : (sender.avatar || "../../../images/p-default.png");
|
|
|
doctor_img = getImgUrl(sender.photo);
|
|
|
}
|
|
|
|
|
|
|
|
|
if(msg.sender_id == docInfo.code) {
|
|
|
doctor_img = getImgUrl(docInfo.photo);
|
|
|
}
|
|
|
var _class = ["chat-log"];
|
|
|
if(docInfo.code != msg.sender_id) {
|
|
|
_class.push("chat-left");
|
|
|
} else {
|
|
|
_class.push("chat-right");
|
|
|
}
|
|
|
if(inMoreOpera) _class.push("checkbox");//更多操作模式下
|
|
|
|
|
|
if(msg.timestamp - preTime > 60 * 1000) {
|
|
|
preTime = msg.timestamp;
|
|
|
var date = new Date();
|
|
|
date.setTime(msg.timestamp);
|
|
|
var time = date.format('yyyy-MM-dd hh:mm:ss');
|
|
|
html += '<div class="time-tips"><span>' + time + '</span></div>';
|
|
|
}
|
|
|
|
|
|
//type:1.文字 2.图片 3.音频
|
|
|
var temp = '<dl data-type="'+ typeMsg +'" data-code="'+ msg.id +'" class="' + _class.join(" ") + '">'+
|
|
|
'<dt style="height: auto; text-align: center;"><a><img src="' + doctor_img + '" class="c-images-cycle" /></a></dt>' +
|
|
|
'<div class="c-content"><span class="c-f12 name">' + doctor_name + '</span>';
|
|
|
var sendErrDom = "";
|
|
|
if(!msg.beforeSend && msg.id && msg.id.indexOf('loc')==0){
|
|
|
sendErrDom = "<i data-info='"+ JSON.stringify(msg) +"' class='c-tips'></i>";
|
|
|
}
|
|
|
|
|
|
//设置已读标志
|
|
|
var yiduHtml1 = '<span class="yidu"></span>';
|
|
|
var yiduHtml2 = '<span class="yidu yidu1"></span>';
|
|
|
var yiduHtml3 = '<span class="yidu yidu2"></span>';
|
|
|
if(self.id=="p2dzixun" || self.id=="p2p" && !(!msg.beforeSend && msg.id && msg.id.indexOf('loc')==0)){//医生和患者对聊、医生和医生对聊,显示是否已读
|
|
|
//var ydText = "居民已读";
|
|
|
// TODO "居民已读" 临时改为 "已读"
|
|
|
var ydText = "已读";
|
|
|
if(!isPatient){//医生对聊
|
|
|
ydText = "已读";
|
|
|
}
|
|
|
if (!isSend) {
|
|
|
ydText = '';
|
|
|
}
|
|
|
if(docInfo.code == msg.sender_id) {
|
|
|
if(msg.timestamp<=lastFetchTime){
|
|
|
yiduHtml1 = '<span class="yidu">'+ydText+'</span>';//除了视频,文章
|
|
|
yiduHtml2 = '<span class="yidu yidu1">'+ydText+'</span>';//视频、文章
|
|
|
yiduHtml3 = '<span class="yidu yidu2">'+ydText+'</span>';//图片
|
|
|
}
|
|
|
}
|
|
|
}else{//团队群聊、求助群聊不显示是否已读
|
|
|
yiduHtml1 = '';
|
|
|
yiduHtml2 = '';
|
|
|
yiduHtml3 = '';
|
|
|
}
|
|
|
|
|
|
switch(typeMsg) {
|
|
|
case 0:
|
|
|
case 1://普通文本
|
|
|
case 6://开始咨询文本
|
|
|
case 8://求助文本
|
|
|
temp += '<div class="c-msg">'+ sendErrDom + yiduHtml1+'<dd class="word-bread" data-is-doctor="' + sender.is_patient + '" data-type="1"><span>' + matchUrl(contentMsg) + '</span></dd></div>';
|
|
|
break;
|
|
|
case 2://图片
|
|
|
case 9://求助图片
|
|
|
if(msg.local_src=="data:,")
|
|
|
contentMsg = msg.content;
|
|
|
else if(msg.local_src)
|
|
|
contentMsg = msg.local_src.indexOf('data:')==0? msg.local_src: plus.io.convertLocalFileSystemURL(msg.local_src);
|
|
|
else
|
|
|
contentMsg = msg.content;
|
|
|
|
|
|
var imgUrl = contentMsg;
|
|
|
if(imgUrl.indexOf("/storage") > -1){
|
|
|
//本地图片
|
|
|
imgUrl = imgUrl;
|
|
|
}else{
|
|
|
imgUrl = getImgUrl(contentMsg);
|
|
|
}
|
|
|
temp += '<div class="c-msg">'+ sendErrDom + '<dd class="word-bread word-bread-img" data-type="2">'+yiduHtml3+'<img onload="imgLoad(this)" data-src="'+ imgUrl +'" data-code="'+ msg.id +'" data-preview-src="" data-preview-group="1" width="100" height="100" src="'+ imgUrl +'" /></dd></div>';
|
|
|
$('img.l-previmg[data-code="'+ msg.id +'"]').remove();
|
|
|
break;
|
|
|
case 3://语音
|
|
|
var rec = msg.local_src? JSON.parse(msg.local_src) : contentMsg? JSON.parse(contentMsg) : undefined;
|
|
|
if(rec){
|
|
|
var path = msg.local_src?msg.local_src:msg.content;
|
|
|
temp += "<div class='c-msg'>"+ sendErrDom + yiduHtml1+"<dd class='word-bread audio' data-type='3' data-code='"+ msg.id +"' data-audio='" + contentMsg + "' data-loc-audio='" + path +"'>"+
|
|
|
"<div style='width:"+ (rec.times*1.5+30) +"px' class='soundWav'>" +
|
|
|
"<span class='soundWavT'>"+(rec? rec.times: "") +"\'\'</span>"+
|
|
|
"</div>"+
|
|
|
"</dd></div>";
|
|
|
}
|
|
|
break;
|
|
|
case 4: //文章
|
|
|
temp += formatJyzd(contentMsg, sendErrDom,yiduHtml2, msg.timestamp);
|
|
|
// temp += '<dd class="word-bread" data-type="1"><span>' + matchUrl(contentMsg) + '</span></dd>';
|
|
|
break;
|
|
|
case 12: //视频
|
|
|
var videoInfo = msg.content.split(",");
|
|
|
var shichang = formatSeconds(videoInfo[2]);//时长
|
|
|
if(docInfo.code != msg.sender_id) {
|
|
|
temp += '<div class="c-msg"><dd data-content="'+msg.content+'" class="preview-video" data-type="12" data-video="'+getImgUrl(videoInfo[1])+'">'+yiduHtml2+
|
|
|
'<img class="video-img-left" src="'+getImgUrl(videoInfo[0])+'">'+
|
|
|
'<img class="bofang-icon-left" src="../images/bofang_icon.png">'+
|
|
|
'<img class="jianjiao-icon-left" src="../images/zuoshanjiao_bg.png">'+
|
|
|
'<span class="shichang-time-left">'+shichang+'</span>'+
|
|
|
'</dd></div>';
|
|
|
}else{
|
|
|
temp += '<div class="c-msg"><dd data-content="'+msg.content+'" class="preview-video" data-type="12" data-video="'+getImgUrl(videoInfo[1])+'">'+yiduHtml2+
|
|
|
'<img class="video-img-right" src="'+getImgUrl(videoInfo[0])+'">'+
|
|
|
'<img class="bofang-icon-right" src="../images/bofang_icon.png">'+
|
|
|
'<img class="jianjiao-icon-right" src="../images/youshanjiao_bg.png">'+
|
|
|
'<span class="shichang-time-right">'+shichang+'</span>'+
|
|
|
'</dd></div>';
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
|
html += temp + '</div></dl>';
|
|
|
}
|
|
|
if(isPre)
|
|
|
lastId = msgList[msgList.length - 1].id;
|
|
|
|
|
|
if(typeMsg != null && typeMsg != 1) {
|
|
|
$(".tw-add-detail").hide(200);
|
|
|
}
|
|
|
|
|
|
if(isClear){
|
|
|
$("#input_content").text("");
|
|
|
showSendBtn(false);
|
|
|
$("#contain").html(html);
|
|
|
}else{
|
|
|
if(isPre){
|
|
|
$("#contain").prepend(html);
|
|
|
if(scrollToTop)
|
|
|
myScroll.refreshToTop();
|
|
|
else
|
|
|
myScroll.refresh(msgList.length==0);
|
|
|
return;
|
|
|
} else {
|
|
|
$("#contain").append(html);
|
|
|
}
|
|
|
}
|
|
|
isSend = true;
|
|
|
myScroll.refreshToEnd();
|
|
|
plus.nativeUI.closeWaiting();
|
|
|
}
|
|
|
|
|
|
//毫秒转换成时分秒
|
|
|
function formatSeconds(value) {
|
|
|
var theTime = parseInt(value/1000);// 秒
|
|
|
var theTime1 = 0;// 分
|
|
|
var theTime2 = 0;// 小时
|
|
|
if(theTime > 60) {
|
|
|
theTime1 = parseInt(theTime/60);
|
|
|
theTime = parseInt(theTime%60);
|
|
|
if(theTime1 > 60) {
|
|
|
theTime2 = parseInt(theTime1/60);
|
|
|
theTime1 = parseInt(theTime1%60);
|
|
|
}
|
|
|
}
|
|
|
var result = ""+parseInt(theTime);//秒
|
|
|
if(parseInt(theTime)<=9){
|
|
|
result = "0"+parseInt(theTime);//秒
|
|
|
}
|
|
|
if(theTime1 > 0) {//分
|
|
|
if(parseInt(theTime1)>9){
|
|
|
result = ""+parseInt(theTime1)+":"+result;
|
|
|
}else{
|
|
|
result = "0"+parseInt(theTime1)+":"+result;
|
|
|
}
|
|
|
}
|
|
|
if(theTime2 > 0) {//小时
|
|
|
if(parseInt(theTime2)>9){
|
|
|
result = ""+parseInt(theTime2)+":"+result;
|
|
|
}else{
|
|
|
result = "0"+parseInt(theTime2)+":"+result;
|
|
|
}
|
|
|
}
|
|
|
var resResult = "";
|
|
|
if(result.split(":").length==1){//秒
|
|
|
resResult = "00:"+result;
|
|
|
}else if(result.split(":").length==2){//分
|
|
|
resResult = "00:"+result;
|
|
|
}else{//时
|
|
|
resResult = result;
|
|
|
}
|
|
|
return resResult;
|
|
|
}
|
|
|
function formatJyzd(msg, sendErrDom,yiduHtml, timestamp){
|
|
|
// {"title":"2016年春节放假调休门诊安排通知","id":"ff1b39cfdf6a482c958140ba768474cc","img":"http://f1.yihuimg.com/TFS/upfile/WBJ/111/2016-02-05/160294_1454633481085_fullsize.png","content":"为了您的健康,我给您发送了一篇文章,请咨询查阅,如有问题,可随时与我沟通"}
|
|
|
if(msg){
|
|
|
//针对\n,\r等特殊字符,在json转换时会报错
|
|
|
msg = msg.replace(/\n/g, "\\n");
|
|
|
msg = msg.replace(/\r/g, "\\r");
|
|
|
msg = JSON.parse(msg);
|
|
|
// msg.img = msg.type==1? "../../../images/jkjl_share.png" : msg.img;
|
|
|
var imgHtml = '';
|
|
|
if(msg.type == 1){ //健康记录
|
|
|
msg.img = "../../../images/jkjl_share.png";
|
|
|
imgHtml = '<img src="'+msg.img+'">';
|
|
|
}else if(msg.type == 2){ //健康指导
|
|
|
var img = msg.img.split(",");
|
|
|
if(img[0] && img[0] != "null"){
|
|
|
msg.img = getImgUrl(img[0]);
|
|
|
}else{
|
|
|
msg.img = "../../../images/default_share_blue.png";
|
|
|
}
|
|
|
imgHtml = '<img src="'+msg.img+'">';
|
|
|
}else{ //健康教育
|
|
|
if(msg.img && msg.img!="null"){
|
|
|
msg.img = getImgUrl(msg.img);
|
|
|
imgHtml = '<img src="'+msg.img+'">';
|
|
|
}
|
|
|
}
|
|
|
var temp =
|
|
|
'<div class="c-msg">'+ sendErrDom +'<dd class="word-bread word-article" data-code="'+ msg.id+'" data-inner-type="'+ msg.type +'" data-type="4" data-time="'+timestamp+'">'
|
|
|
+ yiduHtml
|
|
|
+ '<h4 class="text-ellipsis c-f18">'+ msg.title +'</h4>'
|
|
|
+ '<div class="article-content">'+imgHtml
|
|
|
+ '<div>'+ msg.content+'</div>'
|
|
|
+ '</div>'
|
|
|
+ '</dd></div>';
|
|
|
return temp;
|
|
|
}
|
|
|
return "";
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 缓存消息
|
|
|
* @param {Object} data
|
|
|
*/
|
|
|
function addMsgToCache(list, appendImg) {
|
|
|
|
|
|
// id TEXT, sender_id TEXT, sender_name TEXT, content_type TEXT,
|
|
|
// content TEXT, timestamp TEXT, local_src TEXT, seq
|
|
|
isCached = true;
|
|
|
var tmp ;
|
|
|
sqlite.db.transaction(function(tx){
|
|
|
for(var i=0; i<list.length; i++){
|
|
|
tmp = list[i];
|
|
|
|
|
|
tx.executeSql(
|
|
|
'INSERT INTO '+ tableName +
|
|
|
' (id, sender_id, sender_name, content_type, content, timestamp, local_src) '+
|
|
|
' VALUES(?,?,?,?,?,?,?)',
|
|
|
[
|
|
|
tmp.id, tmp.sender_id, tmp.sender_name, tmp.content_type,
|
|
|
tmp.content, tmp.timestamp, tmp.local_src || ""
|
|
|
],
|
|
|
function(tx, rs){
|
|
|
console.log(rs)
|
|
|
}, function(tx, rs){
|
|
|
console.log(rs)
|
|
|
});
|
|
|
}
|
|
|
}, function(rs){
|
|
|
console.error(JSON.stringify(rs));
|
|
|
})
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* 刷新数字角标
|
|
|
*/
|
|
|
function refreshBadge(){
|
|
|
var userId = plus.storage.getItem('im_userid');
|
|
|
imClient.Application.getBadgeNo(userId, function(result) {
|
|
|
console.log(JSON.stringify(result));
|
|
|
try {
|
|
|
if (result && result.badge != null) {
|
|
|
plus.runtime.setBadgeNumber(result.badge);
|
|
|
}
|
|
|
} catch (e) {
|
|
|
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
|
|
|
|
|
|
/*
|
|
|
* 附加功能
|
|
|
*/
|
|
|
$(".tw-add").click(function() {
|
|
|
$(".tw-add-detail").toggle(200);
|
|
|
});
|
|
|
|
|
|
var recordCancel = false;
|
|
|
var recorder = null;
|
|
|
var audio_tips = document.getElementById("audio_tips");
|
|
|
var startTimestamp = null;
|
|
|
var stopTimestamp = null;
|
|
|
var stopTimer = null;
|
|
|
var timer = null;
|
|
|
var MIN_SOUND_TIME = 800;
|
|
|
var isEnded = false;
|
|
|
var ui = {
|
|
|
body: document.querySelector('body'),
|
|
|
btnMsgType: document.querySelector('#msg-type'),
|
|
|
boxMsgText: document.querySelector('#msg-text'),
|
|
|
boxMsgSound: document.querySelector('#msg-sound'),
|
|
|
btnMsgImage: document.querySelector('#msg-image'),
|
|
|
areaMsgList: document.querySelector('#msg-list'),
|
|
|
boxSoundAlert: document.querySelector('#sound-alert')
|
|
|
};
|
|
|
|
|
|
ui.boxMsgSound.addEventListener('hold', function(){
|
|
|
$(this).addClass('yy-hold');
|
|
|
$(".audio").removeClass("active");
|
|
|
recordCancel = false;
|
|
|
if(stopTimer)clearTimeout(stopTimer);
|
|
|
audio_tips.innerHTML = "手指上划,取消发送";
|
|
|
ui.boxSoundAlert.classList.remove('rprogress-sigh');
|
|
|
setSoundAlertVisable(true);
|
|
|
recorder = plus.audio.getRecorder();
|
|
|
if (recorder == null) {
|
|
|
plus.nativeUI.toast("不能获取录音对象");
|
|
|
return;
|
|
|
}
|
|
|
startTimestamp = (new Date()).getTime();
|
|
|
timer = setInterval(function(){
|
|
|
var t = (new Date()).getTime();
|
|
|
if( Math.round( (t-startTimestamp)/1000 ) >=60){
|
|
|
clearInterval(timer);
|
|
|
recordEnd();
|
|
|
mui.toast("最多录制60秒");
|
|
|
isEnded = true;
|
|
|
}
|
|
|
}, 1000)
|
|
|
recorder.record({
|
|
|
filename: "_doc/audio/",
|
|
|
format: "amr"
|
|
|
}, function(path) {
|
|
|
if (recordCancel) return;
|
|
|
var recTime = Math.round((stopTimestamp - startTimestamp)/1000) ;
|
|
|
var p = JSON.stringify(plus.io.convertLocalFileSystemURL( path ));
|
|
|
uploadMsg(3, "", {path: path, times: recTime>60? 60 : recTime}, true, function(data){
|
|
|
uploadImg(data)
|
|
|
});
|
|
|
}, function(e) {
|
|
|
plus.nativeUI.toast("录音时出现异常: " + e.message);
|
|
|
});
|
|
|
})
|
|
|
|
|
|
function recordEnd(event) {
|
|
|
if(isEnded){
|
|
|
isEnded = false;
|
|
|
return;
|
|
|
}
|
|
|
clearInterval(timer);
|
|
|
$(ui.boxMsgSound).removeClass('yy-hold');
|
|
|
if (audio_tips.classList.contains("cancel")) {
|
|
|
audio_tips.classList.remove("cancel");
|
|
|
audio_tips.innerHTML = "手指上划,取消发送";
|
|
|
}
|
|
|
|
|
|
stopTimestamp = (new Date()).getTime();
|
|
|
if (stopTimestamp - startTimestamp < MIN_SOUND_TIME) {
|
|
|
audio_tips.innerHTML = "录音时间太短";
|
|
|
ui.boxSoundAlert.classList.add('rprogress-sigh');
|
|
|
recordCancel = true;
|
|
|
stopTimer=setTimeout(function(){
|
|
|
setSoundAlertVisable(false);
|
|
|
},800);
|
|
|
}else{
|
|
|
setSoundAlertVisable(false);
|
|
|
}
|
|
|
recorder.stop();
|
|
|
}
|
|
|
|
|
|
ui.boxMsgSound.addEventListener('release', recordEnd, false);
|
|
|
|
|
|
ui.body.addEventListener('drag', function(event) {
|
|
|
if (Math.abs(event.detail.deltaY) > 50) {
|
|
|
if (!recordCancel) {
|
|
|
recordCancel = true;
|
|
|
if (!audio_tips.classList.contains("cancel")) {
|
|
|
audio_tips.classList.add("cancel");
|
|
|
}
|
|
|
audio_tips.innerHTML = "松开手指,取消发送";
|
|
|
}
|
|
|
} else {
|
|
|
if (recordCancel) {
|
|
|
recordCancel = false;
|
|
|
if (audio_tips.classList.contains("cancel")) {
|
|
|
audio_tips.classList.remove("cancel");
|
|
|
}
|
|
|
audio_tips.innerHTML = "手指上划,取消发送";
|
|
|
}
|
|
|
}
|
|
|
}, false);
|
|
|
|
|
|
var setSoundAlertVisable=function(show){
|
|
|
if(show){
|
|
|
ui.boxSoundAlert.style.display = 'block';
|
|
|
ui.boxSoundAlert.style.opacity = 1;
|
|
|
}else{
|
|
|
ui.boxSoundAlert.style.opacity = 0;
|
|
|
//fadeOut 完成再真正隐藏
|
|
|
setTimeout(function(){
|
|
|
ui.boxSoundAlert.style.display = 'none';
|
|
|
},200);
|
|
|
}
|
|
|
};
|
|
|
|
|
|
$(".yy-add").click(function() {
|
|
|
if($('#msg-sound:visible').length){
|
|
|
$ipt_content.show();
|
|
|
ui.boxMsgSound.style.display = 'none';
|
|
|
$(this).find('img:eq(0)').show().next().hide();
|
|
|
} else {
|
|
|
$ipt_content.hide();
|
|
|
ui.boxMsgSound.style.display = 'block';
|
|
|
$(this).find('img:eq(0)').hide().next().show();
|
|
|
}
|
|
|
|
|
|
});
|
|
|
|
|
|
var inMoreOpera = false;
|
|
|
var $logOper = $('.log-oper');
|
|
|
var $curChatLog;
|
|
|
$('#contain').on('longtap', '.word-bread[data-type!="4"][data-type!="3"],.preview-video[data-type="12"]', function(e){
|
|
|
//弹出操作菜单 复制、转发、更多
|
|
|
if(!inMoreOpera){
|
|
|
var w = 264;//264
|
|
|
if($(this).attr('data-type') != 1){
|
|
|
w = 114;
|
|
|
$logOper.find('.fz').hide();
|
|
|
$logOper.find('.kjhf').hide();
|
|
|
} else {
|
|
|
$logOper.find('.fz').show();
|
|
|
$logOper.find('.kjhf').show();
|
|
|
}
|
|
|
if ($(this).attr('data-type') == 1 && $(this).attr('data-is-doctor') == 0) {
|
|
|
w = 378;
|
|
|
imMsg = $(this).find('span').html();
|
|
|
$('.zdmb').show();
|
|
|
} else {
|
|
|
$('.zdmb').hide();
|
|
|
}
|
|
|
|
|
|
// alert(w);
|
|
|
var sx = e.originalEvent.detail.touches[0].screenX;
|
|
|
var left = 0;
|
|
|
if(sx-(w/2)<0){
|
|
|
left = 0;
|
|
|
} else if(sx+(w/2)>winWidth) {
|
|
|
left = winWidth - w;
|
|
|
} else {
|
|
|
left = sx - (w/2);
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var top = e.originalEvent.detail.touches[0].screenY - 56;
|
|
|
$logOper.find('div').css('left', (sx-left)+ 'px');
|
|
|
$logOper.css({'top': top +'px', 'left': left + 'px', 'display': '-webkit-box'});
|
|
|
$curChatLog = $(this).parent().parent();
|
|
|
|
|
|
if (w == 378) {
|
|
|
var wW = $(window).width(),
|
|
|
c = wW - w,
|
|
|
ol = $logOper[0].offsetLeft;
|
|
|
if ((ol + w) > wW) {
|
|
|
left = c;
|
|
|
$logOper.css({'top': top +'px', 'left': left + 'px', 'display': '-webkit-box'});
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
return false;
|
|
|
}
|
|
|
}).on('tap', '.chat-log', function(){
|
|
|
//选择聊天记录
|
|
|
if(inMoreOpera){
|
|
|
$(this).toggleClass('checked');
|
|
|
return false;
|
|
|
}
|
|
|
}).on('tap', '.c-tips', function(){
|
|
|
var tips = $(this);
|
|
|
if(tips.length==0) return false;
|
|
|
dialog({
|
|
|
content:'重发该消息?',
|
|
|
okValue:'重发',
|
|
|
ok: function() {
|
|
|
var data = JSON.parse(tips.attr('data-info'));
|
|
|
if(data.content_type==2){
|
|
|
uploadImg(data);
|
|
|
} else if(data.content_type==3){
|
|
|
|
|
|
} else {
|
|
|
sendMsg(data);
|
|
|
}
|
|
|
tips.remove();
|
|
|
},
|
|
|
cancelValue: '取消',
|
|
|
cancel: function () {
|
|
|
return;
|
|
|
}
|
|
|
}).showModal();
|
|
|
|
|
|
return false;
|
|
|
}).on('tap', '.word-bread[data-type="3"]', function(){
|
|
|
$('#contain').find('.word-bread[data-type="3"]').removeClass("active");
|
|
|
var $dom = $(this);
|
|
|
var loc = $(this).attr('data-loc-audio');
|
|
|
$dom.addClass('active');
|
|
|
if(!loc){
|
|
|
var ser = $(this).attr('data-audio');
|
|
|
if(ser){
|
|
|
ser = JSON.parse(ser);
|
|
|
//下载
|
|
|
var path = "_doc/audio/"+new Date().getTime()+".wav";
|
|
|
var dtask = plus.downloader.createDownload( ser.path, {
|
|
|
filename: path
|
|
|
},
|
|
|
function ( d, status ) {
|
|
|
if ( status == 200 ) {
|
|
|
//更新数据,播放语音
|
|
|
playRecord(path, $dom);
|
|
|
} else {
|
|
|
$dom.removeClass('active');
|
|
|
mui.toast("下载语音失败!");
|
|
|
}
|
|
|
});
|
|
|
dtask.start();
|
|
|
} else{
|
|
|
$dom.removeClass('active');
|
|
|
mui.toast("语音数据丢失!");
|
|
|
}
|
|
|
} else {
|
|
|
loc = JSON.parse(loc);
|
|
|
var filename = "_doc/audio/",
|
|
|
path = "";
|
|
|
if(loc.path.indexOf(filename) > -1){
|
|
|
path = loc.path;
|
|
|
}else{
|
|
|
path = getImgUrl(loc.path);
|
|
|
}
|
|
|
//播放语音
|
|
|
playRecord(path, $dom);
|
|
|
}
|
|
|
}).on('tap', '.preview-video[data-type="12"]', function(){//播放视频
|
|
|
var url = $(this).attr('data-video');
|
|
|
if(plus.os.name=="iOS"){//ios
|
|
|
$(document.body).find('video').remove();
|
|
|
var html = '<video controls style="display:none;" preload="auto" width="1" height="1" src="'+url+'" ></video>';
|
|
|
$(document.body).append(html);
|
|
|
var video = $(document.body).find('video')[0];
|
|
|
video.play();
|
|
|
}else{//andriod
|
|
|
var Intent = plus.android.importClass("android.content.Intent");
|
|
|
var Uri = plus.android.importClass("android.net.Uri");
|
|
|
var main = plus.android.runtimeMainActivity();
|
|
|
var intent=new Intent(Intent.ACTION_VIEW);
|
|
|
var uri=Uri.parse(url);
|
|
|
intent.setDataAndType(uri,"video/*");
|
|
|
main.startActivity(intent);
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
var player;
|
|
|
var $playDom = false;
|
|
|
function playRecord(path, dom){
|
|
|
var isPlayBenDi = path.indexOf('.amr')>=0;
|
|
|
if($playDom){
|
|
|
if(player){
|
|
|
if(plus.os.name=="iOS" && !isPlayBenDi){//ios
|
|
|
player.pause();
|
|
|
}else{
|
|
|
player.stop();
|
|
|
}
|
|
|
$playDom.removeClass('active');
|
|
|
if($playDom.attr('data-code') == dom.attr('data-code')){
|
|
|
$playDom = false;
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}
|
|
|
$playDom = dom;
|
|
|
if(plus.os.name=="iOS" && !isPlayBenDi){//ios
|
|
|
$(document.body).find('audio').remove();
|
|
|
var html = '<audio preload="auto" src="'+path+'"></audio>';
|
|
|
$(document.body).append(html);
|
|
|
player = $(document.body).find('audio')[0];
|
|
|
player.play();
|
|
|
player.addEventListener('ended', function () {
|
|
|
$playDom.removeClass('active');
|
|
|
$playDom = false;
|
|
|
}, false);
|
|
|
}else{//andriod
|
|
|
player = plus.audio.createPlayer(path);
|
|
|
player.play(function() {
|
|
|
$playDom.removeClass('active');
|
|
|
$playDom = false;
|
|
|
}, function(e) {
|
|
|
$playDom.removeClass('active');
|
|
|
$playDom = false;
|
|
|
});
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
/**
|
|
|
* 批量操作按钮事件
|
|
|
*/
|
|
|
$logOper.on('touchstart', '.pl', function(){
|
|
|
inMoreOpera = true;
|
|
|
$logOper.hide();
|
|
|
$curChatLog.addClass('checked');
|
|
|
$('.chat-log[data-type!=4][data-type!=3]').addClass('checkbox');
|
|
|
$('#input_div').addClass('c-hide');
|
|
|
$('.footer-bar').removeClass('c-hide');
|
|
|
|
|
|
$('#qun_detail').hide();
|
|
|
$('#cancel').show();
|
|
|
myScroll.refresh();
|
|
|
})
|
|
|
|
|
|
/**
|
|
|
* 复制操作按钮事件
|
|
|
*/
|
|
|
$logOper.on('touchstart', '.fz', function(){
|
|
|
$logOper.hide();
|
|
|
copy($curChatLog.find('.word-bread span').text(), 1);
|
|
|
return false;
|
|
|
})
|
|
|
|
|
|
/**
|
|
|
* 转发操作按钮事件
|
|
|
*/
|
|
|
$logOper.on('touchstart', '.zf', function(){
|
|
|
$logOper.hide();
|
|
|
var type = $curChatLog.find('.word-bread').attr("data-type");
|
|
|
var text = "";
|
|
|
if(type=="1"){//文本
|
|
|
var $d = $curChatLog.find('.word-bread span');
|
|
|
text = $d.text();
|
|
|
}else {
|
|
|
if($curChatLog.closest("dl").attr("data-type")=="12"){//视频
|
|
|
text = $curChatLog.find(".c-msg dd").attr("data-content");
|
|
|
type = 12;
|
|
|
}else{//图片
|
|
|
var $d = $curChatLog.find('.word-bread img');
|
|
|
text = $d.attr('data-src');
|
|
|
type = 2;
|
|
|
}
|
|
|
}
|
|
|
toZf([{content: text, type: type}]);
|
|
|
return false;
|
|
|
})
|
|
|
|
|
|
/**
|
|
|
* 快捷回复操作按钮事件
|
|
|
*/
|
|
|
$logOper.on('touchstart', '.kjhf', function(){
|
|
|
$logOper.hide();
|
|
|
var $d = $curChatLog.find('.word-bread span');
|
|
|
var text = "";
|
|
|
if($d.length > 0){
|
|
|
text = $d.text();
|
|
|
service.replyAdd(text);
|
|
|
}
|
|
|
return false;
|
|
|
})
|
|
|
/**
|
|
|
* 添加指导模板操作按钮事件
|
|
|
*/
|
|
|
$logOper.on('touchstart', '.zdmb', function(){
|
|
|
$logOper.hide();
|
|
|
dialog({
|
|
|
content: "是否确认将内容添加到指导模板?",
|
|
|
okValue: "立即添加",
|
|
|
ok: function(){
|
|
|
openWebview('../../hzzd/html/edit_guidance.html',{action: "add",reference: 'mine', pageid:self.id, msg: imMsg});
|
|
|
},
|
|
|
cancelValue: "不了,谢谢",
|
|
|
cancel: function(){}
|
|
|
}).showModal();
|
|
|
// return false;
|
|
|
})
|
|
|
/**
|
|
|
* 转发操作按钮事件
|
|
|
*/
|
|
|
$('#plzf').on('touchstart', function(){
|
|
|
var msgs = [];
|
|
|
var text = "";
|
|
|
var $d;
|
|
|
var type;
|
|
|
$.each($('.chat-log.checked'), function(i, v) {
|
|
|
type = $(v).find('.word-bread').attr("data-type");
|
|
|
if(type=="1"){//文本
|
|
|
$d = $(v).find('.word-bread span');
|
|
|
text = $d.text();
|
|
|
}else {
|
|
|
if($(v).attr("data-type")=="12"){//视频
|
|
|
text = $(v).find(".c-msg dd").attr("data-content");
|
|
|
type = 12;
|
|
|
}else{
|
|
|
$d = $(v).find('.word-bread img');
|
|
|
text = $d.attr('src');
|
|
|
type = 2;
|
|
|
}
|
|
|
}
|
|
|
msgs.push({content: text, type: type});
|
|
|
});
|
|
|
toZf(msgs);
|
|
|
return false;
|
|
|
})
|
|
|
|
|
|
/**
|
|
|
* 跳转转发界面
|
|
|
* @param {Object} texts
|
|
|
*/
|
|
|
function toZf(texts){
|
|
|
mui.openWindow({
|
|
|
url: "zhuanfa.html",
|
|
|
id: "zhuanfa.html",
|
|
|
extras: {
|
|
|
imMessages: texts
|
|
|
}
|
|
|
})
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 复制
|
|
|
* @param {Object} content
|
|
|
* @param {Object} type
|
|
|
*/
|
|
|
function copy(content, type){
|
|
|
|
|
|
if(plus.os.name == "Android"){
|
|
|
if(type == 1)
|
|
|
plus.android.invoke(AndroidClip, "setText", content);
|
|
|
else{
|
|
|
// ClipData clip = ClipData.newUri(AndroidMain.getContentResolver(), "URI", copyUri);
|
|
|
// plus.android.invoke(AndroidClip, "setPrimaryClip", clip);
|
|
|
}
|
|
|
} else {
|
|
|
var generalPasteboard = UIPasteboard.generalPasteboard();
|
|
|
// 设置/获取文本内容:
|
|
|
if(type == 1)
|
|
|
generalPasteboard.setValueforPasteboardType(content, "public.utf8-plain-text");
|
|
|
else
|
|
|
generalPasteboard.setDataforPasteboardType(content, "public.png");
|
|
|
// UIPasteboard.generalPasteboard().setData(fileData, forPasteboardType: "public.png")
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 还原批量操作状态
|
|
|
*/
|
|
|
function revertPl(){
|
|
|
if(inMoreOpera){
|
|
|
inMoreOpera = false;
|
|
|
$('.chat-log').removeClass('checkbox checked');
|
|
|
$('#input_div').removeClass('c-hide');
|
|
|
$('.footer-bar').addClass('c-hide');
|
|
|
$('#qun_detail').show();
|
|
|
$('#cancel').hide();
|
|
|
myScroll.refresh();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 取消按钮事件
|
|
|
*/
|
|
|
$('#cancel').on('tap', function(){
|
|
|
revertPl();
|
|
|
})
|
|
|
|
|
|
var touchLogOper = false;
|
|
|
// $('.log-oper').on('touchstart', function(){
|
|
|
// touchLogOper = true;
|
|
|
// })
|
|
|
|
|
|
/**
|
|
|
* 点击任意地方 关闭操作菜单
|
|
|
*/
|
|
|
$('body').on('touchstart', function(){
|
|
|
if($('.log-oper:visible').length){
|
|
|
$logOper.hide();
|
|
|
return false;
|
|
|
}
|
|
|
})
|
|
|
|
|
|
/**
|
|
|
* 显示发送按钮的事件
|
|
|
*/
|
|
|
var valLen = 0;
|
|
|
var $ipt_content = $('#input_content');
|
|
|
$ipt_content.on('input', function(e){
|
|
|
showSendBtn($(this).text())
|
|
|
})
|
|
|
.on('tap', function(){
|
|
|
$(".tw-add-detail").hide();
|
|
|
$ipt_content.focus();
|
|
|
mui.later(scrollToEnd, 300);
|
|
|
})
|
|
|
|
|
|
function scrollToEnd(){
|
|
|
if(winHei-$('body').height() > 0){
|
|
|
myScroll.scrollToEnd(500);
|
|
|
$ipt_content.focus();
|
|
|
}
|
|
|
else {
|
|
|
mui.later(scrollToEnd, 100);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function showSendBtn(isShow){
|
|
|
if(isShow){
|
|
|
$('.tw-add').hide();
|
|
|
$('#reply').fadeIn('fast', 'swing');
|
|
|
} else if(valLen == 1 || isShow==false){
|
|
|
$('#reply').fadeOut('fast', 'swing', function(){
|
|
|
$('.tw-add').show();
|
|
|
});
|
|
|
}
|
|
|
valLen = isShow ? isShow.length : 0;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* 发送照片
|
|
|
*/
|
|
|
function clickGallery() {
|
|
|
plus.gallery.pick(function(path) {
|
|
|
var lastIdx = path.lastIndexOf("/"),
|
|
|
imgName = path;
|
|
|
if(lastIdx>-1) {
|
|
|
imgName = path.slice(lastIdx+1);
|
|
|
}
|
|
|
var locSrc= "_doc/chat/gallery/" + imgName;
|
|
|
plus.zip.compressImage({
|
|
|
src: path,
|
|
|
dst: locSrc,
|
|
|
quality: 20,
|
|
|
overwrite: true
|
|
|
}, function(e) {
|
|
|
console.log(e.target)
|
|
|
uploadMsg(2, "", locSrc, true, function(data){
|
|
|
uploadImg(data);
|
|
|
});
|
|
|
|
|
|
}, function(err) {
|
|
|
console.error("压缩失败:" + err.message);
|
|
|
});
|
|
|
|
|
|
}, function(err) {});
|
|
|
};
|
|
|
|
|
|
function uploadImg(data){
|
|
|
var task = plus.uploader.createUpload(server + "upload/chat?type="+data.content_type, {
|
|
|
method: "post"
|
|
|
}, function(t, sta) {
|
|
|
if(sta == 200) {
|
|
|
var msg = t.responseText;
|
|
|
var oImg = JSON.parse(msg);
|
|
|
if(oImg.status==200){
|
|
|
var imgUrl = oImg.urls;
|
|
|
var re = new RegExp("\\\\", "g");
|
|
|
imgUrl = imgUrl.replace(re, "/");
|
|
|
if(data.content_type==3){
|
|
|
var loc = JSON.parse(data.local_src);
|
|
|
data.content = JSON.stringify({path: imgUrl, times: loc.times});
|
|
|
} else {
|
|
|
if($("#contain").find("dl:last").attr("data-code").substring(0,3)=="loc"){//上传图片成功后,更新图片url
|
|
|
$("#contain").find("dl:last").find("dd img").attr("src",getImgUrl(imgUrl)).attr("data-src",getImgUrl(imgUrl));
|
|
|
}
|
|
|
data.content = imgUrl;
|
|
|
}
|
|
|
sendMsg(data);
|
|
|
} else {
|
|
|
mui.toast("发送失败,请重试!");
|
|
|
showResend(data);
|
|
|
}
|
|
|
} else {
|
|
|
mui.toast("发送失败,请重试!");
|
|
|
showResend(data);
|
|
|
}
|
|
|
});
|
|
|
if(data.content_type==3){
|
|
|
var loc = JSON.parse(data.local_src);
|
|
|
task.addFile(loc.path, {});
|
|
|
} else {
|
|
|
task.addFile(data.local_src, {});
|
|
|
}
|
|
|
task.start();
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* 拍照
|
|
|
*/
|
|
|
function clickCamera() {
|
|
|
var cmr = plus.camera.getCamera();
|
|
|
var res = cmr.supportedImageResolutions[0];
|
|
|
var fmt = cmr.supportedImageFormats[0];
|
|
|
cmr.captureImage(function(path) {
|
|
|
plus.io.resolveLocalFileSystemURL(path, function(entry) {
|
|
|
var localUrl = entry.toLocalURL();
|
|
|
var lastIdx = localUrl.lastIndexOf("/"),
|
|
|
imgName = localUrl;
|
|
|
if(lastIdx>-1) {
|
|
|
imgName = localUrl.slice(lastIdx+1);
|
|
|
}
|
|
|
var locSrc= "_doc/chat/camera/" + imgName;
|
|
|
plus.zip.compressImage({
|
|
|
src: localUrl,
|
|
|
dst: locSrc,
|
|
|
quality: 20,
|
|
|
overwrite: true
|
|
|
}, function(e) {
|
|
|
uploadMsg(2, "", locSrc, true, function(data){
|
|
|
uploadImg(data);
|
|
|
});
|
|
|
|
|
|
}, function(err) {
|
|
|
console.log("压缩失败: " + err.message);
|
|
|
});
|
|
|
});
|
|
|
}, function(err) {
|
|
|
if(err.code==11 && err.message == "null") {
|
|
|
plus.nativeUI.toast("您尚未授权拍照权限,无法使用拍照功能。");
|
|
|
}
|
|
|
console.error("拍照失败:" + err.message);
|
|
|
}, {
|
|
|
index: 1
|
|
|
});
|
|
|
};
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 更新信息事件
|
|
|
*/
|
|
|
window.addEventListener("update", function() {
|
|
|
console.log("update");
|
|
|
getNewMsgs(false);
|
|
|
});
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 后台返回应用时获取消息
|
|
|
*/
|
|
|
document.addEventListener("resume", function() {
|
|
|
console.log("运行环境从后台切换到前台事件")
|
|
|
getNewMsgs(false);
|
|
|
connectSocket();
|
|
|
}, false);
|
|
|
|
|
|
//运行环境从前台切换到后台事件
|
|
|
document.addEventListener("pause", function() {
|
|
|
console.log("运行环境从前台切换到后台事件")
|
|
|
logoutSocketConnect();
|
|
|
}, false);
|
|
|
|
|
|
/**
|
|
|
* 还原转发状态
|
|
|
*/
|
|
|
document.addEventListener("revertZf", function() {
|
|
|
$logOper.hide();
|
|
|
revertPl();
|
|
|
hideMenu();
|
|
|
prevImage.close();
|
|
|
// getNewMsgs();
|
|
|
});
|
|
|
|
|
|
function backToParent(){
|
|
|
// var old_back = mui.back;
|
|
|
mui.back = function() {
|
|
|
var wv = self.opener();
|
|
|
if(wv){
|
|
|
mui.fire(wv, "xiaoxiUpdate");
|
|
|
}
|
|
|
self.close();
|
|
|
// old_back();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function matchUrl(content){
|
|
|
var a = urlRegex.exec(content);
|
|
|
if(a){
|
|
|
var ah = '<a class="urlMatch" href="javascript:void(0)">'+ a[0] +'</a>';
|
|
|
var str = "";
|
|
|
var s = content.split(a[0]);
|
|
|
// var i = content.indexOf(a[0]);
|
|
|
for(var i=0; i<s.length; i++){
|
|
|
if(i==s.length-1)
|
|
|
str += s[i];
|
|
|
else
|
|
|
str += s[i] + ah;
|
|
|
}
|
|
|
return str;
|
|
|
}
|
|
|
return content;
|
|
|
}
|
|
|
|
|
|
$('body').on('tap', '.urlMatch', function(){
|
|
|
mui.openWindow("../../browser/html/browser.html", "browser", {
|
|
|
extras: {
|
|
|
url: $(this).html()
|
|
|
}
|
|
|
})
|
|
|
})
|
|
|
|
|
|
$('body')
|
|
|
//隐藏打开的附加功能
|
|
|
.on('touchstart', '#wrapper1', function(){
|
|
|
$('.tw-add-detail').hide();
|
|
|
$ipt_content.blur();
|
|
|
})
|
|
|
//点击健康教育文章连接
|
|
|
.on('tap', '.word-article', function(){
|
|
|
var type = $(this).attr('data-inner-type');
|
|
|
var code = $(this).attr('data-code');
|
|
|
if(type==1){
|
|
|
mui.openWindow('../../jkjl/html/health-record.html', 'health-record', {
|
|
|
extras: {
|
|
|
patientCode: code,
|
|
|
qyRelation: 0
|
|
|
}
|
|
|
});
|
|
|
}else if(type == 2){
|
|
|
mui.openWindow('../../hzzd/html/guidance_info.html', 'guidance_info', {
|
|
|
extras:{
|
|
|
guideId: code
|
|
|
}
|
|
|
})
|
|
|
} else{
|
|
|
//判断发送时间是否超过"2017-12-29 00:00:00",超过后发送的文章为新的文章
|
|
|
var sendTime = $(this).attr("data-time"),
|
|
|
d = new Date("2017-12-29 00:00:00"),
|
|
|
dTime = d.getTime();
|
|
|
if(parseInt(sendTime) < dTime){
|
|
|
mui.openWindow("../../jkjy/html/article.html", "article", {
|
|
|
extras: {
|
|
|
article: code
|
|
|
}
|
|
|
})
|
|
|
}else{
|
|
|
mui.openWindow("../../jkjy/html/article-info.html", "article", {
|
|
|
extras: {
|
|
|
articleId: code
|
|
|
}
|
|
|
})
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
//点击预约挂号查看详情
|
|
|
.on('tap', '.word-bread a[name="guahao"]', function(){
|
|
|
mui.openWindow("../../wdyy/html/detail-appointment.html", "detail-appointment", {
|
|
|
extras: {
|
|
|
dataId: $(this).attr('data-id')
|
|
|
}
|
|
|
})
|
|
|
})
|
|
|
|
|
|
//添加快捷回复
|
|
|
function kjhf(){
|
|
|
openWebview("../../kjhf/html/list.html");
|
|
|
}
|
|
|
window.addEventListener('fillText', function(e){
|
|
|
$(".tw-add-detail").hide();
|
|
|
var content = e.detail.content;
|
|
|
$("#input_content").show();
|
|
|
ui.boxMsgSound.style.display = 'none';
|
|
|
$(".yy-add").find('img:eq(0)').show().next().hide();
|
|
|
$("#input_content").text(content);
|
|
|
showSendBtn(true);
|
|
|
});
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 显示重新发送按钮
|
|
|
* @param {Object} d 数据
|
|
|
*/
|
|
|
function showResend(d){
|
|
|
$('#contain dl[data-code="'+ d.id +'"]').find('.c-msg').prepend("<i data-info='"+ JSON.stringify(d) +"' class='c-tips'></i>");
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 创建聊天会话
|
|
|
*/
|
|
|
var sessionId;
|
|
|
function createSession(type, callBack){
|
|
|
if(self.sessionId){
|
|
|
sessionId = self.sessionId;
|
|
|
$('#title').html(self.sessionName);
|
|
|
createTable(callBack);
|
|
|
} else {
|
|
|
if(type==2)
|
|
|
imClient.Sessions.createP2pSession(docInfo.code, self.otherCode, self.otherName,function(res){
|
|
|
if(res.status==200){
|
|
|
sessionId = res.data.id;
|
|
|
$('#title').html(res.data.name || self.otherName);
|
|
|
createTable(callBack);
|
|
|
} else {
|
|
|
alert("创建聊天会话失败!");
|
|
|
}
|
|
|
}, function(res){
|
|
|
alert("创建聊天会话失败!");
|
|
|
console.error("fail:"+JSON.stringify(res))
|
|
|
})
|
|
|
else if(type == 1)
|
|
|
createTable(callBack);
|
|
|
else if(type==3){
|
|
|
imClient.Sessions.createGroupSession(teamInfo.code, teamInfo.teamName, members,
|
|
|
function(res){
|
|
|
if(res.status == 200){
|
|
|
sessionId = res.data.id;
|
|
|
$('#title').html(res.data.name || teamInfo.teamName);
|
|
|
createTable(callBack);
|
|
|
} else
|
|
|
alert("创建聊天会话失败!");
|
|
|
}, function(res){
|
|
|
alert("创建聊天会话失败!");
|
|
|
console.error("fail:"+JSON.stringify(res))
|
|
|
})
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var tableName = "";
|
|
|
var isCached = false;
|
|
|
/**
|
|
|
* 获取新消息
|
|
|
* @param {Object} isInit
|
|
|
*/
|
|
|
function getNewMsgs(isInit){
|
|
|
if(isInit && self.msgId){
|
|
|
//带msgId定位参数的,
|
|
|
locationLog(self.msgId);
|
|
|
} else
|
|
|
getMsgs(1, pageSize, "", firstMsg? firstMsg.id : "", function(data){
|
|
|
if(data.length>0 && (!firstMsg || (firstMsg.timestamp<data[0].timestamp) ))
|
|
|
firstMsg = data[0];
|
|
|
getNewMsgHandle( data, isInit );
|
|
|
}, function(res){
|
|
|
console.error("e:"+JSON.stringify(res))
|
|
|
})
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 从后台获取最前面的消息
|
|
|
*
|
|
|
*/
|
|
|
function getFirstMsgs(){
|
|
|
getMsgs(1, pageSize, "", "", function(data){
|
|
|
if(data.length>0 && (!firstMsg || (firstMsg.timestamp<data[0].timestamp) ))
|
|
|
firstMsg = data[0];
|
|
|
getNewMsgHandle(data, true );
|
|
|
}, function(res){
|
|
|
console.error("e:"+JSON.stringify(res))
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取消息
|
|
|
*/
|
|
|
function getMsgs(page, size, startMsg, endMsg, sucHandle, errHandle, isoffset){
|
|
|
|
|
|
imClient.Sessions.getMessagesBySession(sessionId, docInfo.code, page || 1, size || paeSize, startMsg, endMsg,
|
|
|
function(res){
|
|
|
sucHandle( parseMsg(res) );
|
|
|
}, function(res){
|
|
|
mui.toast("获取消息记录失败!");
|
|
|
console.error("e:"+JSON.stringify(res))
|
|
|
}, "", isoffset || (endMsg? 1 : ""))
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 创建表结构
|
|
|
*/
|
|
|
function createTable(callBack){
|
|
|
tableName = "msgLog_"+ sessionId.replace(/-/g, "_") +"_"+ docInfo.code.replace(/-/g, "_");
|
|
|
/*sqlite.executeSql("DROP TABLE IF EXISTS "+tableName, [], function(){});
|
|
|
return;*/
|
|
|
|
|
|
sqlite.executeSql("create table if not exists "+ tableName +
|
|
|
" (id TEXT UNIQUE, sender_id TEXT, sender_name TEXT, content_type INTEGER, " +
|
|
|
" content TEXT, timestamp INTEGER, local_src BLOB, seq INTEGER PRIMARY KEY AUTOINCREMENT)", [],
|
|
|
function(tx, rs){
|
|
|
|
|
|
sqlite.executeSql("select * from "+tableName+" where id not like 'loc%' order by timestamp desc limit 0,1", [],
|
|
|
function(tx, rs){
|
|
|
isCached = rs.rows.length>0;
|
|
|
if(!isCached){
|
|
|
sqlite.executeSql("select * from "+tableName+" limit 0,1", [], function(tx, rs){
|
|
|
isCached = rs.rows.length>0;
|
|
|
callBack ? callBack() : "";
|
|
|
}, function(tx, rs){
|
|
|
alert("获取聊天缓存失败!");
|
|
|
})
|
|
|
} else {
|
|
|
firstMsg = rs.rows.item(0);
|
|
|
callBack ? callBack() : "";
|
|
|
}
|
|
|
}, function(tx, rs){
|
|
|
console.error(JSON.stringify(rs))
|
|
|
alert("获取聊天缓存失败!");
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
},
|
|
|
function(tx, rs){
|
|
|
console.error(tableName)
|
|
|
alert("创建缓存空间失败!");
|
|
|
})
|
|
|
}
|
|
|
|
|
|
var lastSeq = 0;
|
|
|
var lastTimestamp;
|
|
|
/**
|
|
|
* 获取缓存消息
|
|
|
* @param {Object} seq
|
|
|
* @param {Object} size
|
|
|
* @param {Object} callBack
|
|
|
* @param {Object} timestamp
|
|
|
* @param {Object} isNext
|
|
|
*/
|
|
|
function getCacheMsg(seq, size, callBack, timestamp, isNext){
|
|
|
var p = [];
|
|
|
var sql = 'SELECT * FROM '+ tableName;
|
|
|
var where = [];
|
|
|
if(seq){
|
|
|
where.push(" seq<>? ");
|
|
|
p.push(seq);
|
|
|
}
|
|
|
if(timestamp){
|
|
|
where.push(" timestamp"+ (isNext? ">=" : "<") +"? ");
|
|
|
p.push(timestamp);
|
|
|
}
|
|
|
sql += where.length>0? " where "+ where.join(" and ") : "";
|
|
|
sql += " order by timestamp desc ";
|
|
|
sql += size? " limit 0,"+size : "";
|
|
|
sqlite.executeSql(sql, p, function(tx, rs){
|
|
|
var data = [];
|
|
|
var tmp;
|
|
|
for(var i=0; i<rs.rows.length; i++){
|
|
|
tmp = rs.rows.item(i);
|
|
|
data.push( tmp );
|
|
|
/*if(lastTimestamp>tmp.timestamp){
|
|
|
lastTimestamp = tmp.timestamp;
|
|
|
lastSeq = tmp.seq;
|
|
|
lastId = tmp.id.indexOf("loc")==0? lastId : tmp.id;
|
|
|
}*/
|
|
|
}
|
|
|
|
|
|
callBack(tx, data);
|
|
|
}, function(tx, errmsg){
|
|
|
mui.toast('获取缓存数据失败!');
|
|
|
console.log(JSON.stringify(errmsg))
|
|
|
})
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取缓存消息
|
|
|
* @param {Object} startTime
|
|
|
* @param {Object} endTime
|
|
|
* @param {Object} callBack
|
|
|
*/
|
|
|
function getCacheMsgByRange(startTime, endTime, callBack){
|
|
|
var p = [];
|
|
|
var sql = 'SELECT * FROM '+ tableName +' where timestamp>='+ startTime +' and timestamp<'+ endTime;
|
|
|
sql += " order by timestamp desc ";
|
|
|
sqlite.executeSql(sql, p, function(tx, rs){
|
|
|
var data = [];
|
|
|
var tmp;
|
|
|
for(var i=0; i<rs.rows.length; i++){
|
|
|
tmp = rs.rows.item(i);
|
|
|
data.push( tmp );
|
|
|
/*if(lastTimestamp>tmp.timestamp){
|
|
|
lastTimestamp = tmp.timestamp;
|
|
|
lastSeq = tmp.seq;
|
|
|
lastId = tmp.id.indexOf("loc")==0? lastId : tmp.id;
|
|
|
}*/
|
|
|
}
|
|
|
|
|
|
callBack(tx, data);
|
|
|
}, function(tx, errmsg){
|
|
|
mui.toast('获取缓存数据失败!');
|
|
|
console.log(JSON.stringify(errmsg))
|
|
|
})
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取缓存消息
|
|
|
* @param {Object} id
|
|
|
* @param {Object} callBack
|
|
|
*/
|
|
|
function getCacheMsgById(id, callBack){
|
|
|
var sql = 'SELECT * FROM '+ tableName + ' where id=?';
|
|
|
sqlite.executeSql(sql, [id], function(tx, rs){
|
|
|
var data = [];
|
|
|
for(var i=0; i<rs.rows.length; i++){
|
|
|
data.push( rs.rows.item(i) );
|
|
|
}
|
|
|
callBack(tx, data);
|
|
|
}, function(tx, errmsg){
|
|
|
mui.toast('获取缓存数据失败!');
|
|
|
console.log(JSON.stringify(errmsg))
|
|
|
})
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取最后一条缓存消息
|
|
|
* @param {Object} callBack
|
|
|
* @param {Object} lastTimestamp
|
|
|
*/
|
|
|
function getLastCacheMsg(callBack, lastTimestamp){
|
|
|
var sql = 'SELECT * FROM '+ tableName + ' where id not like "loc%" ';
|
|
|
sql += lastTimestamp? " and timestamp<"+lastTimestamp : "";
|
|
|
sql += " order by timestamp desc ";
|
|
|
sqlite.executeSql(sql, [], function(tx, rs){
|
|
|
var data = [];
|
|
|
for(var i=0; i<rs.rows.length; i++){
|
|
|
data.push( rs.rows.item(i) );
|
|
|
}
|
|
|
callBack(tx, data);
|
|
|
}, function(tx, errmsg){
|
|
|
mui.toast('获取缓存数据失败!');
|
|
|
console.log(JSON.stringify(errmsg))
|
|
|
})
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 发送消息
|
|
|
* @param {Object} content
|
|
|
* @param {Object} type
|
|
|
* @param {Object} oldId
|
|
|
*/
|
|
|
function sendMsg(d){
|
|
|
imClient.Sessions.sendMessage(sessionId, docInfo.code, docInfo.name, d.content, d.content_type,
|
|
|
function(data) {
|
|
|
console.log(JSON.stringify(data))
|
|
|
var msg = data.messages[0];
|
|
|
if( !firstMsg || firstMsg.timestamp<msg.timestamp )
|
|
|
firstMsg = msg;
|
|
|
setLastMsg(msg);
|
|
|
// updateCacheMsgById(d.id, msg.timestamp, msg.id, msg.content);
|
|
|
}, function(data){
|
|
|
if(data.status == 406){
|
|
|
mui.toast("观察者模式无法进行增删改操作");
|
|
|
}
|
|
|
showResend(d);
|
|
|
console.log("sendFail"+ JSON.stringify(data));
|
|
|
})
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 将字符串转为对象
|
|
|
* @param {Object} data
|
|
|
*/
|
|
|
function parseMsg(data){
|
|
|
var d = [];
|
|
|
for(var i=0; i<data.length; i++){
|
|
|
d.push(JSON.parse(data[i]));
|
|
|
}
|
|
|
return d;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 更新缓存数据
|
|
|
* @param {Object} oldId 旧id
|
|
|
* @param {Object} timestamp 更新时间
|
|
|
* @param {Object} newId 更新id
|
|
|
* @param {Object} content 内容
|
|
|
* @param {Object} localSrc 更新本地路径
|
|
|
*/
|
|
|
function updateCacheMsgById(oldId, timestamp, newId, content, localSrc){
|
|
|
var sql = "update "+ tableName +" set ";
|
|
|
var u = [];
|
|
|
var p = [];
|
|
|
if(timestamp){
|
|
|
u.push(" timestamp=? ");
|
|
|
p.push(timestamp);
|
|
|
}
|
|
|
|
|
|
if(newId){
|
|
|
u.push(" id=? ");
|
|
|
p.push(newId);
|
|
|
}
|
|
|
|
|
|
if(localSrc){
|
|
|
u.push(" local_src=? ");
|
|
|
p.push(localSrc);
|
|
|
}
|
|
|
|
|
|
if(content){
|
|
|
u.push(" content=? ");
|
|
|
p.push(content);
|
|
|
}
|
|
|
|
|
|
sql += u.join(",")+ " where id=?";
|
|
|
p.push(oldId);
|
|
|
sqlite.executeSql( sql, p, function(tx, rs){
|
|
|
debugger
|
|
|
}, function(tx, msg){
|
|
|
alert("更新缓存失败!")
|
|
|
console.error(JSON.stringify(msg))
|
|
|
})
|
|
|
}
|
|
|
|
|
|
function imgLoad(img){
|
|
|
if(img.src.indexOf('data:')==0)
|
|
|
return;
|
|
|
|
|
|
var canvas = document.createElement('CANVAS'),
|
|
|
ctx = canvas.getContext('2d'),
|
|
|
newImg = new Image();
|
|
|
newImg.src = img.src;
|
|
|
|
|
|
canvas.height = newImg.height;
|
|
|
canvas.width = newImg.width;
|
|
|
ctx.drawImage(newImg, 0, 0);
|
|
|
var src = newImg.src;
|
|
|
var outputFormat = src.substring(src.lastIndexOf('.')+1);
|
|
|
outputFormat = outputFormat.toLowerCase()=="jpg"? "jpeg" : outputFormat;
|
|
|
var dataURL = canvas.toDataURL('image/' + outputFormat);
|
|
|
// updateCacheMsgById($(img).attr('data-code'), "", "", "", dataURL);
|
|
|
canvas = null;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取消息(下拉刷新)
|
|
|
*/
|
|
|
function getMsgList(pageIndex, isClear, isPre) {
|
|
|
getMsgs(pageIndex, pageSize, "", "", function(data){
|
|
|
showMsg(data, isClear, isPre);
|
|
|
})
|
|
|
|
|
|
//下面代码缓存机制有问题
|
|
|
// getCacheMsg(lastSeq, pageSize, function(tx, list){
|
|
|
// if(list.length<pageSize){
|
|
|
// getMsgs(1, pageSize-list.length, lastId, "", function(data){
|
|
|
// if(data.length>0){
|
|
|
// addMsgToCache(data);
|
|
|
// }
|
|
|
// showMsg(list.concat(data), isClear, isPre);
|
|
|
// })
|
|
|
// } else {
|
|
|
// showMsg(list, isClear, isPre);
|
|
|
// }
|
|
|
// }, lastTimestamp);
|
|
|
|
|
|
}
|
|
|
|
|
|
function uploadMsgBase(type, content, locSrc, isNotSend, callBack){
|
|
|
var tim = new Date().getTime();
|
|
|
var id = "loc"+tim;
|
|
|
locSrc = type==3? JSON.stringify(locSrc): locSrc;
|
|
|
var d = [{
|
|
|
"sender_id": docInfo.code,"sender_name": docInfo.name,
|
|
|
"content_type": type, "content": content,
|
|
|
"timestamp": tim,"id": id, local_src: locSrc, beforeSend: true}]
|
|
|
showMsg(d, false, false, true);
|
|
|
// addMsgToCache(d, true);
|
|
|
|
|
|
isNotSend? "" : sendMsg(d[0]);
|
|
|
if (callBack) callBack(d[0]);
|
|
|
// return d[0];
|
|
|
}
|
|
|
|
|
|
|
|
|
//录像
|
|
|
function clickVideo(){
|
|
|
if(plus.os.name == "Android"){
|
|
|
plus.nativeUI.toast("请录制10秒左右的短视频,以防录制完成后无法发送",{duration:"long"});
|
|
|
var File = plus.android.importClass("java.io.File");
|
|
|
var MediaStore = plus.android.importClass("android.provider.MediaStore");
|
|
|
var Intent = plus.android.importClass("android.content.Intent");
|
|
|
var intent = new Intent("android.media.action.VIDEO_CAPTURE");
|
|
|
var outPutPath = plus.io.convertLocalFileSystemURL("http://localhost:13131/_doc/camera/test.mp4");
|
|
|
var Uri = plus.android.importClass("android.net.Uri");
|
|
|
var file = new File(outPutPath);
|
|
|
var outPutUri = Uri.fromFile(file);
|
|
|
intent.putExtra("android.intent.extra.videoQuality", 1);//0 最低质量, 1高质量
|
|
|
intent.putExtra("android.provider.MediaStore.EXTRA_OUTPUT", outPutUri);//录像输出位置
|
|
|
// intent.putExtra("android.intent.extra.durationLimit", 10);//控制录制时间单位秒
|
|
|
var main = plus.android.runtimeMainActivity();
|
|
|
main.startActivityForResult(intent,200);
|
|
|
main.onActivityResult = function(request, code, data) {
|
|
|
var context = main;
|
|
|
plus.android.importClass(data);
|
|
|
var contactData = data.getData();
|
|
|
var resolver = context.getContentResolver();
|
|
|
plus.android.importClass(resolver);
|
|
|
var cursor = resolver.query(contactData, null, null, null, null);
|
|
|
plus.android.importClass(cursor);
|
|
|
cursor.moveToFirst();
|
|
|
var column = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA);
|
|
|
//获取录制的视频路径
|
|
|
andriodVideoUrl = cursor.getString(column);
|
|
|
//解析视频文件的属性
|
|
|
plus.io.resolveLocalFileSystemURL(andriodVideoUrl,function( entry ) {
|
|
|
// 可通过entry对象操作test.html文件
|
|
|
entry.file( function(file){
|
|
|
console.log("size=="+file.size+" name=="+file.name);
|
|
|
var fileSize = (file.size/1024/1024).toFixed(2);//字节转换成M
|
|
|
fileSizeJudge(fileSize);//文件大小判断
|
|
|
} );
|
|
|
}, function ( e ) {
|
|
|
plus.nativeUI.toast( "Resolve file URL failed: " + e.message );
|
|
|
});
|
|
|
|
|
|
};
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
function bindEvents(){
|
|
|
//录制视频
|
|
|
$(".lz-video-img").click(function(){
|
|
|
plus.nativeUI.toast("请录制10秒左右的短视频,以防录制完成后无法发送",{duration:"long"});
|
|
|
$("#upload_input").click();
|
|
|
return false;
|
|
|
})
|
|
|
|
|
|
//立即发送
|
|
|
$("#lijifasong").on("tap", function(){
|
|
|
uploadVideo();
|
|
|
mui('#sheet1').popover('toggle');
|
|
|
return false;
|
|
|
});
|
|
|
//不再提醒
|
|
|
$("#buzaitixing").on("tap", function(){
|
|
|
plus.storage.setItem("isTiXingVideoFaSong","1");
|
|
|
uploadVideo();
|
|
|
mui('#sheet1').popover('toggle');
|
|
|
return false;
|
|
|
});
|
|
|
}
|
|
|
|
|
|
//ios录像回调事件
|
|
|
function videoFileChange(target) {
|
|
|
var fileSize = (target.files[0].size/1024/1024).toFixed(2);//字节转换成M
|
|
|
fileSizeJudge(fileSize);
|
|
|
}
|
|
|
//文件大小判断
|
|
|
function fileSizeJudge(fileSize){
|
|
|
if(parseInt(fileSize)>30){
|
|
|
dialog({
|
|
|
content:'对不起,视频超过30Mb,无法发送,请录制10秒左右的短视频',
|
|
|
okValue:'我知道了',
|
|
|
ok: function() {
|
|
|
return;
|
|
|
}
|
|
|
}).showModal();
|
|
|
}else{
|
|
|
if(networkStatus=="wifi" || (plus.storage.getItem("isTiXingVideoFaSong") && plus.storage.getItem("isTiXingVideoFaSong")=="1")){//wifi环境或用户点击移动网络弹框中的”不再提醒“按钮
|
|
|
uploadVideo();
|
|
|
}else{
|
|
|
$("#mui-content").html('您正在使用移动网络,继续发送将消耗'+fileSize+'Mb流量,是否继续发送?');
|
|
|
mui('#sheet1').popover('toggle');
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
//上传视频
|
|
|
function uploadVideo(){
|
|
|
plus.nativeUI.showWaiting();
|
|
|
if(plus.os.name == "Android"){//andriod上传视频
|
|
|
var task = plus.uploader.createUpload(server + "upload/chat?type=4", {method: "post"}, function(t, sta) {
|
|
|
if(t.responseText){
|
|
|
var msg = t.responseText;
|
|
|
var oImg = JSON.parse(msg);
|
|
|
if(oImg.status==200){
|
|
|
uploadMsg(12, oImg.urls);
|
|
|
}else if(oImg.status==-1){
|
|
|
mui.toast(oImg.msg);
|
|
|
}else{
|
|
|
mui.toast("发送失败,请重试!");
|
|
|
}
|
|
|
}else{
|
|
|
mui.toast("发送失败,请重试!");
|
|
|
}
|
|
|
plus.nativeUI.closeWaiting();
|
|
|
|
|
|
});
|
|
|
task.addFile(andriodVideoUrl, {});
|
|
|
task.start();
|
|
|
}else{//ios上传视频
|
|
|
var fd=new FormData();
|
|
|
fd.append('file',document.getElementById("upload_input").files[0]);
|
|
|
$.ajax(server+"/upload/chat?type=4", {
|
|
|
data: fd,
|
|
|
contentType: false,
|
|
|
cache: false,
|
|
|
processData: false,
|
|
|
type: 'post',
|
|
|
success: function(resData) {
|
|
|
if(resData.status==200){
|
|
|
uploadMsg(12, resData.urls);
|
|
|
}else if(resData.status==-1){
|
|
|
mui.toast(oImg.msg);
|
|
|
}else{
|
|
|
mui.toast("发送失败,请重试!");
|
|
|
}
|
|
|
plus.nativeUI.closeWaiting();
|
|
|
},
|
|
|
error:function (XMLHttpRequest, textStatus, errorThrown) {
|
|
|
console.log(XMLHttpRequest.status);
|
|
|
console.log(XMLHttpRequest.readyState);
|
|
|
console.log(textStatus)
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|