// pages/consulting/consulting.js
// 网络请求工具类
var networkUtil = require('../../utils/network_util.js')
var api = require('../../utils/apiFile.js')
// 获取应用实例
var app = getApp();
//聊天工具类
//let msgStorage = require("./chat/msgstorage");
let disp = require("../../utils/broadcast");
let WebIM = require("../../utils/WebIM")["default"];
//let msgType = require("./chat/msgtype");
let page = 0;
let Index = 0;
let isFail = false;
let RECORD_CONST = require("./audio/record_status");
let RecordStatus = RECORD_CONST.RecordStatus;
let RecordDesc = RECORD_CONST.RecordDesc;
let RunAnimation = false
const InitHeight = [50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50]
Page({
/**
* 页面的初始数据
*/
data: {
illnessList:{},
illness:[],
symptomStr:'',
drugsStr:'',
isShowRecordingBtn:false,
chatMsg:[],
yourhxname:'',
myhxname:'',
RecordDesc, // 模板中有引用
radomheight: InitHeight,
recorderManager: wx.getRecorderManager(),
recordClicked: false,
recordStatus: RecordStatus.HIDE,
RecordStatus,
},
handleInputChange: function(e){
// 取出定义的变量名
let currentValue = e.detail.value;
// 取出定义的变量名
let targetData = e.currentTarget.dataset.modal;
// 将 input 值赋值给 定义的变量名,this.name 可以直接取到在 data 中定义的 name 值,其效果跟 this[变量名] 是对等的,这是 js 基础
this.data[targetData] = currentValue;
},
//确认疾病类型
confirmIlltype: function(e) {
this.setData({
illness:e.detail.data
})
},
//开始咨询
startConsulting(e){
var diseaseId = ""
var illness = this.data.illness;
var me = this;
illness.forEach(function(item){
diseaseId += item.id +','
})
diseaseId = diseaseId.substring(0,diseaseId.length -1)
if(!this.data.symptomStr){
wx.showModal({
title: '提示',
content: '请输入症状描述',
showCancel: false,
success: function(res) {}
})
return
}
if(!this.data.drugsStr){
wx.showModal({
title: '提示',
content: '请输入用药情况',
showCancel: false,
success: function(res) {}
})
return
}
if(!diseaseId){
wx.showModal({
title: '提示',
content: '请选择疾病类型',
showCancel: false,
success: function(res) {}
})
return
}
var data = {
memberId:this.data.memberId,
serviceId:this.data.serviceId,
diseaseId:diseaseId,//疾病id
diseaseDesc:this.data.symptomStr, //描述
diseaseDrug:this.data.drugsStr,//用药
doctorId:this.data.doctorId//医生id
}
networkUtil._post(api.addBabyDisease,data,function(res){
if(res.data){
console.log(res)
me.setData({
type:1,
disabled:true
})
}
},function(res){
},'application/json')
},
//历史咨询记录
hisConsultation(e){
wx.navigateTo({
url: '../consultationRecord/consultationRecord',
})
},
//录音开始
showRecordingBtn(){
this.setData({
isShowRecordingBtn:!this.data.isShowRecordingBtn
})
},
handleRecordingMove(e){
var touches = e.touches[0];
var changedTouches = this.data.changedTouches;
if(!changedTouches){
return;
}
if(this.data.recordStatus == RecordStatus.SWIPE){
if(changedTouches.pageY - touches.pageY < 20){
this.setData({
recordStatus: RecordStatus.HOLD
});
}
}
if(this.data.recordStatus == RecordStatus.HOLD){
if(changedTouches.pageY - touches.pageY > 20){
this.setData({
recordStatus: RecordStatus.SWIPE
});
}
}
},
handleRecording(e){
let me = this;
wx.vibrateShort({
success:function() {
console.log('震动调取成功')
},
})
me.setData({
recordClicked: true
})
setTimeout(() => {
if (me.data.recordClicked == true) {
executeRecord()
}
}, 350)
function executeRecord(){
wx.getSetting({
success: (res) => {
let recordAuth = res.authSetting['scope.record']
if (recordAuth == false) { //已申请过授权,但是用户拒绝
wx.openSetting({
success: function (res) {
let recordAuth = res.authSetting['scope.record']
if (recordAuth == true) {
wx.showToast({
title: "授权成功",
icon: "success"
})
} else {
wx.showToast({
title: "请授权录音",
icon: "none"
})
}
me.setData({
isLongPress: false
})
}
})
} else if (recordAuth == true) { // 用户已经同意授权
startRecord()
} else { // 第一次进来,未发起授权
wx.authorize({
scope: 'scope.record',
success: () => {//授权成功
wx.showToast({
title: "授权成功",
icon: "success"
})
}
})
}
},
fail: function () {
wx.showToast({
title: "鉴权失败,请重试",
icon: "none"
})
}
})
}
function startRecord(){
me.data.changedTouches = e.touches[0];
me.setData({
recordStatus: RecordStatus.HOLD
});
RunAnimation = true;
me.myradom();
let recorderManager = me.data.recorderManager || wx.getRecorderManager();
recorderManager.onStart(() => {
// console.log("开始录音...");
});
recorderManager.start({
format: "mp3"
});
// 超时
setTimeout(function(){
me.handleRecordingCancel();
RunAnimation = false
}, 100000);
}
},
handleRecordingCancel(){
RunAnimation = false
let recorderManager = this.data.recorderManager;
// 向上滑动状态停止:取消录音发放
if(this.data.recordStatus == RecordStatus.SWIPE){
this.setData({
recordStatus: RecordStatus.RELEASE
});
}
else{
this.setData({
recordStatus: RecordStatus.HIDE,
recordClicked: false
});
}
recorderManager.onStop((res) => {
console.log("结束录音...", res);
if(this.data.recordStatus == RecordStatus.RELEASE){
console.log("user canceled");
this.setData({
recordStatus: RecordStatus.HIDE
});
return;
}
if (res.duration < 1000) {
wx.showToast({
title: "录音时间太短",
icon: "none"
})
} else {
// 上传
this.uploadRecord(res.tempFilePath, res.duration);
}
});
// 停止录音
recorderManager.stop();
},
uploadRecord(tempFilePath, dur){
var str = WebIM.config.appkey.split("#");
var me = this;
var token = WebIM.conn.context.accessToken;
var myName = wx.getStorageSync('hxName')
wx.uploadFile({
url: "https://a1.easemob.com/" + str[0] + "/" + str[1] + "/chatfiles",
filePath: tempFilePath,
name: "file",
header: {
"Content-Type": "multipart/form-data",
Authorization: "Bearer " + token
},
success(res){
// 发送 xmpp 消息
var id = WebIM.conn.getUniqueId();
var msg = new WebIM.message('audio', id);
var dataObj = JSON.parse(res.data);
// 接收消息对象
msg.set({
apiUrl: WebIM.config.apiURL,
accessToken: token,
body: {
type: 'audio',
url: dataObj.uri + "/" + dataObj.entities[0].uuid,
filetype: "",
filename: tempFilePath,
accessToken: token,
length: Math.ceil(dur / 1000)
},
from: myName,
ext:{
serviceId:me.data.serviceId
},
to: me.data.yourhxname,
roomType: false,
chatType: 'singleChat',
success: function (argument) {
disp.fire('em.chat.sendSuccess', id);
}
});
var msglength = Math.ceil(dur / 1000);
//console.log('发送的语音消息', msg.body)
WebIM.conn.send(msg.body);
if(msg){
var time = WebIM.time();
var msgData = {
info: {
from: msg.from,
to: msg.to
},
username: '',
yourname: msg.from,
msg: {
type: 'audio',
data: msg.body.body.url,
url: msg.body.body.url,
token:token,
length:msglength,
},
style: 'self',
time: time,
mid: 'audio' + msg.id
}
me.data.chatMsg.push(msgData)
var sessionKey = me.data.yourhxname + myName + me.data.serviceId;
var historyChatMsgs = wx.getStorageSync("rendered_" + sessionKey) || [];
historyChatMsgs.push(msgData);
console.log(historyChatMsgs)
wx.vibrateLong({
success:function() {
console.log('震动调取成功')
},
})
wx.setStorage({
key: "rendered_" + me.data.yourhxname + myName + me.data.serviceId,
data: historyChatMsgs,
success: function () {
console.log('success发送图片', me.data)
me.setData({
chatMsg: me.data.chatMsg,
})
me.onRender();
setTimeout(function () {
me.setData({
toView: me.data.chatMsg[me.data.chatMsg.length - 1].mid
})
}, 100)
}
})
}
}
});
},
myradom(){
const that = this;
var _radomheight = that.data.radomheight;
for (var i = 0; i < that.data.radomheight.length; i++) {
//+1是为了避免为0
_radomheight[i] = (100 * Math.random().toFixed(2))+10;
}
that.setData({
radomheight: _radomheight
});
if (RunAnimation) {
setTimeout(function () {that.myradom(); }, 300);
}else{
return
}
},
//发送图片
previewImage(event){
var url = event.target.dataset.url;
wx.previewImage({
urls: [url] // 需要预览的图片 http 链接列表
});
},
sendImage(){
var me = this;
wx.chooseImage({
count: 1,
sizeType: ["original", "compressed"],
sourceType: ["album"],
success(res){
me.upLoadImage(res);
},
});
},
openCamera(){
var me = this;
wx.chooseImage({
count: 1,
sizeType: ["original", "compressed"],
sourceType: ["camera"],
success(res){
me.upLoadImage(res);
}
});
},
upLoadImage(res){
var me = this;
var tempFilePaths = res.tempFilePaths;
var token = WebIM.conn.context.accessToken
wx.getImageInfo({
src: res.tempFilePaths[0],
success(res){
var allowType = {
jpg: true,
gif: true,
png: true,
bmp: true
};
var str = WebIM.config.appkey.split("#");
var width = res.width;
var height = res.height;
var index = res.path.lastIndexOf(".");
var filetype = (~index && res.path.slice(index + 1)) || "";
if(filetype.toLowerCase() in allowType){
wx.uploadFile({
url: "https://a1.easemob.com/" + str[0] + "/" + str[1] + "/chatfiles",
filePath: tempFilePaths[0],
name: "file",
header: {
"Content-Type": "multipart/form-data",
Authorization: "Bearer " + token
},
success(res){
if(res.statusCode === 400){
// 图片上传阿里云检验不合法
var errData = JSON.parse(res.data);
if (errData.error === 'content improper') {
wx.showToast({
title: '图片不合法'
});
return false
}
}
var data = res.data;
var dataObj = JSON.parse(data);
var id = WebIM.conn.getUniqueId(); // 生成本地消息 id
var msg = new WebIM.message('img', id);
var myName = wx.getStorageSync('hxName')
var file = {
type: 'img',
size: {
width: width,
height: height
},
url: dataObj.uri + "/" + dataObj.entities[0].uuid,
filetype: filetype,
filename: tempFilePaths[0]
};
msg.set({
apiUrl: WebIM.config.apiURL,
body: file,
from: myName,
to: me.data.yourhxname,
ext:{
serviceId:me.data.serviceId
},
roomType: false,
chatType: 'singleChat',
success: function (argument) {
disp.fire('em.chat.sendSuccess', id);
}
});
WebIM.conn.send(msg.body);
if(msg){
var time = WebIM.time();
var msgData = {
info: {
to: msg.body.to
},
username: myName,
yourname: msg.body.to,
msg: {
type: msg.type,
data: msg.body.body.url,
url:msg.body.body.url,
size: {
width: msg.body.body.size.width,
height: msg.body.body.size.height,
}
},
style: 'self',
time: time,
mid: msg.id
}
}
me.data.chatMsg.push(msgData)
var sessionKey = me.data.yourhxname + myName + me.data.serviceId;
var historyChatMsgs = wx.getStorageSync("rendered_" + sessionKey) || [];
historyChatMsgs.push(msgData);
wx.vibrateLong({
success:function() {
console.log('震动调取成功')
},
})
wx.setStorage({
key: "rendered_" + me.data.yourhxname + myName + me.data.serviceId,
data: historyChatMsgs,
success: function () {
console.log('success发送图片', me.data)
me.setData({
chatMsg: me.data.chatMsg,
})
me.onRender();
setTimeout(function () {
me.setData({
toView: me.data.chatMsg[me.data.chatMsg.length - 1].mid
})
}, 100)
}
})
}
});
}
}
});
},
//发送文字消息
bindMessage(e){
console.log(e.detail.value)
this.setData({
userMessage: e.detail.value
});
if(this.data.userMessage){
this.setData({
bubbles:true
})
}else{
this.setData({
bubbles:false
})
}
},
sendMessage: function () {
String.prototype.trim=function()
{
return this.replace(/(^\s*)|(\s*$)/g, '');
}
if(!this.data.userMessage.trim()){
return;
}
var that = this
wx.getNetworkType({
success: function (res) {
// console.log("getNetworkType:",res)
if (res.networkType == 'none' && wx.getStorageSync('isHxOpend') == true) {
wx.showModal({
title: '提示',
content: '请检查网络',
showCancel: false,
success: function (res) {
}
})
//断网时不清空消息
that.setData({
inputMessage: that.data.sendInfo
})
} else {
// //console.log(that.data.userMessage)
// //console.log(that.data.sendInfo)
var myName = wx.getStorageSync('hxName')
var id = WebIM.conn.getUniqueId();
var msg = new WebIM.message('txt', id);
msg.set({
msg: that.data.userMessage,
to: that.data.yourhxname,
roomType: false,
ext:{
serviceId:that.data.serviceId
},
success: function (id, serverMsgId) {
console.log(' sendMessage success')
}, fail: function (error) {
console.log("sendMessage error:" + error)
}
});
console.log('发送消息', msg)
msg.body.chatType = 'singleChat';
WebIM.conn.send(msg.body);
that.triggerEvent(
"newTextMsg",
{
msg: msg,
type: 'txt',
},
{
bubbles: true,
composed: true
}
);
if (msg) {
var value = WebIM.parseEmoji(msg.value.replace(/\n/mg, ''))
var time = WebIM.time()
var msgData = {
info: {
to: msg.body.to
},
username: myName,
yourname: msg.body.to,
msg: {
type: msg.type,
data: value
},
style: 'self',
time: time,
mid: msg.id
}
that.data.chatMsg.push(msgData)
var sessionKey = that.data.yourhxname + myName + that.data.serviceId;
var historyChatMsgs = wx.getStorageSync("rendered_" + sessionKey) || [];
historyChatMsgs.push(msgData);
wx.vibrateLong({
success:function() {
console.log('震动调取成功')
},
})
wx.setStorage({
key: "rendered_" + that.data.yourhxname + myName + that.data.serviceId,
data: historyChatMsgs,
success: function () {
//console.log('success', that.data)
that.setData({
chatMsg: that.data.chatMsg,
emojiList: [],
inputMessage: '',
bubbles:false
})
that.onRender();
setTimeout(function () {
that.setData({
toView: that.data.chatMsg[that.data.chatMsg.length - 1].mid
})
}, 100)
}
})
that.setData({
userMessage: ''
})
}
}
},
})
},
//接收消息
receiveMsg: function (msg, type) {
console.log(msg)
var that = this
var myName = wx.getStorageSync('hxName')
if (msg.from == that.data.yourhxname || msg.to == that.data.myhxname) {
//console.log(msg)
if (type == 'txt') {
var value = WebIM.parseEmoji(msg.data.replace(/\n/mg, ''))
} else if (type == 'emoji') {
var value = msg.data
}
//console.log(msg)
//console.log(value)
var time = WebIM.time()
var msgData = {
info: {
from: msg.from,
to: msg.to
},
username: '',
yourname: msg.from,
msg: {
type: type,
data: value,
url: msg.url
},
style: '',
time: time,
mid: msg.type + msg.id
}
if (type == 'audio') {
msgData.msg.length = msg.length,
msgData.msg.token = msg.accessToken
}
if (msg.from == that.data.yourhxname) {
msgData.style = ''
msgData.username = msg.from
} else {
msgData.style = 'self'
msgData.username = msg.to
}
if(msg.ext.isEnding){
msgData.isEnding = msg.ext.isEnding;
that.setData({
type:2
})
}
//console.log(msgData, that.data.chatMsg, that.data)
that.data.chatMsg.push(msgData)
var sessionKey = that.data.yourhxname + myName + that.data.serviceId;
var historyChatMsgs = wx.getStorageSync("rendered_" + sessionKey) || [];
//console.log('当前历史',renderableMsg)
//console.log('历史消息', historyChatMsgs)
historyChatMsgs.push(msgData);
wx.vibrateLong({
success:function() {
console.log('震动调取成功')
},
})
wx.setStorage({
key: "rendered_" + that.data.yourhxname + myName + that.data.serviceId,
data: historyChatMsgs,
success: function () {
console.log('success接收保存', that.data)
that.setData({
chatMsg: that.data.chatMsg,
})
that.onRender();
setTimeout(function () {
that.setData({
toView: that.data.chatMsg[that.data.chatMsg.length - 1].mid
})
}, 100)
}
})
}
},
onRender(){
wx.pageScrollTo({
scrollTop: 5000,
duration: 300,
success: function(){console.log('滚动成功')},
fail: function(){console.log('滚动失败')}
})
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
var options = JSON.parse(options.username)
let me = this;
this.setData({
illnessList:{ title:'疾病类型',
data:[{id:'1',value:'咳嗽'},{id:'2',value:'发热'},{id:'3',value:'贫血'},{id:'4',value:'腹泻'},{id:'5',value:'肺炎'},
{id:'6',value:'手足口病'},{id:'7',value:'鹅口疮'},{id:'8',value:'湿疹'},{id:'9',value:'肠炎'},{id:'10',value:'便秘'}],
placeholder:'请选择疾病类型'
},
myhxname:wx.getStorageSync('hxName'),
yourhxname:options.your,
serviceId:options.serviceId,
memberId:options.memberId,
doctorId:options.doctorId
});
//获取用药记录
networkUtil._get(api.getBabyDisease,{serviceId:options.serviceId},function(res){
var illnessId = res.data.data.diseaseId;
var illnessData = me.data.illnessList.data;
var illness = [];
var disabled = false;
var type = 2;
if(illnessId){
illnessId = illnessId.split(',')
}
if(illnessId&&illnessId.length > 1){
disabled = true;
type = 1;
illnessId.forEach(function(item){
illness = illness.concat(illnessData.filter(it => it.id == item).map(it => it))
})
}
if(illnessId&&illnessId.length == 1){
disabled = true;
type = 1;
illness = illnessData.filter(it => it.id == illnessId).map(it => it);
}
me.setData({
symptomStr:res.data.data.diseaseDesc,
drugsStr:res.data.data.diseaseDrug,
illness:illness,
disabled:disabled,
type:type
})
},function(res){
})
//聊天功能
let yourhxname = this.data.yourhxname;
let myhxname = wx.getStorageSync("hxName");
let serviceId = options.serviceId;
let sessionKey = yourhxname + myhxname + serviceId;
let chatMsg = app.globalData.unrederMsg
this.renderMsg(null, null, chatMsg, sessionKey);
},
renderMsg(renderableMsg, type, curChatMsg, sessionKey, isnew){
let me = this
var historyChatMsgs = wx.getStorageSync("rendered_" + sessionKey) || [];
//console.log('当前历史',renderableMsg)
console.log('历史消息', historyChatMsgs)
if(curChatMsg !== []){
curChatMsg.forEach(function(item){
if(me.data.serviceId == item.serviceId){
historyChatMsgs = historyChatMsgs.concat(item);
}
})
//historyChatMsgs = historyChatMsgs.concat(curChatMsg);
app.globalData.unrederMsg = []
}
if(!historyChatMsgs.length) return;
this.setData({
chatMsg: historyChatMsgs.slice(-10),
// 跳到最后一条
toView: historyChatMsgs[historyChatMsgs.length - 1].mid,
});
wx.setStorageSync("rendered_" + sessionKey, historyChatMsgs);
Index = historyChatMsgs.slice(-10).length;
wx.pageScrollTo({
scrollTop: 5000,
duration: 300,
})
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function () {
}
})