var d = dialog({contentType:'load', skin:'bk-popup'}); var dd = dialog({contentType:'load', skin:'bk-popup', content:'发送中...'}); var dialroll; var doctorInfo; var content = ""; var timeStr = ""; var id = 1; var pagesize = 100; var Request = new Object(); Request = GetRequest(); var consult = Request["consult"]; var status = Request["status"]; var consultType = Request["type"]; //咨询类型,1-三师咨询,2-家庭咨询, 6-名医咨询, 8-续方咨询 var doctor = Request['doctor']; var toUser = Request["toUser"]; var toName = decodeURIComponent(Request["toName"]); var openid = Request["openid"]; var represented = Request["represented"]; var evaluate = localStorage.getItem("evaluate");//1为有评价 0为无评价 var prescriptionCode; var docMsg = 0; var patientcode = ''; var networkStatus = ""; var userAgent = window.localStorage.getItem(agentName); var userInfo = JSON.parse(window.localStorage.getItem(agentName)); //回复单条内容填写 var defaultPhoto = "../../../images/p-default.png"; var doctorDefaultPhoto = "../../../images/d-default.png"; var presciptionStatus = 0; //标记续方状态 mui.init({ gestureConfig:{ hold:true,//默认为false,不监听 release:true//默认为false,不监听 } }); //页面初始化 $(function(){ isRepresent(function(){ pageInit(); }) }) function pageInit(){ patientcode = userInfo.represented ? userInfo.represented : userInfo.uid; createSocketConnect(); checkStatus(); getPrescriptionDetail(); getWXSign(); bindEvents(); } //im建立socket连接 function createSocketConnect(){ //获取sessionId sendPost('/patient/consult/getTopic', {consult:consult}, 'json', 'GET', queryFailed, function(res){ if(res.status==200){ var sessionId = JSON.parse(res.msg)[0].session_id; //登录IM sendPost('/patient/consult/intoTopic', {consult: consult}, 'json', 'get', queryFailed, function(res){}); //加载socket组件 jQuery.getScript(imurl+"/socket.io/socket.io.js").done(function() { var socket = io.connect(imurl); var userInfo = JSON.parse(window.localStorage.getItem(agentName)); var uid = userInfo.represented ? userInfo.represented : userInfo.uid; socket.emit('login', { userId: uid, password: uid, sessionId:sessionId, clientType:"patient" }); socket.on('message', function (data) { console.log(data) if((data.type == 1) ||(data.type == 2) || (data.type == 6) || (data.type == 12) || (data.type == 7) || (data.type == 15)){ addReply(1, data.content, new Date(data.timestamp).Format('yyyy-MM-dd HH:mm:ss'), data.type, data.name,data.sender_img); setTimeout(function(){ dialroll.refresh(); dialroll.scrollTo(0, dialroll.maxScrollY); },300) } if((data.type == 16)||(data.type == 17)){ if(data.sender_id == patientcode){ addReply(2, data.content, new Date(data.timestamp).Format('yyyy-MM-dd HH:mm:ss'), data.type, data.name,data.sender_img); }else{ addReply(1, data.content, new Date(data.timestamp).Format('yyyy-MM-dd HH:mm:ss'), data.type, data.name,data.sender_img); } setTimeout(function(){ dialroll.refresh(); dialroll.scrollTo(0, dialroll.maxScrollY); },300) } }); socket.on('error', function (data) { }); socket.on('ack', function (data) { }); // function getLocalTime(nS) { // return new Date(parseInt(nS) * 1000).toLocaleString().replace(/:\d{1,2}$/,' '); // } }).fail(function() { dialog({contentType:'tipsbox', skin:'bk-popup' ,bottom:true, content:"医生实时对话连接失败!"}).show(); }); } }); } //判断咨询记录的状态 function checkStatus(){ d.show(); var url = 'patient/consult/status', data = {consult: consult}; sendPost(url, data, 'json', 'get', queryFailed, queryStatusSuccess); } //获取咨询状态成功回调处理 function queryStatusSuccess(res){ if(res.status == 200) { if(res.data == 0){ //咨询未结束 $("#divBottom").show(); $("#finish_list").show(); $("#input_div").show(); winSize(165); // 110+55 }else{ //咨询已结束 $("#divBottom").hide(); $("#finish_list").hide(); $("#input_div").hide(); winSize(75); //显示评价按钮 if(evaluate == 0){ $('#valFoot').show(); $('#noval').show(); $('#hasval').hide(); }else if(evaluate == 1){ $('#valFoot').show(); $('#noval').hide(); $('#hasval').show(); } } status = res.data; //聊天记录填充 queryList(); var pulldownAction = function() { getPage(this); }; dialroll = iscrollAssist.newVerScrollForPull($('.pull-iscroll-wrap'), pulldownAction, null); dialroll.refresh(); dialroll.scrollTo(0, dialroll.maxScrollY); d.close(); } else { queryFailed(res); } } //获得续方详情 function getPrescriptionDetail(){ var url = "/patient/consult/prescriptionDetail", params = {consult: consult}; sendPost(url, params, 'json', 'get', queryFailed, function(res){ if(res.status == 200){ res.data.statusName = getStatusName(res.data.status); presciptionStatus = res.data.status; var html = template('prescription_tmp', res.data); $("#prescriptionInfo").empty().append(html); $("#prescriptionInfo").attr("data-code", res.data.code); prescriptionCode = res.data.code; }else{ queryFailed(res); } }); } //查询咨询记录 function queryList(){ var url = 'patient/consult/loglist', data = { consult: consult, page: id, pagesize: pagesize }; sendPost(url, data, 'json', 'GET', queryFailed, queryListSuccess); } //查询咨询记录成功的回调处理 function queryListSuccess(res){ if (res.status == 200) { id++; var data = res.list; var docCode; for(var k in data.users){ if(data.users[k].is_patient == 0){ docCode = data.users[k].id; } } var list = data.list; if (list && list.length > 0) { docMsg = list[list.length - 1].content_type; for (var j = list.length-1; j >=0; j--) { var reply = JSON.parse(list[j]); // console.log(reply) // TODO 判断咨询回复的类型,区别是否显示在患者端 if((reply.content_type == 3) || (reply.content_type == 1) || (reply.content_type == 2) || (reply.content_type == 6) || (reply.content_type == 12) || (reply.content_type == 7)|| (reply.content_type == 15)|| (reply.content_type == 16)|| (reply.content_type == 17)){ var date = new Date(); date.setTime(reply.timestamp); var time = date.format('yyyy-MM-dd hh:mm:ss'); var p; for(var k in data.users){ if(data.users[k].id==reply.sender_id){ p = data.users[k].avatar; } } var isSystem = reply.sender_id == 'system'; //第一个参数为1时,医生发的 addReply(reply.sender_id==patientcode? 2 : 1, reply.content, time, reply.content_type, reply.sender_name, p, false, isSystem); } } dialroll.refresh(); dialroll.scrollTo(0, dialroll.maxScrollY); } if(status==0){ checkDoctorInWork(docCode); } d.close(); } else{ queryFailed(res); } } //判断医生是否在工作时间内 function checkDoctorInWork(doctor){ var url = 'patient/consult/is_doctor_working'; sendPost(url, {doctor:doctor}, 'json', 'post', queryFailed, function(res){ if(res.status==200){ if(res.data!=1){ var time = (new Date()).Format('yyyy-MM-dd hh:mm:ss'); addReply(1, "医生不在工作时间,无法及时回复您的消息。
查看工作时间!", time, 7, "系统消息"); $(".workhours").on("click",function(){ location.href='doctor-work-hours.html?doctor='+doctor; }); setTimeout(function(){ dialroll.refresh(); dialroll.scrollTo(0, dialroll.maxScrollY); },20); } }else{ queryFailed(res); } }); } function queryFailed(res, msg){ d.close(); dd.close(); if(msg){ dialog({contentType:'tipsbox', skin:'bk-popup' , bottom:true,content: msg}).show(); }else{ if (res && res.msg) { dialog({contentType:'tipsbox', skin:'bk-popup' ,bottom:true, content:res.msg}).show(); } else { dialog({contentType:'tipsbox', skin:'bk-popup' , bottom:true,content:'加载失败'}).show(); } } } //点击发送按钮事件 function send(){ content = $("#input_content").text().replace(/\s+/g,""); if (content && content != null && content != "") { var now = new Date(), timeStr = now.Format('yyyy-MM-dd hh:mm:ss'); $("#input_content").blur(); dialroll.refresh(); dialroll.scrollTo(0, dialroll.maxScrollY); dd.showModal(); var url = "patient/consult/append", data = { consult: consult, content: utf16toEntities(content), type: 1 }; sendPost(url, data, 'json', 'post', function(res){ queryFailed(res, '发送失败'); }, submitSuccess); } else { return; } } //发送文本消息成功回调 function submitSuccess(res){ if (res.status == 200) { //置空 $("#input_content").text(""); $(".talk-send a").addClass("disab"); addReply(2, content, timeStr, 1, ""); dialroll.refresh(); dialroll.scrollTo(0, dialroll.maxScrollY); showSendBtn(false); dd.close(); } else { queryFailed(res, '发送失败'); } } /** * 组装信息 * @param {number} type 消息是本人发送还是他们发送, 1-医生发送,2-自己发送 * @param {string} content 消息内容 * @param {string} time 时间 * @param {string} msgType 消息类型 * @param {string} doctorName * @param {string} photo 头像图片路径 * @param {boolean} prepend 消息是否往前添加 */ function addReply(type, content, time, msgType, doctorName, photo, prepend, isSystem){ //time = time.substr(10); var $div = $("
"); if(msgType == 7){ if(msgType == 7 && isSystem){ content = "您24小时内未回复,系统自动结束咨询"; } // if(msgType == 1){ // var content1 = '您未绑定智能设备,请手动上传体征数据,绑定设备后系统将会自动将您的体征数据上报给医生
点击绑定'; // if(prepend){ // $(".talk-box").prepend('
' + content1 + '
'); // } else{ // $(".talk-box").append('
' + content1 + '
'); // } // return; // } if(prepend){ $(".talk-box").prepend('
' + content + '
'); } else $(".talk-box").append('
' + content + '
'); return; } if (type == 1) { $div.addClass('chat-left'); img = photo ? getImgUrl(photo) : doctorDefaultPhoto; doctorDefaultPhoto = img; name = doctorName; } else { $div.addClass('chat-right'); img = photo ? getImgUrl(photo) : defaultPhoto; defaultPhoto = img; name = window.localStorage.getItem("nowPatientName"); } var temp = '
' + '
' + name + '' switch(parseInt(msgType)) { case 1://信息 temp += '
' + content + '
'; break; case 6://咨询问题 var rs = JSON.parse(content); var tzMsg = rs.tzMsg; temp += '
'+ '
本消息为系统提示
'+ '

