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 += '';
}
break;
case 17://随访调查
var rs = JSON.parse(content);
if(type==2){
if(rs.sysMsg){
temp += ''+
''+
''+rs.text+
' 查看
'+
'';
}
}else{
temp += ''+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
}
});
});
}
}
});
}