| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071 | 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 {         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);        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    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;//      console.log(msg)        if(typeMsg == 7 || typeMsg==10 || typeMsg==13 || typeMsg==14){            if(typeMsg == 7 && msg.sender_id == 'system'){                contentMsg = "居民24小时内未回复,系统自动结束咨询";            }            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){                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 //不是患者                    };                }            });        }else{            doctor_name = sender.name;            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 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>';//                temp += '<div class="c-msg">'+ sendErrDom + yiduHtml1+//                            '<dd class="word-bread xufang-content" data-is-doctor="' + sender.is_patient + '" data-type="1">'+//                                '<div>我已审核您2017-07-10发起的续方申请</div>'+//                                '<div>审核结果:审核不通过</div>'+//                                '<div>原因:配送地址超过配送员可配送的地区,建议自取。'+//                                    '<a style="float:right;font-size:14px;color:#17b3ec;">点击查看详情</a>'+//                                '</div>'+//                            '</dd>'+//                        '</div>';                break;            case 6://开始咨询文本                var rs = JSON.parse(contentMsg);//              console.log(rs)//              var tzss = rs.tzssFlag;//              var zzF = rs.zzFlag//              var zz,tz;//	            if(tzss){//	            	zz = '已填写 <a href="javascript:;" class="view-zhengzhuang">查看</a>';//	            }else{//	            	zz = '未填写';//	            }//	            if(zzF){//	            	tz = '已填写 <a href="javascript:;" class="view-check">查看</a>';//	            }else{//	            	tz = '未填写';//	            }                temp += '<div class="c-msg">'+ sendErrDom + yiduHtml1+                        '<dd class="word-bread new-sty" data-is-doctor="' + sender.is_patient + '" data-type="1">'+                        '<div class="new-messg"><p class="new-mess-p">本消息为系统提醒</p></div>'+                        '<p class="c-333">'+rs.title+'</p>'+                        '<p class="c-333">体征信息:'+rs.tzMsg+'</p>'+//                      '<p class="c-333">症状:'+zz+'</p>'+//                      '<p class="c-333">体征及生活方式:'+tz+'</p>'+                        '</dd></div>';                break;            case 17://随访调查//          console.log(contentMsg)                var rs = JSON.parse(contentMsg);                if(msg.sender_id == docInfo.code){		            temp += '<dd class="word-bread survey-msg"><div class="msg-body clearfix">'+		                '<p class="c-333 c-f15">'+rs.text+'</p>'+		                '</div></dd><div class="xf-notice">'+rs.doctorremind+'</div>';	            }else{	            	if(rs.sysMsg){	            		temp += '<div class="c-msg">'+	                        '<dd class="word-bread new-sty" data-type="1">'+	                        '<div class="new-messg"><p class="new-mess-p">本消息为系统提醒</p></div>'+	                        '<p class="c-333">'+rs.text+'</p>'+	                        '<a href="javascript:;" data-type="'+rs.msgType+'" class="viewData">查看</a>'+	                        '</dd></div>';	            	}	            }	            break;            case 16://          console.log(contentMsg)            	var rs = JSON.parse(contentMsg);	            if(msg.sender_id == docInfo.code){		            temp += '<dd class="word-bread survey-msg"><div class="msg-body clearfix">'+		                '<p class="c-333 c-f15">'+rs.text+'</p>'+		                '</div></dd>';	            }else{	            	var alertMsg;		          	if(rs.needUpload == 'false'){		          		alertMsg = rs.tzAlert+' <a href="javascript:;" data-health="'+rs.healthindexid+'" data-type="'+rs.type+'" class="fillData">自动填入随访记录</a>';		          		temp += '<div class="c-msg">'+	                        '<dd class="word-bread new-sty" data-is-doctor="' + sender.is_patient + '" data-type="1">'+	                        '<div class="new-messg"><p class="new-mess-p">本消息为系统提醒</p></div>'+	                        '<p class="c-333">'+rs.tzMsg+'</p>'+	                        '<p class="c-333">'+rs.tzTime+'</p>'+	                        '<p class="c-333">'+alertMsg+'</p>'+	                        '</dd></div>';		          	}else{		            	alertMsg = rs.tzAlert;		            	temp += '<div class="c-msg">'+	                        '<dd class="word-bread new-sty" data-is-doctor="' + sender.is_patient + '" data-type="1">'+	                        '<div class="new-messg"><p class="new-mess-p">本消息为系统提醒</p></div>'+//	                        '<p class="c-333">'+rs.tzMsg+'</p>'+//	                        '<p class="c-333">'+rs.tzTime+'</p>'+	                        '<p class="c-333">'+alertMsg+'</p>'+	                        '</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;                temp += '<div class="c-msg">'+ sendErrDom + '<dd class="word-bread word-bread-img" data-type="2">'+yiduHtml3+'<img onload="imgLoad(this)" data-src="'+ getImgUrl(msg.content) +'" data-code="'+ msg.id +'" data-preview-src="" data-preview-group="1" width="100" height="100" src="'+ getImgUrl(contentMsg) +'" /></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;            case 15: //审核消息                var rs = JSON.parse(contentMsg);                var reason = "";                if(rs.reason){                    reason = '<p class="xf-word c-333">原因:'+rs.reason+'</p>';                }                temp += '<div class="c-msg">'+ sendErrDom +                        '<dd class="word-bread new-sty" data-is-doctor="' + sender.is_patient + '" data-type="1">'+                        '<div class="new-messg"><p class="new-mess-p">本消息为系统提醒</p></div>'+                        '<p class="c-333">'+rs.title+'</p>'+                        '<p class="c-333">审核结果:'+rs.result+'</p>'+reason+                        '<a href="javascript:void(0);" class="view-detail">点此查看详情</a>'+                        '</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);        $('.xf-res-list').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;        if(msg.type == 1){ //健康记录            msg.img = "../../../images/jkjl_share.png";        }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";            }        }else{ //健康教育            msg.img = getImgUrl(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"><img src="'+ msg.img +'">'            +     '<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() {	$(".xf-res-list").hide();    $(".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();        }                 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;})/** * 转发操作按钮事件 */$('#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(){    showSendBtn($(this).text())}).on('click', function(){    $(".tw-add-detail").hide();    $(".xf-res-list").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();        $('.tw-change').hide();        $('#reply').fadeIn('fast', 'swing');    } else if(valLen == 1 || isShow==false){        $('#reply').fadeOut('fast', 'swing', function(){            $('.tw-add').show();            $('.tw-change').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();    $(".xf-res-list").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",{type:'xufang'});}window.addEventListener('fillText', function(e){    $(".tw-add-detail").hide();    $(".xf-res-list").hide();    $("#input_content").show();    var content = e.detail.content;    var type = e.detail.type;    doQuickAnswer(type,content)})/** * 显示重新发送按钮 * @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)                }        });    }    }
 |