' + rs.title + '

'+ '

体征信息:'+tzMsg+'

'+ '
'; break; case 2://图片 temp += '
'; break; case 3://语音 var rec = JSON.parse(content); temp += "
"+ "
" + ""+(rec? rec.times: "") +"\'\'"+ "
"+ "
"; break; case 12://视频 var videoInfo = content.split(","); var shichang = formatSeconds(videoInfo[2]);//时长 if(type == 1){ temp += '
'+ ''+ ''+ ''+ ''+shichang+''+ '
'; }else{ temp += '
'+ ''+ ''+ ''+ ''+shichang+''+ '
'; } break; case 15: var rs = JSON.parse(content); var reason = ""; if(rs.reason){ reason = '

原因:'+rs.reason+'

'; } temp += '
'+ '
本消息为系统提示
'+ '

审核消息:

'+ '

' + rs.title + '

'+ '

审核结果:'+rs.result+'

'+reason+ '点此查看详情'+ '
'; break; case 16: var rs = JSON.parse(content); if(type == 2){ var bttn=""; if(rs.needUpload == 'true'){ if(rs.type == 1){ bttn = ' 上传血压数据' }else{ bttn = ' 上传血糖数据' } temp += '
'+ '
本消息为系统提示
'+ '

'+rs.patientAlert+bttn+'

