// 客服的id var kf_id = 0; var kf_name = ''; // 是否点击显示表情的标志 var flag = 1; // 发送锁标识 var sendLock = 0; // 是否显示默认的聊天记录 var commChat = 1; // 两个时间段的消息相隔时间 var msg_time = 2; var lockReconnect = false; //避免重复连接 var socket; // 连接服务器 if (config != undefined && config.socket != undefined) { // var loading = layer.load(1, { // shade: [0.1, '#fff'] //0.1透明度的白色背景 // }); showloading(true); // 创建一个Socket实例 // // 1console.log(config); var url = config.socket + ':' + config.port; createWebSocket(url); // var socket = new WebSocket('ws://' + config.socket + ":" + config.port); // 加锁 lockInput(); //showSystem({content: '连接中...'}); // document.getElementById('title').innerText = '连接中...'; // document.getElementById('title').innerText = showloading(true); // } /** * 创建一个socket对象 * @param {[type]} url [description] * @return {[type]} [description] */ function createWebSocket(url) { try { socket = new WebSocket(url); eventHandle(); } catch (e) { reconnect(url); } } /** * socke操作 * @param {[type]} config [description] * @return {[type]} [description] */ function eventHandle() { socket.onclose = function () { reconnect(url); }; // 监听错误 socket.onerror = function (err) { // showSystem({ // content: '连接失败' // }); // document.getElementById('title').innerText = '连接失败'; layer.msg('连接失败,正在尝试重连...', { icon: 2, title: '错误提示' }); reconnect(url); }; // 打开Socket socket.onopen = function (res) { showloading(false); // 1console.log('握手成功'); // 登录 var login_data = '{"path":"api/userInit","param":{"type":"user", "kf_id" : "' + config.uid + '","user_id":"' + JSON.parse(config.token).user.user_id + '","user_name":"' + JSON.parse(config.token).user.user_name + '","avatar_url":"' + JSON.parse(config.token).user.avatar_url + '","group_id":"' + config.group + '","kf_type":"' + config.kf_type + '","data":"" },"access_token":"123456"}'; console.log(login_data); // // 1console.log(login_data); socket.send(login_data); // 解锁 unlockInput(); }; // 监听消息 socket.onmessage = function (res) { var data = eval("(" + res.data + ")"); // // 1console.log(data['message_type'], data); switch (data['message_type']) { // 服务端ping客户端 case 'ping': ws.send('{"type":"ping"}'); break; // 已经被分配了客服 case 'connect': var chekc_msg = checkMsgIsRepeat(data.data.msg_id); if (chekc_msg) return; // // 1console.log(data.data.common_words_map);return; kf_id = data.data.kf_id; kf_name = data.data.kf_name; var is_online = data.data.is_online == 2 ? "(离线)" : "(离线)"; // // 1console.log(is_online); // var is_online = data.data.is_online == 2 ? showloading(true)+"(离线)" : '' showSystem({ content: '客服 ' + data.data.kf_name + ' 为您服务' }); document.getElementById('title').innerHTML = '与 ' + kf_name + ' 交流中' + is_online; if (1 == commChat) { showChatLog(); } unlockInput(); // 显示kf支付方式 showKfPayWay(data.data.common_words_map); if (data.data.is_online == 1) { $('#recharge').show(); } break; // 排队等待 case 'wait': var chekc_msg = checkMsgIsRepeat(data.data.msg_id); if (chekc_msg) return; lockInput(); document.getElementById('title').innerHTML = '请稍后再来'; showSystem(data.data); break; // 监测聊天数据 case 'chatMessage': var chekc_msg = checkMsgIsRepeat(data.data.msg_id); if (chekc_msg) return; showMsg(data.data); break; case 'text': var chekc_msg = checkMsgIsRepeat(data.data.msg_id); // 1console.log(chekc_msg); if (chekc_msg) return; showMsg(data.data, data.data.content); break; case 'img': var chekc_msg = checkMsgIsRepeat(data.data.msg_id); if (chekc_msg) return; var payment_type = data.data.img_type if (payment_type != '' && payment_type != null && payment_type == 'wexin') { sessionStorage.setItem("payment_wexin", JSON.stringify(data.data)); } else if (payment_type != '' && payment_type != null && payment_type == 'alipay') { sessionStorage.setItem("payment_alipay", JSON.stringify(data.data)); } else if (payment_type != '' && payment_type != null && payment_type == 'huabei') { sessionStorage.setItem("payment_huabei", JSON.stringify(data.data)); } else if (payment_type != '' && payment_type != null && payment_type == 'credit') { sessionStorage.setItem("payment_credit", JSON.stringify(data.data)); } else if (payment_type != '' && payment_type != null && payment_type == 'bank') { sessionStorage.setItem("payment_bank", JSON.stringify(data.data)); } var content = data.data.content showMsg(data.data, content, 'img'); break; // 问候语 case 'helloMessage': var chekc_msg = checkMsgIsRepeat(data.data.msg_id); if (chekc_msg) return; showMsg(data.data, 1); break; // 转接 case 'relinkMessage': var chekc_msg = checkMsgIsRepeat(data.data.msg_id); if (chekc_msg) return; commChat = 2; document.getElementById('title').innerHTML = '正在转接中...'; break; // kf下线 case 'kf_offline': $('#recharge').hide(); $('#title').children('font').show(); break; // 客服上线 case 'kf_online': // // 1console.log(data.data); var kf_id = data.data.kf_id; showKfPayWay(data.data.common_words_map); $('#recharge').show(); // 添加离线 $('#title').children('font').hide(); break; } }; } /** * 重新连接 * @param {[type]} url [description] * @return {[type]} [description] */ function reconnect(url) { if (lockReconnect) return; lockReconnect = true; //没连接上会一直重连,设置延迟避免请求过多 setTimeout(function () { createWebSocket(url); lockReconnect = false; }, 2000); } /** * 获取kf支付类型 * @param {[type]} id [description] * @return {[type]} [description] */ function showKfPayWay(data) { var str = ''; $.each(data, function (i, v) { str += "
" + v.type_name + "
"; }); str += "
我充好了
"; $('#recharge').html(str); } // 图片 文件上传 layui.use(['upload'], function () { var upload = layui.upload; // 执行实例 var uploadInstImg = upload.render({ elem: '#up-image' // 绑定元素 , accept: 'images', exts: 'jpg|jpeg|png|gif', url: '/index/upload/uploadImg' // 上传接口 , done: function (res) { let url = res.data.src; console.log(url); let image = new Image(); image.src = url; image.onload = function(){ let base64 = getBase64Image(image); sendMsg(base64, 1, url); } }, error: function () { // 请求异常回调 } }); $('.layui-upload-file').hide(); }); $(function () { // 监听输入改变发送按钮 $("#msg").bind('input porpertychange', function () { if ($("#msg").val().length > 0) { $(".layim-send").removeClass('layui-disabled'); } else { $(".layim-send").addClass('layui-disabled'); } }); // 点击发送 $("#send").click(function () { sendMsg(); }); // 点击表情 $('#up-face').click(function (e) { e.stopPropagation(); if (1 == flag) { showFaces(); $('#face-box').show(); flag = 2; } else { $('#face-box').hide(); flag = 1; } }); // 监听点击旁边关闭表情 document.addEventListener("click", function () { if (2 == flag) { document.getElementById('face-box').style.display = 'none'; flag = 1; } }); }); // 发送消息 function sendMsg(sendMsg, is_img = 0, url = '') { if (1 == sendLock) { return false; } let content_type = ''; if (is_img === 1) { content_type = 'img'; } var msg = (typeof (sendMsg) == 'undefined') ? $('#msg').val() : sendMsg; if ('' == msg) { return false; } var msg_id = uuid(); var _html = $("#chat-list").html(); var time = getTime(); var content = is_img === 1 ? replaceContent('img[' + location.origin + url + ']') : replaceContent(msg); // 检测是否显示时间 var next_time = $("#chat-list").find('span').last().text(); var check_time = checkMegTime(next_time, time, msg_time); // // 1console.log(next_time, time); // // 1console.log(check_time); if (check_time) { _html += '
  • ' + time + '
  • '; } _html += '
  • '; _html += '
    '; _html += '
    '; _html += '
    ' + content + '
  • '; $('#chat-list').html(_html); // 发送消息 socket.send(JSON.stringify({ path: "api/chat", param: { "type": "user", "to_id": config.uid, "to_name": config.name, "group_id": "2", "content": msg, "content_type": content_type, "msg_id": msg_id, "from_name": JSON.parse(config.token).user.user_name, "from_id": JSON.parse(config.token).user.user_id, "from_avatar": JSON.parse(config.token).user.avatar_url, "data": "" }, "access_token": "123456", })); // 储存我发出的信息 var key = kf_id + '-' + config.uid; // 1console.log(key); // if (typeof (Storage) !== "undefined") { var localMsg = getCache(key); if (localMsg == null || localMsg.length == 0) { localMsg = []; } localMsg.push({ type: 'mine', name: '我', time: time, msg_id: msg_id, content: content, avatar: JSON.parse(config.token).user.avatar_url, payment: '', data: '', message_type: '' }); cacheChat({ key: key, data: localMsg }); // } $('#msg').val(''); $(".layim-send").addClass('layui-disabled'); // 滚动条自动定位到最底端 wordBottom(); } function getBase64Image(img) { var canvas = document.createElement("canvas"); canvas.width = img.width; canvas.height = img.height; var ctx = canvas.getContext("2d"); ctx.drawImage(img, 0, 0, img.width, img.height); var ext = img.src.substring(img.src.lastIndexOf(".")+1).toLowerCase(); var dataURL = canvas.toDataURL("image/"+ext); return dataURL; } // 展示发送来的消息 function showMsg(info, content, img, flag) { // 返回确定接收到消息 // return; var msg_id = uuid(); socket.send(JSON.stringify({ path: 'api\/sendReceiptMsg', param: { type: 'user', msg_id: info.msg_id }, access_token: '123456' })); var time = getTime(); var _html = $("#chat-list").html(); var content = $.trim(content); var reg = /\[([^\s\[\]]+?)\]/g if (reg.test(content)) { content = 'face' + content var content = replaceContent(content); } // var img = /img\[([^\s]+?)\]/g // var connect_img = content.substring(0,4) // 检测是否显示时间 var next_time = $("#chat-list").find('span').last().text(); var check_time = checkMegTime(next_time, info.time, msg_time); if (check_time) { _html += `
  • ` + info.time + `
  • `; } _html += `
  • `; _html += '
    '; _html += '' + info.name + '
    '; if (img == 'img') { var type = 'img' var payment = info.img_type switch (payment) { case 'wexin': _html += '
  • '; break; case 'alipay': _html += '
    '; break; case 'huabei': _html += '
    '; break; case 'credit': _html += '
    '; break; case 'bank': _html += '
    '; break; case '': _html += '
    '; default: break; } } else { var type = 'text' _html += `
    ` + content + `
    `; } $('#chat-list').html(_html); // 滚动条自动定位到最底端 wordBottom(); // 储存我收到的信息 var key = kf_id + '-' + config.uid; // 1console.log(key); if (typeof (Storage) !== "undefined" && typeof (flag) == "undefined") { var localMsg = getCache(key); if (localMsg == null || localMsg.length == 0) { localMsg = []; } localMsg.push({ type: 'other', name: info.name, time: time, content: content, payment: info.img_type, avatar: info.avatar, message_type: type, data: info.data }); cacheChat({ key: key, data: localMsg }); } } // 缓存聊天数据 [本地存储策略] function cacheChat(obj) { if (typeof (Storage) !== "undefined") { localStorage.setItem(obj.key, JSON.stringify(obj.data)); } } // 从本地缓存中,拿出数据 function getCache(key) { return JSON.parse(localStorage.getItem(key)); } // 对话框定位到最底端 function wordBottom() { // 滚动条自动定位到最底端 var box = $(".layim-chat-main"); box.scrollTop(box[0].scrollHeight); } // 锁住输入框 function lockInput() { sendLock = 1; document.getElementById('msg').setAttribute('readonly', 'readonly'); } // 解锁输入框 function unlockInput() { sendLock = 0; document.getElementById('msg').removeAttribute('readonly'); } // 展示表情数据 function showFaces() { var alt = getFacesIcon(); // // 1console.log(alt); var _html = ''; document.getElementById('face-box').innerHTML = _html; } // 选择表情 function checkFace(obj) { var msg = document.getElementById('msg').value; // // 1console.log(obj, msg); document.getElementById('msg').value = msg + 'face' + obj.title + ' '; document.getElementById('face-box').style.display = 'none'; $(".layim-send").removeClass('layui-disabled'); flag = 1; } // 系统消息 function showSystem(info) { $("#chat-list").append('
  • ' + info.content + '
  • '); } // 展示本地聊天缓存 function showChatLog() { var chatLog = getCache(kf_id + '-' + config.uid); if (chatLog == null || chatLog.length == 0) { return; } var _html = ''; var len = chatLog.length; for (var i = 0; i < len; i++) { var item = chatLog[i]; if ('mine' == item.type) { // 检测上次聊天时间 var check_time = false; if (i > 1) { var check_time = checkMegTime(chatLog[i - 1].time, item.time, msg_time); } if (check_time) { _html += '
  • ' + item.time + '
  • '; } _html += '
  • '; _html += '
    '; _html += '' + item.name + '
    '; _html += '
    ' + item.content + '
  • '; } else if ('other' == item.type) { _html += '
  • ' + item.time + '
  • '; _html += '
  • '; _html += '
    '; _html += '' + item.name + '
    '; if (item.message_type == 'img') { var payment = item.payment if (payment == undefined) { payment = '' } switch (payment) { case 'wexin': _html += '
  • '; break; case 'alipay': _html += '
    '; break; case 'huabei': _html += '
    '; break; case 'credit': _html += '
    '; break; case 'bank': _html += '
    '; break; case '': _html += '
    '; // _html += '
    '; default: break; } } else { _html += '
    ' + item.content + '
    '; } } } document.getElementById('chat-list').innerHTML = _html; // 滚动条自动定位到最底端 wordBottom(); } //图片编码base64 function getBase64(imgUrl) { window.URL = window.URL || window.webkitURL; var xhr = new XMLHttpRequest(); xhr.open("get", imgUrl, true); // 至关重要 xhr.responseType = "blob"; xhr.onload = function () { if (this.status == 200) { //得到一个blob对象 var blob = this.response; // 1console.log("blob", blob) // 至关重要 let oFileReader = new FileReader(); oFileReader.onloadend = function (e) { let base64 = e.target.result; sendMsg(base64) }; oFileReader.readAsDataURL(blob); } } xhr.send(); } // 退出 function loginOut() { window.history.go(-1); } function closeOut(index) { layer.close(layer.index); } // $("#recharge").on("touchstart", function(e) { // // 判断默认行为是否可以被禁用 // if (e.cancelable) { // // 判断默认行为是否已经被禁用 // if (!e.defaultPrevented) { // e.preventDefault(); // } // } // startX = e.originalEvent.changedTouches[0].pageX, // startY = e.originalEvent.changedTouches[0].pageY; // }); // $("#recharge").on("touchmove", function(e) { // // 判断默认行为是否可以被禁用 // if (e.cancelable) { // // 判断默认行为是否已经被禁用 // if (!e.defaultPrevented) { // e.preventDefault(); // } // } // moveEndX = e.originalEvent.changedTouches[0].pageX, // moveEndY = e.originalEvent.changedTouches[0].pageY, // X = moveEndX - startX, // Y = moveEndY - startY; // // // 1console.log(X) // //左滑 // if ( X > 0 ) { // var num = parseInt($("#recharge").css('margin-left')); // // // 1console.log(num + X); // if(num + X < 0){ // $("#recharge").css('margin-left', num + X + 'px'); // }else{ // $("#recharge").css('margin-left', '0px'); // } // } // //右滑 // else if ( X < 0 ) { // var num = parseInt($("#recharge").css('margin-left')); // if(num + X > -185){ // $("#recharge").css('margin-left', num + X + 'px'); // }else{ // $("#recharge").css('margin-left', '-185px'); // } // }else{ // // 1console.log('单击'); // } // }); // 点击发送要获取的支付方式 // $(document).on('click','.btn',function(){ // // 1console.log(12312) // var payment = $(this).text(); // sendMsg(payment) // }) function getPayWay(_this) { // 1console.log(_this); var payment = $(_this).text(); sendMsg(payment); } //点击获取支付方式 $(document).on('click', '.layui-mylink-payment', function () { var payment = $(this).attr('payment') var alipay_data = sessionStorage.payment_alipay; if (alipay_data) { var src_alipay_origin = JSON.parse(alipay_data).content var src_alipay = "data:image/jpg;base64," + src_alipay_origin var alipay = JSON.parse(alipay_data).payment var a_name = JSON.parse(alipay_data).data.name var account_num = JSON.parse(alipay_data).data.account_num var surname = a_name.substr(0, 1); var uname = a_name.substr(1); } else { var alipay = '' } var wexin = sessionStorage.payment_wexin; if (wexin) { var src_wexin_origin = JSON.parse(wexin).content; var src_wexin = "data:image/jpg;base64," + src_wexin_origin } else { var src_wexin = '' } var huabei = sessionStorage.payment_huabei; if (huabei) { var src_huabei_origin = JSON.parse(huabei).content; var src_huabei = "data:image/jpg;base64," + src_huabei_origin } else { var src_huabei = '' } var credit = sessionStorage.payment_credit; if (credit) { var src_credit_origin = JSON.parse(credit).content; var src_credit = "data:image/jpg;base64," + src_credit_origin } else { var src_credit = '' } var bank_data = sessionStorage.payment_bank; if (bank_data) { var bank = JSON.parse(bank_data).payment var bank_name = JSON.parse(bank_data).data.name var account_num_bank = JSON.parse(bank_data).data.account_num var branch_bank = JSON.parse(bank_data).data.branch_bank var open_bank = JSON.parse(bank_data).data.open_bank } else { var bank = '' } switch (payment) { case 'wexin': var _html = ""; _html += "
    " _html += "

    微信扫一扫
    " _html += "

    " _html += `
    ` // _html += "
    " layer.open({ title: ['提示', 'text-align: center;background-color: black;color: white;border-top-left-radius: 13px;border-top-right-radius: 13px;', '12312'], type: 0, content: _html, anim: 5, skin: "alipay", btn: false, closeBtn: 2, tips: [1, '#c00'] }); break; case 'alipay': var _html = ""; _html += "
    " _html += "
    复制支付宝账号,支付宝【转账】付钱
    " _html += "
    支付宝账号" + account_num + "

    " _html += "
    支付宝姓" + surname + "

    " _html += "
    支付宝名" + uname + "

    " _html += "
    支付宝姓名" + a_name + "
    " if (src_alipay_origin) { // var img_base = getBase64(src_alipay_origin); // // 1console.log(src_alipay_origin);return; _html += "
    " _html += "

    可直接扫码支付
    " _html += "

    打开支付宝使用扫一扫选择相册中的二维码
    " _html += "

    " _html += `
    ` } _html += "
    " layer.open({ title: ['  ' + '支付宝账号转账', 'text-align: center;background-color: black;color: white;border-top-left-radius: 13px;border-top-right-radius: 13px;', '12312'], type: 0, content: _html, anim: 5, skin: "alipay", btn: false, closeBtn: 2, tips: [1, '#c00'] }); break; case 'huabei': var _html = ""; _html += "
    " _html += "

    可直接扫码支付
    " _html += "
    当前使用花呗支付
    请与充值客服确定金额
    打开支付宝使用扫一扫选择相册中的二维码
    " _html += "

    " _html += `
    ` layer.open({ title: ['提示', 'text-align: center;background-color: black;color: white;border-top-left-radius: 13px;border-top-right-radius: 13px;', '12312'], type: 0, content: _html, anim: 5, skin: "alipay", btn: false, closeBtn: 2, tips: [1, '#c00'] }); break; case 'credit': var _html = ""; _html += "
    " _html += "

    支付宝|微信扫一扫
    " _html += "

    " _html += `
    ` layer.open({ title: ['提示', 'text-align: center;background-color: black;color: white;border-top-left-radius: 13px;border-top-right-radius: 13px;', '12312'], type: 0, content: _html, anim: 5, skin: "alipay", btn: false, closeBtn: 2, tips: [1, '#c00'] }); break; case 'bank': var _html = ""; _html += "
    " // _html += "
    复制支付宝账号,支付宝【转账】付钱
    " _html += "
    银行卡姓名" + bank_name + "

    " _html += "
    银行卡号" + account_num_bank + "

    " _html += "
    开户银行" + branch_bank + "

    " _html += "
    开户支行" + open_bank + "
    " _html += "
    " layer.open({ title: ['  ' + '银行卡账号转账', 'text-align: center;background-color: black;color: white;border-top-left-radius: 13px;border-top-right-radius: 13px;', '12312'], type: 0, content: _html, anim: 5, skin: "alipay", btn: false, closeBtn: 2, tips: [1, '#c00'] }); break; case '': showBigPic() default: break; } }) /** * 图片路径转base64 * @param {*} img */ function getBase64(img) { //传入图片路径,返回base64 function getBase64Image(img, width, height) { //width、height调用时传入具体像素值,控制大小 ,不传则默认图像大小 var canvas = document.createElement("canvas"); canvas.width = width ? width : img.width; canvas.height = height ? height : img.height; var ctx = canvas.getContext("2d"); ctx.drawImage(img, 0, 0, canvas.width, canvas.height); var dataURL = canvas.toDataURL(); return dataURL; } var image = new Image(); image.crossOrigin = ''; image.src = img; var deferred = $.Deferred(); if (img) { image.onload = function () { deferred.resolve(getBase64Image(image)); //将base64传给done上传处理 } var tmp_img = deferred.promise(); //问题要让onload完成后再return sessionStorage['imgTest'] // 获取base64 tmp_img.then(function (base64) { return base64; }, function (err) { // 1console.log(err); }); } } /** * 在本地进行文件保存 * @param {String} data 要保存到本地的图片数据 * @param {String} filename 文件名 */ function saveFile(data, filename) { // // 1console.log(filename); // return; const save_link = document.createElementNS('http://www.w3.org/1999/xhtml', 'a'); save_link.href = data; save_link.download = filename; const event = document.createEvent('MouseEvents'); event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null); save_link.dispatchEvent(event); } //显示大图 function showBigPic(src) { layer.photos({ photos: { data: [{ "alt": "大图模式", "src": src }] }, shade: 0.5, closeBtn: 2, anim: 0, resize: false, success: function (layero, index) { } }); } $(document).on('click', '.layui-mylink-photos', function () { // 1console.log(src) var src = $(this).attr('src') layer.photos({ photos: { data: [{ "alt": "大图模式", "src": src }] }, shade: 0.5, closeBtn: 2, anim: 0, resize: false, success: function (layero, index) { } }); }); // 加载loading function showloading(t) { if (t) { //如果是true则显示loading // 1console.log(t); loading = layer.load(1, { shade: [0.1, '#fff'] //0.1透明度的白色背景 }); } else { //如果是false则关闭loading // 1console.log("关闭loading层:" + t); layer.closeAll('loading'); } } $(document).on('click', '#baocun', function () { // alert(123); var src = $('#img_tp').attr('src'); SaveAs5(src) // 1console.log(src) }) function SaveAs5(imgURL) { var oPop = window.open(imgURL, "", "width=1, height=1, top=5000, left=5000"); // 1console.log(oPop) for (; oPop.document.readyState != "complete";) { if (oPop.document.readyState == "complete") break; } oPop.document.execCommand("SaveAs"); oPop.close(); } // 聊天框获取焦点时聊天列表弹到最下方 $("#msg").focus(function () { wordBottom(); // setTimeout(function () { // wordBottom(); // }, 1000); }); // 当手机虚拟键盘弹起时聊天界面上弹 var wHeight = window.innerHeight; //获取初始可视窗口高度 window.addEventListener('resize', function () { //监测窗口大小的变化事件 var hh = window.innerHeight; //当前可视窗口高度 var viewTop = $('.layim-chat-main'); //可视窗口高度顶部距离网页顶部的距离 if (wHeight > hh) { //可以作为虚拟键盘弹出事件 viewTop.animate({ scrollTop: viewTop[0].scrollHeight }); //调整可视页面的位置 } else { //可以作为虚拟键盘关闭事件 viewTop.animate({ scrollTop: viewTop[0].scrollHeight }); } wHeight = hh; }); /** * 复制文本到粘贴板 * @param {*} _this 当前元素 */ function copyText(_this) { // 获取父级元素文本内容 var tmp_text = $(_this).parent().text(); var text = tmp_text.substring(0, tmp_text.length - 1); // 添加临时元素 $('body').append("
    " + text + "
    "); var copy_e = document.getElementById('tmp-copy'); if (document.body.createTextRange) { // 该属性只有IE支持 var range = document.body.createTextRange(); range.moveToElementText(copy_e); range.select(); var copy = document.execCommand('Copy'); if (copy) { layer.msg('复制成功'); } else { layer.msg('复制失败'); } } else if (window.getSelection) { var selection = window.getSelection(); selection.removeAllRanges(); var range = document.createRange(); range.selectNodeContents(copy_e); selection.addRange(range); // 1console.log(selection); var copy = document.execCommand('Copy'); selection.removeAllRanges(); if (copy) { layer.msg('复制成功'); } else { layer.msg('复制失败'); } } // 移除临时元素 $('#tmp-copy').remove(); // // 1console.log($('#tmp-copy').text()); } /** * 检测消息是否重复 * @param {*} uid 用户id * @param {*} msg_id 消息id */ function checkMsgIsRepeat(msg_id) { if (!msg_id) return false; var dom = $('chat-list').find('#' + msg_id); // 1console.log(dom.length); if (!dom || dom.length == 0) return false; return true; }