var currentUser_id = 0 //扩展对象方法 $.extend({ //为对象新增ajaxPost方法 request: function (ajaxOpts) { var opts = { type: 'POST', dataType: 'json', timeout: 50000, loading: true, data: { typ: 'json', }, success: function (data, status) {}, error: function (err, status) { Public.tipMsg(__('操作无法成功,请稍后重试!')) }, beforeSend: function (request) { // 规范写法 不可随意自定义 if (localStorage.getItem('ukey')) { request.setRequestHeader( 'Authorization', 'Bearer ' + localStorage.getItem('ukey') ) } }, } $.extend(true, opts, ajaxOpts) if (opts.loading) { //loading //var $this = $(this); var loading //var myTimer; //var preventTooFast = 'ui-btn-dis'; $.extend(true, opts, { beforeSend: function (request) { // 规范写法 不可随意自定义 if (localStorage.getItem('ukey')) { request.setRequestHeader( 'Authorization', 'Bearer ' + localStorage.getItem('ukey') ) } }, complete: function () { //loading.close(); }, }) /* if ($this.hasClass(preventTooFast)) { return; } */ } var successCallback = opts.success var errorCallback = opts.error opts.success = function (data, status) { /*if(data.status != 200){ var defaultPage = Public.getDefaultPage(); var msg = data.msg || '出错了=. =||| ,请点击这里拷贝错误信息 :)'; var errorStr = msg; if(data.data.error){ var errorStr = '' } defaultPage.Public.tips({type:1, content:errorStr}); return; }*/ if (data && data.status == 200) { let _data = data.data currentUser_id = _data.user_info.user_id } successCallback && successCallback(data, status) } opts.error = function (err, ms) { var content = __('服务端响应错误!') if (ms === 'timeout') { content = __('请求超时!') } Public.tipMsg(content) errorCallback && errorCallback(err) } $.ajax(opts) }, }) $.extend({ //为对象新增ajaxPost方法 send: function (url, data, callback, type) { // shift arguments if data argument was omitted if (jQuery.isFunction(data)) { type = type || callback callback = data data = undefined } // The url can be an options object (which then must have .url) return $.request( jQuery.extend( { url: url, type: 'GET', dataType: type, data: data, loading: false, success: callback, }, jQuery.isPlainObject(url) && url ) ) }, }) var socket_connect = 0 //连接状态 var socket_handle = null var vid = 10001 //固定用户调试使用 if (localStorage.getItem('ukey')) { } else { //临时用户 vid = parseInt( Math.random() * (99999999999 - 10000000000 + 1) + 10000000000, 10 ) } window.initIm = function () { //$.send(sprintf("%s/account.php?ctl=%s&met=%s&typ=json", SYS.CONFIG.base_url, 'Index', 'getConfig'), {uid:vid}, function (res) $.send(SYS.CONFIG.im_config, { uid: vid }, function (res) { if (res.status == 200 && res.data.im_chat) { var userInfo = res.data.user_info var resourceSiteUrl = res.data.resource_site_url var suid = res.data.suid var puid = res.data.puid resourceSiteUrl = window.admin_url function addCSS(url) { var link = document.createElement('link') link.type = 'text/css' link.rel = 'stylesheet' link.href = url document.getElementsByTagName('head')[0].appendChild(link) } addCSS(resourceSiteUrl + '/im/css/layui.css?v=' + SYS.VER) $.getScript( resourceSiteUrl + '/im/layui.js?v=' + SYS.VER, function () { layui.config({ base: resourceSiteUrl + '/im/', //你存放新模块的目录,注意,不是layui的模块目录 dir: resourceSiteUrl + '/im/', }) //加载入口 if (!/^http(s*):\/\//.test(location.href)) { alert('请部署到localhost上查看该演示') } layui.use('layim', function (layim) { //演示自动回复 var autoReplay = [ '您好,我现在有事不在,一会再和您联系。', '你没发错吧?face[微笑] ', '洗澡中,请勿打扰,偷窥请购票,个体四十,团体八折,订票电话:一般人我不告诉他!face[哈哈] ', '你好,我是主人的美女秘书,有什么事就跟我说吧,等他回来我会转告他的。face[心] face[心] face[心] ', 'face[威武] face[威武] face[威武] face[威武] ', '<(@ ̄︶ ̄@)>', '你要和我说话?你真的要和我说话?你确定自己想说吗?你一定非说不可吗?那你说吧,这是自动回复。', 'face[黑线] 你慢慢说,别急……', '(*^__^*) face[嘻嘻] ,是贤心吗?', ] var config_data = { //初始化接口 init: { //url: sprintf("%s/account.php?mdu=sns&ctl=%s&met=%s&typ=json", SYS.CONFIG.base_url, 'User_Friend', 'getFriendsInfo'), //url: SYS.CONFIG.friend_info_lists, url: SYS.CONFIG.im_config, data: {}, }, //或采用以下方式初始化接口 /* ,init: { mine: { "username": "LayIM体验者" //我的昵称 ,"id": "100000123" //我的ID ,"status": "online" //在线状态 online:在线、hide:隐身 ,"remark": "在深邃的编码世界,做一枚轻盈的纸飞机" //我的签名 ,"avatar": "a.jpg" //我的头像 } ,friend: [] ,group: [] } */ //查看群员接口 members: { url: sprintf( '%s/account.php?mdu=sns&ctl=%s&met=%s&typ=json', SYS.CONFIG.base_url, 'User_Zone', 'getMembers' ), data: {}, }, //上传图片接口 uploadImage: { url: SYS.CONFIG.upload, //(返回的数据格式见下文) type: 'post', //默认post }, //上传文件接口 uploadFile: { url: SYS.CONFIG.upload, //(返回的数据格式见下文) type: 'post', //默认post }, isAudio: true, //开启聊天工具栏音频 isVideo: true, //开启聊天工具栏视频 //扩展工具栏 tool: [ { alias: 'code', title: '代码', icon: '', }, ], //,brief: true //是否简约模式(若开启则不显示主面板) title: '客服', //自定义主面板最小化时的标题 right: '0px', //主面板相对浏览器右侧距离 //,minRight: '90px' //聊天面板最小化时相对浏览器右侧距离 initSkin: '5.jpg', //1-5 设置初始背景 //,skin: ['aaa.jpg'] //新增皮肤 //,isfriend: false //是否开启好友 isgroup: true, //是否开启群组 min: true, //是否始终最小化主面板,默认false notice: true, //是否开启桌面消息提醒,默认false //,voice: false //声音提醒,默认开启,声音文件为:default.mp3 msgbox: layui.cache.dir + 'css/modules/layim/html/msgbox.html', //消息盒子页面地址,若不开启,剔除该项即可 find: layui.cache.dir + 'css/modules/layim/html/find.html', //发现页面地址,若不开启,剔除该项即可 chatLog: layui.cache.dir + 'css/modules/layim/html/chatlog.html', //聊天记录页面地址,若不开启,剔除该项即可 } if (typeof ajaxCart != 'undefined') { config_data['right'] = '36px' } if (userInfo) { } else { $.cookie('vid', vid) config_data = { init: { //配置客户信息 mine: { username: '访客', //我的昵称 id: puid || vid, //我的ID user_id: vid, //我的ID status: 'online', //在线状态 online:在线、hide:隐身 remark: '在深邃的编码世界,做一枚轻盈的纸飞机', //我的签名 avatar: resourceSiteUrl + '/im/images/user_no_avatar.png', //我的头像 }, }, title: '客服', //自定义主面板最小化时的标题 //开启客服模式 brief: true, isfriend: false, //是否开启好友 isgroup: false, //是否开启群组 min: true, //是否始终最小化主面板,默认false notice: true, //是否开启桌面消息提醒,默认false } } //基础配置 layim.config(config_data) /* layim.chat({ name: '在线客服-小苍' ,type: 'kefu' ,avatar: 'http://tva3.sinaimg.cn/crop.0.0.180.180.180/7f5f6861jw1e8qgp5bmzyj2050050aa8.jpg' ,id: -1 }); layim.chat({ name: '在线客服-心心' ,type: 'kefu' ,avatar: 'http://tva1.sinaimg.cn/crop.219.144.555.555.180/0068iARejw8esk724mra6j30rs0rstap.jpg' ,id: -2 }); layim.setChatMin();*/ //切换在线状态的方法 var setonline = function () { socket_handle.send('_online_user_' + currentUser_id) } //切换离线状态的方法 var sethide = function () { console.log(currentUser_id) socket_handle.send('_leave_user_' + currentUser_id) } //更新在线用户信息 function updateOnlineStatus(arra) { //更新在线用户信息 $( 'div.layui-layim-main ul.layim-list-friend li ul.layui-layim-list li' ).each(function () { //状态还原 if (this.className != 'layim-null') { var span = $(this).find('span:first') var name = span.html() var loginName = this.className .replace('layim-friend', '') .trim() //alert(arra+"***"+loginName); if ((',' + arra + ',').indexOf(',' + loginName + ',') >= 0) { if (name.indexOf('(离线)') >= 0) { span.replace( '(离线)', '(在线)' ) } else if ( name.indexOf('(在线)') >= 0 ) { } else { span.html(name + '(在线)') } } else { if (name.indexOf('(离线)') >= 0) { } else if ( name.indexOf('(在线)') >= 0 ) { span.replace( '(在线)', '(离线)' ) } else { span.html(name + '(离线)') } } } }) } //监听在线状态的切换事件 layim.on('online', function (data) { //console.log(data); if (data == 'online') { setonline() //用户上线 } else { sethide() //用户离线 } }) //监听签名修改 layim.on('sign', function (value) { console.log(value) $.request({ type: 'post', url: SYS.CONFIG.edit_sign, data: { user_sign: value }, dataType: 'json', success: function (result) {}, }) }) //监听自定义工具栏点击,以添加代码为例 layim.on('tool(code)', function (insert) { layer.prompt( { title: __('插入代码'), formType: 2, shade: 0, }, function (text, index) { layer.close(index) insert('[pre class=layui-code]' + text + '[/pre]') //将内容插入到编辑器 } ) }) //监听layim建立就绪 layim.on('ready', function (res) { //console.log(res.mine); /* layim.msgbox(5); //模拟消息盒子有新消息,实际使用时,一般是动态获得 //添加好友(如果检测到该socket) layim.addList({ type: 'group' ,avatar: "http://tva3.sinaimg.cn/crop.64.106.361.361.50/7181dbb3jw8evfbtem8edj20ci0dpq3a.jpg" ,groupname: 'Angular开发' ,id: "12333333" ,members: 0 }); layim.addList({ type: 'friend' ,avatar: "http://tp2.sinaimg.cn/2386568184/180/40050524279/0" ,username: '冲田杏梨' ,groupid: 0 ,id: "1233333312121212" ,remark: "本人冲田杏梨将结束AV女优的工作" }); */ setTimeout(function () { //接受消息(如果检测到该socket) /* layim.getMessage({ username: "Hi" ,avatar: "http://qzapp.qlogo.cn/qzapp/100280987/56ADC83E78CEC046F8DF2C5D0DD63CDE/100" ,id: "10000111" ,type: "friend" ,content: "临时:"+ new Date().getTime() }); layim.getMessage({ username: "贤心" ,avatar: "http://tp1.sinaimg.cn/1571889140/180/40030060651/1" ,id: "1" ,type: "friend" ,content: "嗨,你好!欢迎体验LayIM。演示标记:"+ new Date().getTime() }); */ }, 3000) }) //监听发送消息 layim.on('sendMessage', function (data) { var To = data.to //对方的信息 //跨平台用户修正 //data['to']['id'] = suid + '-' + data['to']['id']; //console.log(data); //发送消息 if (socket_connect === 1) { if (userInfo) { if (To.type === 'group') { var url = sprintf( '%s/account.php?mdu=sns&ctl=%s&met=%s&typ=json', SYS.CONFIG.base_url, 'User_Zone', 'addMessage' ) url = SYS.CONFIG.zonemsg_add_msg } else { var url = sprintf( '%s/account.php?mdu=sns&ctl=%s&met=%s&typ=json', SYS.CONFIG.base_url, 'User_Message', 'add' ) url = SYS.CONFIG.msg_add } console.info(data) var params = {} params['user_other_id'] = data.to.friend_id params['message_content'] = data.mine.content params['item_id'] = 0 params['length'] = 0 params['w'] = 0 params['h'] = 0 //params["type"] = text $.request({ type: 'get', //url: SYS.URL.user.msg_add, url: url, data: params, dataType: 'json', success: function (result) { if (result.status == 200) { var msgData = result.data data['mine']['message_id'] = msgData.message_other_id /* var e = socket.createEvent('send_msg'); e.data = msgData; socket.dispatchEvent(e); */ //向服务器发送数据 var text = JSON.stringify(data) socket_handle.send(text) } else { return false } }, }) } else { //向服务器发送数据 var text = JSON.stringify(data) socket_handle.send(text) } } /* if(To.type === 'friend'){ layim.setChatStatus('对方正在输入。。。'); } //演示自动回复 setTimeout(function(){ var obj = {}; if(To.type === 'group'){ obj = { username: '模拟群员'+(Math.random()*100|0) ,avatar: layui.cache.dir + 'images/face/'+ (Math.random()*72|0) + '.gif' ,id: To.id ,type: To.type ,content: autoReplay[Math.random()*9|0] } } else { obj = { username: To.name ,avatar: To.avatar ,id: To.id ,type: To.type ,content: autoReplay[Math.random()*9|0] } layim.setChatStatus('在线'); } layim.getMessage(obj); }, 1000); */ }) //监听查看群员 layim.on('members', function (data) { //console.log(data); }) //监听聊天窗口的切换 layim.on('chatChange', function (res) { var type = res.data.type console.log(res.data.id) if (type === 'friend') { //模拟标注好友状态 //layim.setChatStatus('在线'); } else if (type === 'group') { //模拟系统消息 /* layim.getMessage({ system: true ,id: res.data.id ,type: "group" ,content: '模拟群员'+(Math.random()*100|0) + '加入群聊' }); */ } }) var connentNode = function (data) { nodeSiteUrl = data.node_site_url resourceSiteUrl = data.resource_site_url var script = document.createElement('script') script.type = 'text/javascript' script.src = resourceSiteUrl + '/js/reconnecting-websocket.js?v=' + SYS.VER document.body.appendChild(script) checkIO() function checkIO() { setTimeout(function () { if (typeof ReconnectingWebSocket === 'function') { connect_node() } else { checkIO() } }, 500) } function connect_node() { var connect_url = nodeSiteUrl var member = {} socket_connect = 0 //连接状态 socket_handle = new ReconnectingWebSocket(connect_url) socket_handle.onopen = function (event) { socket_connect = 1 console.info('open') console.info(event) } socket_handle.onconnecting = function (event) { console.info(event) } socket_handle.onmessage = function (event) { console.info(event) var msg_row = JSON.parse(event.data) if (typeof msg_row.msg_type !== 'undefined') { if (msg_row.msg_type == 'text') { } else if (msg_row.msg_type == 'voice') { msg_row.content = 'audio[' + msg_row.content + ']' } else if (msg_row.msg_type == 'img') { msg_row.content = 'img[' + msg_row.content + ']' } } if (msg_row.message_id) { //消息设置为已读 var url = sprintf( '%s/account.php?mdu=sns&ctl=%s&met=%s&typ=json', SYS.CONFIG.base_url, 'User_Message', 'setRead' ) url = SYS.CONFIG.msg_set_read $.request({ type: 'post', url: url, data: { message_id: msg_row.message_id }, dataType: 'json', success: function (result) {}, }) } layim.getMessage(msg_row) } socket_handle.onerror = function (event) { console.info(event) } socket_handle.onclose = function (event) { console.info(event) } //开始 //结束 } // 表情 function update_chat_msg(msg) { if (typeof smilies_array !== 'undefined') { msg = '' + msg for (var i in smilies_array[1]) { var s = smilies_array[1][i] var re = new RegExp('' + s[1], 'g') var smilieimg = '' +
                      s[6] +
                      '' msg = msg.replace(re, smilieimg) } } return msg } //发送消息的方法 function send(mine, To) { socket_handle.send( currentUser_id + '_msg_' + To.id + '_msg_' + mine.content + '_msg_' + mine.avatar + '_msg_' + To.type + '_msg_' + currentName + '_msg_NAN' ) } } connentNode(res.data) }) }, true ) } }) } //登录后执行 // initIm()