'+ '
'; }else{ temp += '
'+ '
本消息为系统提示
'+ '

'+rs.tzMsg+'

'+ '

'+rs.tzTime+'

'+ '
'; } break; }else{ var dev=""; if(rs.deviceMsg){ dev = '

'+rs.deviceMsg+' 点击绑定

' } temp += '
'+ '

'+rs.text+'

'+dev+ '
'; } break; case 17://随访调查 var rs = JSON.parse(content); if(type==2){ if(rs.sysMsg){ temp += '
'+ '
本消息为系统提示
'+ '

'+rs.text+ ' 查看

'+ '
'; } }else{ temp += '
'+ '

'+rs.text+' 开始填写

'+ '

'+rs.patientremind+'

'; } break; } if(prepend){ $(".talk-box").prepend($div.append(temp)).prepend('
' + time + '
'); } else $(".talk-box").append('
' + time + '
').append($div.append(temp)); if(type != null && type != 1) { $(".tw-add-detail").hide(200); } } //下拉刷新加载数据方法 function getPage(t){ var url = 'patient/consult/loglist', data = { consult: consult, page: id, pagesize: pagesize }; sendPost(url, data, 'json', 'post', queryFailed, function(res){ if(res.status == 200){ var list = res.list; if (list && list.length > 0) { id = list[list.length - 1].id; for (var j = 0; j < list.length; j++) { var reply = list[j]; if((reply.msgType == 1) || (reply.msgType == 3) || (reply.msgType == 2) || (reply.msgType == 6) || (reply.msgType == 12) || (reply.msgType == 7) || (reply.msgType == 15)){ //type为1时,医生发的 var type = (reply.sender_id==patientcode) ? 2 : 1; var isSystem = reply.sender_id == 'system'; addReply(type, reply.content, reply.time, reply.msgType, reply.doctorName, reply.photo, true, isSystem); } } } t.refresh(); }else{ queryFailed(res); } }); } //结束咨询方法 function finish(){ //先判断是否可以结束咨询,续方申请状态为待审核时,不可以结束咨询 if((presciptionStatus >= 0) && (presciptionStatus < 21)){ dialog({ contentType:'tipsbox', content: '续方申请未审核,不可关闭续方咨询', skin: 'bk-popup', closeTime: 2000 }).show(); return false; } dialog({ content:'是否确认结束该次咨询?结束后医生将无法回复', ok: function (){ var params = {} params.code = consult; //发送ajax请求, 查询设备列表信息 sendPost("patient/consult/finish", params, "json", "post", function(res){ queryFailed(res, '操作失败'); },function(res){ if (res.status == 200) { location.reload(); } else{ queryFailed(res, '操作失败'); } }); }, cancel: function () { return; } }).showModal(); } /*--------------------------- 事件监听 ------------------------------------*/ function bindEvents(){ //点击续方卡片,跳转去续方记录页面 $("#prescriptionInfo").on('click', function(){ var code = $(this).attr("data-code"); window.location.href = "../../prescription/html/re-prescription_info.html?code="+code+'&toUser='+toUser; }); //点击内容区域输入框失焦 $('#talkwrap').click(function(){ $("#input_content").blur(); // dialroll.refresh(); // dialroll.scrollTo(0, dialroll.maxScrollY); return false; }); //发送以后定位至最底部 $("#reply a").click(function() { send(); }); //立即发送 $("#lijifasong").on("tap", function(){ uploadVideo(); mui('#sheet1').popover('toggle'); return false; }); //不再提醒 $("#buzaitixing").on("tap", function(){ window.localStorage.setItem("isTiXingVideoFaSong","1"); uploadVideo(); mui('#sheet1').popover('toggle'); return false; }); //查看续方详情 $("body").on("tap", '.view-detail', function(){ window.location.href = "../../prescription/html/re-prescription_info.html?code="+prescriptionCode+'&toUser='+toUser; }) //调查问卷 $("body").on("tap", '.survey', function(){ var $this = $(this) window.location.href = "questionaires.html?prescriptionCode="+prescriptionCode+"&pro_id="+$this.attr('data-type') }) $("body").on("tap", '.view-check', function(){ window.location.href = "questionaires.html?prescriptionCode="+prescriptionCode+"&pro_id=2" }) //血压血糖 $("body").on("tap", '.j-btn', function(){ window.location.href = "../../jkjl/html/health-index-add-bloodpressure.html?origin=suifang&prescriptionCode="+prescriptionCode }) $("body").on("tap", '.add-xt', function(){ window.location.href = "../../jkjl/html/health-index-add-bloodsugar.html?origin=suifang&prescriptionCode="+prescriptionCode }) $("body").on("tap", '.add-xy', function(){ window.location.href = "../../jkjl/html/health-index-add-bloodpressure.html?origin=suifang&prescriptionCode="+prescriptionCode }) //添加设备 $("body").on("tap", '.add-equip', function(){ window.location.href = "../../wdsb/html/my-equipments.html?prescriptionCode="+prescriptionCode }) //点击评价 $('body').on('tap','#noval',function(){ window.location.href = "manyidu.html?consult=" +consult; }); $('body').on('tap','#hasval',function(){ window.location.href = "manyidu.html?consult=" +consult; }); var $ipt_content = $('#input_content'); //键盘输入解决输入框被软键盘覆盖的问题 var bfscrolltop = document.body.scrollTop;//获取软键盘唤起前浏览器滚动部分的高度 var interval; $ipt_content.focus(function(){//当它获取焦点时触发事件 $(".tw-add-detail").hide(); interval = setInterval(function(){//设置一个计时器,时间设置与软键盘弹出所需时间相近 document.body.scrollTop = document.body.scrollHeight;//获取焦点后将浏览器内所有内容高度赋给浏览器滚动部分高度 },100) }).blur(function(){//设定输入框失去焦点时的事件 clearInterval(interval);//清除计时器 document.body.scrollTop = bfscrolltop; //将软键盘唤起前的浏览器滚动部分高度重新赋给改变后的高度 }); //显示发送按钮的事件 $ipt_content.on('input', function(e){ if($(this).prop('comstart')) { return; } var text = $.trim($(this).text()); showSendBtn(text.length > 0) }).on('compositionstart', function(){ $(this).prop('comstart', true); //console.log('中文输入:开始'); }).on('compositionend', function(){ $(this).prop('comstart', false); //console.log('中文输入:结束'); var text = $.trim($(this).text()); showSendBtn(text.length > 0) }) .on('tap', function(){ $(".tw-add-detail").hide(); // $ipt_content.focus(); }) //附加功能 $(".tw-add").click(function() { $(".tw-add-detail").toggle(200); }); //隐藏打开的附加功能 $('body').on('tap', '#talkwrap', function(){ $('.tw-add-detail').hide(); $ipt_content.blur(); }); $(".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(); } }); //预览图片 $('.talk-box').on('click', '.word-bread img', function(){ if(!$(this).closest(".word-bread").hasClass("preview-video")){ var urls = []; $.each($('.word-bread img'), function(i, v) { urls.push($(v).attr('src')); }); wx.previewImage({ current: $(this).attr('src'), // 当前显示图片的http链接 urls: urls // 需要预览的图片http链接列表 }); } }) //播放语音 .on('touchstart', '.audio', function(){ if($playingDom){ aud.pause(); //aud.stop(); $playingDom.removeClass('active'); if($playingDom[0] == this){ $playingDom = null; return; } } $playingDom = $(this); $playingDom.addClass('active'); var ser = JSON.parse($(this).attr('data-audio')); aud.src = getImgUrl(ser.path); aud.load(); aud.play(); }) //播放视频 .on('click','.preview-video',function() { $(document.body).find('video').remove(); var url = $(this).attr('data-video'); var html = ''; $(document.body).append(html); var video = $(document.body).find('video')[0]; video.play(); }); } /*--------------------------- 事件监听 ------------------------------------*/ /*--------------------------- 辅助方法 ------------------------------------*/ //控制页面高度 function winSize(h){ var totH = $(window).height(); $("#talkwrap").height(totH - h); if(h > 75){ $(".c-main").css("top", '110px'); } } //控制是否显示文本消息框 function showSendBtn(isShow){ if(isShow){ $('.tw-add').hide(); $('#reply').fadeIn('fast', 'swing'); } else { $('#reply').fadeOut('fast', 'swing', function(){ $('.tw-add').show(); }); } }; //毫秒转换成时分秒 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; } /*--------------------------- 辅助方法 ------------------------------------*/ //-----------------------------【图片】处理方法------------------------------------- //微信上传图片 var serverId = ""; var images = []; //查看图片 function viewImg(dom){ var $img = $(dom); var thissrc = $img.attr("src"); var mWid = $(window).width(); var mHei = $(window).height(); var nHtml = '
'; $("body").append(nHtml); $(".delimgpop").click(function() { $(this).remove() }); } //微信选择图片 function chooseImageWx(){ wx.chooseImage({ count: 3, success: function (res) { for (var i in res.localIds) { images.push(res.localIds[i]); } dd.showModal(); uploadImage(); } }); } //上传图片到微信 function uploadImage(){ if (images.length == 0) { dd.close(); return; } var i = 0, length = images.length; serverId = ""; var faillength = 0 ; function upload() { wx.uploadImage({ localId: images[i], isShowProgressTips: 0, success: function (res) { faillength= 0; i++; if(serverId.length == 0){ serverId = res.serverId; } else{ serverId =serverId + "," + res.serverId; } if (i < length) { upload(); } if(i == images.length){ sendImages(); } }, fail: function (res) { dd.close(); faillength+=1; if(faillength<=5){ //失败从传 upload(); }else{ dialog({contentType:'tipsbox', skin:'bk-popup' ,bottom:true, content:"图片上传失败,请控制发送频率"}).show(); } } }); } upload(); } //保存图片到后台 function sendImages(){ var now = new Date(); timeStr = now.Format('yyyy-MM-dd hh:mm:ss'); var url = 'patient/consult/append' data = { consult: consult, content: '', mediaIds: serverId, type: 2, times: '' }; sendPost(url, data, 'json', 'post', function(res){ queryFailed(res, '发送失败'); }, function(res){ if (res.status == 200) { var data= JSON.parse(res.data) dd.close(); addReply(2, data.content, timeStr, 2, ""); dialroll.refresh(); dialroll.scrollTo(0, dialroll.maxScrollY); } else { queryFailed(res, '发送失败'); } }); } //-----------------------------【图片】处理方法------------------------------------- //------------------------------【语音】处理方法------------------------------------ var aud = document.getElementById('audio'); var $playingDom; //播放语音结束方法 function playSoundEnd(){ $playingDom.removeClass('active'); $playingDom = null; } //播放语音错误提示方法 function playError(){ var src = $('#audio').attr('src'); if(!$.trim(src)) { return ; } dialog({contentType:'tipsbox', skin:'bk-popup' ,bottom:true, content:"播放语音失败"}).show(); $playingDom.removeClass('active'); $playingDom = null; } var recordCancel = false; var recorder = null; var audio_tips = document.getElementById("audio_tips"); var startTimestamp = null; var stopTimestamp = null; var stopTimer = null; var MIN_SOUND_TIME = 500; 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') }; var recordTimer = null; var realStartTime = 0; ui.boxMsgSound.addEventListener("touchstart", function(e) { e.preventDefault(); event.preventDefault(); $(this).addClass('yy-hold'); if(stopTimer)clearTimeout(stopTimer); recordCancel = false; audio_tips.innerHTML = "手指上划,取消发送"; ui.boxSoundAlert.classList.remove('rprogress-sigh'); setSoundAlertVisable(true); startTimestamp = new Date().getTime(); recordTimer = setTimeout(function(){ wx.startRecord({ success: function(){ realStartTime = new Date().getTime(); }, fail: recordErr }); wx.onVoiceRecordEnd({ // 录音时间超过一分钟没有停止的时候会执行 complete 回调 complete: function (res) { serverId = res.localId; sendSounds(60); }, fail: recordErr }); },MIN_SOUND_TIME); }, false); ui.boxMsgSound.addEventListener("touchend", function(e){ e.preventDefault(); event.preventDefault(); $(this).removeClass('yy-hold'); if (audio_tips.classList.contains("cancel")) { audio_tips.classList.remove("cancel"); audio_tips.innerHTML = "手指上划,取消发送"; } var endTimestamp = new Date().getTime(); var times = endTimestamp - startTimestamp; var realTimes = endTimestamp - realStartTime; if(times < MIN_SOUND_TIME || realTimes < MIN_SOUND_TIME){ audio_tips.innerHTML = "录音时间太短"; ui.boxSoundAlert.classList.add('rprogress-sigh'); recordCancel = true; stopTimer=setTimeout(function(){ setSoundAlertVisable(false); },500); startTimestamp = 0; realStartTime = 0; //小于300ms,不录音 clearTimeout(recordTimer); wx.stopRecord({ success: function (res) { }, fail: function(){} }); }else{ setSoundAlertVisable(false); wx.stopRecord({ success: function (res) { if(!recordCancel) { serverId = res.localId; sendSounds(Math.round(times/1000)); } }, fail: recordErr }); } }, 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); } }, //保存语音 sendSounds = function(times){ var now = new Date(); timeStr = now.Format('yyyy-MM-dd hh:mm:ss'); var data = {}; data.consult = consult; data.content = ""; data.type = 3; data.times = times; dd.show(); wx.uploadVoice({ localId: serverId, success: function (res) { data.voices = res.serverId; sendPost('patient/consult/append', data, 'json', 'post', function(){ queryFailed(res, '发送失败'); }, function submitSoundSuccess(res) { if (res.status == 200) { dd.close(); var data = JSON.parse(res.data[0]); addReply(2, data.content, timeStr, 3, ""); dialroll.refresh(); dialroll.scrollTo(0, dialroll.maxScrollY); } else { queryFailed(res, '发送失败'); } }); } }); }, //录制语音错误提示信息 recordErr = function(res){ if(res && res.errMsg == "stopRecord:tooshort") { audio_tips.innerHTML = "录音时间太短"; ui.boxSoundAlert.classList.add('rprogress-sigh'); recordCancel = true; stopTimer=setTimeout(function(){ setSoundAlertVisable(false); },500); startTimestamp = 0; //小于300ms,不录音 if(recordTimer)clearTimeout(recordTimer); return; } if(!recordCancel){ dialog({ content:'录音失败,请重试', okValue:'我知道了', ok: function() {} }).showModal(); } }; //------------------------------【语音】处理方法------------------------------------ //【视频】处理方法 //录制视频回调 var videoFileChange = function(target){ var fileSize = (target.files[0].size/1024/1024).toFixed(2);//字节转换成M if(parseInt(fileSize)>30){ dialog({ content:'对不起,视频超过30Mb,无法发送,请录制10秒左右的短视频', okValue:'我知道了', ok: function() { return; } }).showModal(); }else{ if(networkStatus=="wifi" || window.localStorage.getItem("isTiXingVideoFaSong")=="1"){//wifi环境或用户点击移动网络弹框中的”不再提醒“按钮 uploadVideo(); }else{ $("#mui-content").html('您正在使用移动网络,继续发送将消耗'+fileSize+'Mb流量,是否继续发送?'); mui('#sheet1').popover('toggle'); } } }, //上传视频 uploadVideo = function(){ dd.showModal(); 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){ var data = {consult:consult,content:resData.urls,type:12}; sendPost('patient/consult/append', data, 'json', 'post', function(){ queryFailed(res, '发送失败'); }, function submitSoundSuccess(res) { if (res.status == 200) { dd.close(); var data = JSON.parse(res.data[0]); addReply(2, data.content, new Date(data.timestamp).Format('yyyy-MM-dd HH:mm:ss'), 12, ""); dialroll.refresh(); dialroll.scrollTo(0, dialroll.maxScrollY); } else { queryFailed(res, '发送失败'); } }); }else{ dd.close(); } }, error:function (XMLHttpRequest, textStatus, errorThrown) { console.log(XMLHttpRequest.status); console.log(XMLHttpRequest.readyState); console.log(textStatus) } }); }; Date.prototype.format = function(fmt) { //author: meizz var o = { "M+": this.getMonth() + 1, //月份 "d+": this.getDate(), //日 "h+": this.getHours(), //小时 "m+": this.getMinutes(), //分 "s+": this.getSeconds(), //秒 "q+": Math.floor((this.getMonth() + 3) / 3), //季度 "S": this.getMilliseconds() //毫秒 }; if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length)); for (var k in o) if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length))); return fmt; } //从后台那边获取签名等信息 function getWXSign(){ var params = {}; var url1 = window.location.href; params.pageUrl = url1; $.ajax(server + "weixin/getSign", { data: params, dataType: "json", type: "post", success: function(res){ if (res.status == 200) { var t = res.data.timestamp; var noncestr = res.data.noncestr; var signature = res.data.signature; wx.config({ appId: appId, // 必填,公众号的唯一标识 timestamp: t, // 必填,生成签名的时间戳 nonceStr: noncestr, // 必填,生成签名的随机串 signature: signature,// 必填,签名,见附录1 jsApiList: [ 'chooseImage', 'uploadImage', 'startRecord', 'stopRecord', 'onVoiceRecordEnd', 'playVoice', 'pauseVoice', 'stopVoice', 'onVoicePlayEnd', 'uploadVoice', 'getNetworkType' ] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。 wx.ready(function(){ wx.getNetworkType({ success: function (res) { networkStatus = res.networkType; // 返回网络类型2g,3g,4g,wifi } }); }); } } }); }