123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316 |
- var Request = GetRequest()
- new Vue({
- el: '#main',
- data: {
- sessionId:null,
- sessionType:2,//1对1会话
- curDoctorCode:JSON.parse(window.localStorage.getItem('wlyyAgentForDoc')).uid,
- curDoctorName:"",
- otherCode: Request["otherCode"],//对方医生code
- otherName: decodeURIComponent(Request["otherName"]) || "",//对方医生姓名
- planDetailId:Request["planDetailId"],//项目id
- members:[],
- otherInfo:null,//对方的医生信息
- firstMsg:null,
- page:1,
- pagesize:10,
- count:0
- },
- mounted: function() {
- this.createSession();
- this.bindEvents();
- },
- methods:{
- createSession:function(){
- var vm = this;
- var p = {}
- p[vm.curDoctorCode] = 0;
- p[vm.otherCode] = 0;
- var data = {
- session_type: vm.sessionType, session_name: vm.otherName, participants: JSON.stringify(p)
- }
- consultingAPI.createSession(data).then(function(res){
- if(res.status==200){
- vm.sessionId = res.data.id;
- vm.connectSocket();//创建socket连接
- vm.getMembers();//获取成员列表
- }else{
- layer.msg(res.msg, {icon: 5})
- }
- });
- },
- getMembers:function(){
- var vm = this;
- consultingAPI.getParticipants(vm.sessionId).then(function(rs){
- var members = {};
- var isSTF=false;//是否是专科对家医聊天,需要隐藏发送名片入口
- $.each( rs , function(i, v) {
- if(v.level==1) isSTF=true;
- if(v.id!=vm.curDoctorCode){
- vm.otherInfo = v;
- vm.otherCode = v.id;
- }else {
- vm.curDoctorName = v.name;
- }
- vm.members.push({
- id:v.id,
- code: v.id,
- name: v.name,
- sex: v.sex,
- avatar: v.avatar,
- role: v.role,
- is_patient: v.is_patient,//0 医生,1 患者
- last_fetch_time:v.last_fetch_time
- });
- });
-
- //获取消息
- vm.getMessage(true);
- });
- },
- getMessage:function(isInit){
- var vm = this;
- var params = {
- page: vm.page,
- pagesize: vm.pagesize,
- end_msg_id: '',
- start_msg_id: '',
- user: vm.curDoctorCode,
- session_id: vm.sessionId,
- content_type: '',
- isoffset: ''
- }
- consultingAPI.getMessages(params).then(function(res){
- var list = res;
- if (list && list.length > 0) {
- id = list[list.length - 1].id;
- var html = '',
- length = list.length;
-
- for (var j = list.length-1; j >= 0; j--) {
- var reply = list[j];
- html += vm.formatMsg(reply);
- }
- if(isInit){
- $("#talkBox").append(html);
- $("#talkBox").slimScroll({
- height: '100%',
- width: '100%',
- alwaysVisible: true,
- start : 'bottom',
- }).bind('slimscroll', function(e, pos) {
- if(pos == 'top'){
- if(length == 10){
- vm.page++;
- vm.getMessage();
- }
- }
- });
- }else{
- $("#talkBox").prepend(html);
- $("#talkBox").slimScroll({
- scrollTo: 'bottom'
- });
- }
-
- $(".fancybox").fancybox({openEffect:"none",closeEffect:"none"});
- plyr.setup();
- }
- });
- },
- bindEvents:function(){
- var vm = this;
-
- template.helper('getSourceUrl', function(str){
- return httpRequest.getImgUrl(str);
- });
-
- //发送图片
- $("#file_head").on('change', function(){
- var file = this.files[0];
- //先上传图片去服务器,然后再发送消息
- var fd=new FormData();
- fd.append("action", "UploadVMKImagePath");
- fd.append("file", file); //加入文件对象
- fd.append("type", '2');
- var ajaxObj = {
- data: fd,
- cache: false,
- processData: false,
- contentType: false
- }
- consultingAPI.uploadImage(ajaxObj).then(function(res){
- if(res.status == 200){
- vm.sendMessage(2, res.urls);
- var obj = {
- content: res.urls,
- content_type: '2',
- sender_id: vm.curDoctorCode,
- timestamp: new Date().getTime()
- }
- var html = vm.formatMsg(obj);
-
- $("#talkBox").append(html);
- $("#talkBox").slimscroll({
- scrollTo: 'bottom'
- });
- }else{
- layer.msg(res.msg, {icon: 5})
- }
- });
- });
- },
- sendClick:function(){
- var vm = this;
- var $this = $(this);
- var text = $.trim($("#input_content").text());
- if(text.length == 0){
- vm.showWarningMsg('发送内容不能为空');
- return false;
- }else{
- vm.sendMessage(1, text);
- $("#input_content").text('');
- var obj = {
- content: text,
- content_type: '1',
- sender_id: vm.curDoctorCode,
- timestamp: new Date().getTime()
- }
- var html = vm.formatMsg(obj);
-
- $("#talkBox").append(html);
- $("#talkBox").slimscroll({
- scrollTo: 'bottom'
- });
- }
- },
- sendMessage:function(contentType, content){
- var vm = this;
- var params = {
- sender_id: vm.curDoctorCode,
- sender_name: vm.curDoctorName,
- content_type: contentType,
- content: content,
- view: 0
- };
- consultingAPI.sendMessage(vm.sessionId, {data: params}).then(function(res){
- console.log(res);
- vm.count++;
- if(vm.count==1 && JSON.parse(window.localStorage.getItem('wlyyAgent')).doctorType==1 && vm.planDetailId && vm.planDetailId!="undefined"){//level:1 专科医生 (只记录第一条数据)
- var messages = res.messages[0];
- var guidanceParams = {
- messageId:messages.id,//消息id
- content:messages.content,//聊天内容
- planDetailId:vm.planDetailId,//服务项目id
- contentType:messages.content_type//消息类型
- }
- consultingAPI.saveGuidanceMessage(guidanceParams).then(function(rs){
- if(rs.status==200){
-
- }else{
- layer.msg(rs.msg, {icon: 5})
- }
- })
- }
- });
- },
- connectSocket:function(){
- var vm = this;
- jQuery.getScript(httpRequest.socketUrl+"/socket.io/socket.io.js").done(function() {
- var socket = io.connect(httpRequest.socketUrl );
- socket.emit('login', {
- userId: vm.curDoctorCode,
- password: vm.curDoctorCode,
- sessionId: vm.sessionId,
- clientType: "pc_doctor"
- });
- socket.on('message', function (data) {
- console.log(data);
- if(data.read && (data.read == "all" || data.read == "one") ){
- return ;
- }
- var html = vm.formatMsg(data);
- $("#talkBox").append(html);
- $("#talkBox").slimscroll({
- scrollTo: 'bottom'
- });
- });
- socket.on('error', function (data) {
- console.log(data)
- });
- socket.on('ack', function (data) {
- });
- }).fail(function() {
- // dialog({contentType:'tipsbox', skin:'bk-popup' ,bottom:true, content:"医生实时对话连接失败!"}).show();
- });
- },
- formatMsg:function(reply){
- var vm = this;
- try{
- reply = JSON.parse(reply);
- }catch(e){
- }
- var isSelf = (reply.sender_id==vm.curDoctorCode) ? true : false;
- var isSystem = reply.sender_id == 'system';
- var html = '';
- if(reply.content_type == 7 || reply.content_type == 10 || reply.content_type == 13 || reply.content_type == 14){
- var content = reply.content;
- if(isSystem){
- content = '居民24小时内未回复,系统自动结束咨询';
- }
- html = template('sys_msg_tmp', {content: content});
- }else{
- var member;
- for(var i=0; i<vm.members.length; i++){
- if(reply.sender_id == vm.members[i].id){
- member = vm.members[i];
- break;
- }
- }
- var img = httpRequest.getImgUrl(member.avatar);
- if((img.indexOf('http') == -1) && (img.indexOf("https") == -1)){
- img = '../../../images/d-male.png';
- }
- var content = '';
- try{
- if(reply.content_type == 18 || reply.content_type == 19){//居民名片、聊天记录
- content = "暂不支持此类信息";
- }else if(reply.content_type == 3){ //语音
- content = {};
- content.path = JSON.parse(reply.content).path;
- }else if(reply.content_type == 12){ //视频文件
- var arr = reply.content.split(",");
- content = {};
- content.img = arr[0];
- content.path = arr[1];
- content.time = arr[2];
- }else{
- if(vm.isString(reply.content)){
- content = reply.content;
- }else{
- content = JSON.parse(reply.content);
- }
- }
- }catch(e){
-
- }
- var obj = {
- isSelf: isSelf,
- time: new Date(reply.timestamp).format('yyyy-MM-dd HH:mm:ss'),
- type: reply.content_type,
- name: member.name,
- img: img,
- content: content
- };
- html = template('msg_tmp', obj);
- }
- return html;
- },
- isString:function(str){
- return (typeof str=='string')&&str.constructor==String;
- },
- showWarningMsg:function(msg){
- toastr.warning(msg)
- }
- }
- })
|