//一般直接写在一个js文件中 layui.use(['layer', 'form', 'jquery'], function () { var layer = layui.layer , form = layui.form , $ = layui.jquery; var currentUUID = ''; var uuid = ''; var socket = io.connect('http://'+document.domain+':9010',{ "transports":['websocket', 'polling'] }); var uuids = []; var online_num = 0; //页面初始化函数 function init() { $(".admin-index").addClass("layui-this"); var height = document.body.clientHeight - 292; $(".message-container").css("height", height); window.onresize = function(){ var height = document.body.clientHeight - 292; $(".message-container").css("height", height); }; document.getElementById("msg-send-textarea").onkeydown=function(e){ if(e.keyCode == 13 && e.ctrlKey){ // 这里实现换行 document.getElementById("msg-send-textarea").value += "\n"; }else if(e.keyCode == 13){ // 避免回车键换行 e.preventDefault(); // 下面写你的发送消息的代码 msg_send(); } } } //聊天窗口自动滚到底 function scrollToBottom() { var div = document.getElementById('message-container'); div.scrollTop = div.scrollHeight; } function insert_section(uid) { var html = ''; $(".message-container").append(html); get_message(uid); } function insert_agent_html(msg){ var time = dateFormat(); if(msg.datetime){ time = dateFormat("yyyy-MM-dd hh:mm:ss",new Date(msg.datetime)); } if(!msg.chat_type){ msg.chat_type = 'text'; } var html = '
\n' + '
\n' + ' ' + time + '\n' + ' \n' + '
\n'; if(msg.chat_type == "text"){ html += '
\n' + '
' + msg.content + '
\n' + '
\n' ; }else if(msg.chat_type == "image"){ html += '
' + ' ' + ' photo'+ ' ' + '
'; } html += '
'; $('#section-'+msg.uid).append(html); } function insert_client_html(msg){ var time = dateFormat(); if(msg.datetime){ time = dateFormat("yyyy-MM-dd hh:mm:ss",new Date(msg.datetime)); } if(!msg.chat_type){ msg.chat_type = 'text'; } var html = '
\n' + '
\n' + ' ' + time + '\n' + ' 客户\n' + '
\n' ; if(msg.chat_type == "text"){ html += '
\n' + '
' + msg.content + '
\n' + '
\n' ; }else if(msg.chat_type == "image"){ html += '
' + ' ' + ' photo'+ ' ' + '
'; } html += '
'; $('#section-'+msg.uid).append(html); } function insert_user_html(id,name) { var html = '
\n' + '
\n' + ' \n' + '
\n' + '
' + name + '-' + id + '
\n' + ' '+ '
'; $('.chat-user').append(html); } function msg_sender_status(status){ if(status){ $(".btnMsgSend").removeClass("layui-btn-disabled"); $("#msg-send-textarea").removeAttr("disabled"); $(".empty-status").hide(); }else{ $(".btnMsgSend").addClass("layui-btn-disabled"); $("#msg-send-textarea").attr("disabled","disabled"); $(".empty-status").show(); } } function msg_notification(msg) { $(".chat-user #"+msg.uid+" .msg-tips").show(); if(window.Notification && Notification.permission !== "denied") { Notification.requestPermission(function(status) { var n = new Notification('您有新的消息', { body: msg.content }); }); } } function update_online_status() { var num = uuids.length; if(online_num > num){ num = online_num; } $(".friend-head-right").html( online_num + ' / ' + num + ' 人' ); } //发送消息 function msg_send() { var msg = $("#msg-send-textarea").val(); if(msg){ var msg_sender = { "type":'private', "uid":currentUUID, "content":msg, "from_uid":uuid, "chat_type":'text' }; socket.emit('message', msg_sender); insert_agent_html(msg_sender); scrollToBottom(); $("#msg-send-textarea").val(''); } } //获取在线用户 function get_users() { $.get('/users',function (data) { if(data.code == 200){ $('.chat-user').html(''); var data = data.data; data.forEach(function (user) { insert_user_html(user.uid,user.name + '#'+ (uuids.length + 1)); //创建聊天section insert_section(user.uid); uuids.push(user.uid); }); if(data.length > 0 && !currentUUID){ currentUUID = data[0].uid; } $(".user-info").css("background","#ffffff"); $("#"+currentUUID).css("background","#f2f3f5"); $(".user-section").hide(); msg_sender_status(true); $("#section-"+currentUUID).show(); update_online_status(); } }); } //获取最新的五条数据 function get_message(uid) { $.get('/message?uid='+uid,function (data) { if(data.code == 200){ data.data.reverse().forEach(function (msg) { if(msg.from_uid == uid){ msg.uid = msg.from_uid; insert_client_html(msg); }else{ msg.uid = msg.to_uid; insert_agent_html(msg); } scrollToBottom(); }); } }); } $(".btnMsgSend").click(function(){ msg_send(); }); $(".picture-upload").click(function () { var uploader = Qiniu.uploader({ runtimes: 'html5,flash,html4', // 上传模式,依次退化 browse_button: 'pickfiles', // 上传选择的点选按钮,必需 uptoken_url: '/uptoken', // Ajax请求uptoken的Url,强烈建议设置(服务端提供) get_new_uptoken: false, // 设置上传文件的时候是否每次都重新获取新的uptoken domain: 'http://kefuimg.chinameyer.com/', // bucket域名,下载资源时用到,必需 container: 'btn-uploader', // 上传区域DOM ID,默认是browser_button的父元素 max_file_size: '10mb', // 最大文件体积限制 flash_swf_url: 'path/of/plupload/Moxie.swf', //引入flash,相对路径 max_retries: 3, // 上传失败最大重试次数 dragdrop: false, // 开启可拖曳上传 drop_element: 'btn-uploader', // 拖曳上传区域元素的ID,拖曳文件或文件夹后可触发上传 chunk_size: '4mb', // 分块上传时,每块的体积 auto_start: true, // 选择文件后自动上传,若关闭需要自己绑定事件触发上传 unique_names: true, filters : { max_file_size : '10mb', prevent_duplicates: true, // Specify what files to browse for mime_types: [ {title : "Image files", extensions : "jpg,gif,png,bmp"}, // 限定jpg,gif,png后缀上传 ] }, init: { 'FilesAdded': function(up, files) { plupload.each(files, function(file) { // 文件添加进队列后,处理相关的事情 }); }, 'BeforeUpload': function(up, file) { // 每个文件上传前,处理相关的事情 }, 'UploadProgress': function(up, file) { // 每个文件上传时,处理相关的事情 }, 'FileUploaded': function(up, file, info) { // 查看简单反馈 var domain = up.getOption('domain'); var res = JSON.parse(info); var sourceLink = domain +"/"+ res.key; var msg_sender = { "type":'private', "uid":currentUUID, "content":'图片消息', "from_uid":uuid, "chat_type":'image', "image":sourceLink }; socket.emit('message', msg_sender); insert_agent_html(msg_sender); scrollToBottom(); }, 'Error': function(up, err, errTip) { //上传出错时,处理相关的事情 $.toast("上传失败"); }, 'UploadComplete': function() { //队列文件处理完毕后,处理相关的事情 } } }); }); //连接服务器 socket.on('connect', function () { console.log('连接成功...'); uuid = 'chat-kefu-admin'; var ip = $("#keleyivisitorip").html(); var msg = { "uid" : uuid, "ip" : ip }; socket.emit('login', msg); }); //后端推送来消息时 socket.on('message', function(msg){ insert_client_html(msg); scrollToBottom(); msg_notification(msg); }); //后端推送来消息时 socket.on('update-users', function(msg){ if(msg.type == 'offline'){ //arrayRemove(uuids,msg.uid); $(".chat-user #"+msg.uid+" .user-avatar img").attr("src","/images/server/mine_fill.png"); $("#section-" + msg.uid).hide(); //$(".chat-user").find("#"+msg.uid).remove(); msg_sender_status(false); }else if(msg.type == 'online'){ if(!currentUUID){ currentUUID = msg.uid; } if(currentUUID == uuid){ return false; } var index = uuids.indexOf(msg.uid); if( index == -1){ uuids.push(msg.uid); insert_user_html(msg.uid,msg.name + '#'+ (uuids.length + 1)); //创建聊天section insert_section(msg.uid); }else{ if($(".chat-user").find("#"+msg.uid).length == 0){ insert_user_html(msg.uid,msg.name + '#'+ (uuids.length + 1)); //创建聊天section insert_section(msg.uid); } } $(".chat-user #"+msg.uid+" .user-avatar img").attr("src","/images/server/mine_fill_blue.png"); } update_online_status(); }); //更新用户在线数 socket.on('update_online_count', function(msg){ online_num = (msg.online_count - 1) >= 0 ? (msg.online_count - 1) : 0; update_online_status(); }); //切换用户 $(document).on('click','.user-info',function(){ var uid = $(this).attr("id"); currentUUID = uid; $(".user-info").css("background","#ffffff"); $("#"+uid).css("background","#f2f3f5"); $(".user-section").hide(); $("#section-"+uid).show(); msg_sender_status(true); $(".chat-user #"+uid+" .msg-tips").hide(); }); init(); get_users(); });