濮阳12345web

chat.js 12KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272
  1. var wst, objs = {}, lockReconnect = false;
  2. CreateWebSockets();
  3. function CreateWebSockets() {
  4. try {
  5. // $("#conn").attr("disabled", "disabled");
  6. Connects();
  7. } catch (e) {
  8. ReConnect();
  9. }
  10. }
  11. //连接
  12. function Connects() {
  13. //ws = new WebSocket("ws://192.168.4.18:4006");
  14. //ws = new WebSocket("ws://192.168.1.21:2021");
  15. wst = new WebSocket("ws://117.158.196.116:4006");
  16. wst.onopen = function () {
  17. console.log(new Date() + " " + "建立连接");
  18. // $("#conn").removeAttr("disabled");
  19. var userCode=$.cookie("zx_user");
  20. Conn(userCode);
  21. lockReconnect = false;
  22. };
  23. //接收到消息的回调方法
  24. wst.onmessage = function (evt) {
  25. console.log(new Date() + " receive " + evt.data);
  26. var data = JSON.parse(evt.data);
  27. if (data) {
  28. var ele = $("#" + data.code).find(".chatlist_con")[0];
  29. var type = data.action;
  30. switch (type.toLowerCase()) {
  31. case "serconn":
  32. if (!data.state) {
  33. $(".error").text(data.msg);
  34. }
  35. else {
  36. // $("#conn").attr("disabled", "disabled");
  37. // $(".error").text("注册客服成功");
  38. $(".sidebar_list").empty();//sidebar
  39. $(".chat_main").empty();
  40. }
  41. break;
  42. //case "cusclose":
  43. // append(ele, "notice", data.msg);
  44. // break;
  45. case "sersend":
  46. if (data.state) {
  47. append(ele, "self", data.msg,data.code,data.time);
  48. $("#" + data.code).find(".send_content").val("");
  49. }
  50. else {
  51. notice(ele,"notice", data.msg);
  52. }
  53. break
  54. //case "sersenderror":
  55. // append("notice", data.msg);
  56. // break
  57. case "serreceive":
  58. if (!ele) {
  59. $('.before').show();
  60. var first = '';
  61. if (!$(".sidebar_list li").length) {
  62. first = 'activess';
  63. }
  64. // var userhtml = '<span class="user ' + first + '" code="' + data.code + '">' + data.name + '</span>';
  65. var userhtml = '<li class="user '+ first +' li' + data.code + '" code="' + data.code + '">'+
  66. '<img class="ver_middle" src="img/chat_list1.png" alt="" width="30" height="30"/>'+
  67. '<p class="chat_name">' + data.name + '</p>'+
  68. '<i class="fa fa-circle pie" style="color:red;"></i>'+
  69. '<i class="fa fa-remove closeds" onclick="removed(this)"></i>'+
  70. '</li>';
  71. $(userhtml).appendTo(".sidebar_list").click(function(){
  72. $(".user").removeClass("activess");
  73. // $(this).siblings('li').removeClass("actives");
  74. $(this).addClass("activess");
  75. $(this).find('.pie').removeClass('pieShow').addClass('pieHide');
  76. $('.open_chat').find('.before').removeClass('show').addClass('hide');
  77. $(".tabMain").removeClass("activess");
  78. $("#" + $(this).attr("code")).addClass("activess");
  79. var conul = $("#" + $(this).attr("code")).find(".chatlist_con");
  80. $(conul).scrollTop($(conul)[0].scrollHeight);
  81. });
  82. var tabhtml = '<div class="tabMain ' + first + '" id="' + data.code + '">'+
  83. '<div class="main_message">'+
  84. '<ul class="chatlist_con">'+
  85. '<a href="javascript:void(0)" class="more" onclick="getmore(\'' + data.code + '\')"><i class="fa fa-clock-o" style="margin-right: 5px;"></i>查看更多信息</a>'+
  86. '<input type="hidden" class="hidnum" />' +
  87. '</ul>'+
  88. '</div>'+
  89. '<div class="main_sendMessage ">'+
  90. '<textarea name=" " rows=" " cols=" " placeholder="按Enter 发送 " class="send_content "></textarea>'+
  91. '<input type="hidden" class="hidcid" value="' + data.code + '" />'+
  92. '<div class="send_btn ">'+
  93. '<button class="sendTo " onclick="sendinfo(\'' + data.code + '\') ">发送(S)</button>'+
  94. '<span style="color:red; " class="senderror"></span>'+
  95. '</div>'+
  96. '</div>'+
  97. '</div>' ;
  98. $(".chat_main").append($(tabhtml));
  99. ele = $("#" + data.code).find(".chatlist_con")[0];
  100. objs.action = "loglist";
  101. objs.code = data.code;
  102. Sends();
  103. }
  104. if (!data.state) {
  105. notice(ele, "notice", data.msg);
  106. }
  107. else {
  108. append(ele, "left", data.msg ,data.code,data.time);
  109. }
  110. break; //收到消息
  111. case "loglist":
  112. var list = data.data.rows;
  113. $(list).each(function (i, n) {
  114. var classname = "self";
  115. if (n.F_FromUser == data.code) {
  116. classname = "left";
  117. }
  118. insert(ele, classname, n.F_Message, $("#" + data.code).find(".hidnum").val());
  119. })
  120. if (!data.data.isfirst) {
  121. $(ele).find(".more").css("display", "block");
  122. $("#" + data.code).find(".hidnum").val(data.data.num);
  123. }
  124. else {
  125. $(ele).find(".more").css("display", "none");
  126. }
  127. break;//聊天记录
  128. }
  129. }
  130. };
  131. //连接关闭的回调方法
  132. wst.onclose = function (evt) {
  133. console.log(new Date() + " " + "连接关闭");
  134. console.log(new Date() + " " + "开始重连");
  135. ReConnect();
  136. };
  137. //连接发生错误的回调方法
  138. wst.onerror = function (evt) {
  139. console.log(new Date() + " " + "连接异常");
  140. console.log(new Date() + " " + "开始重连");
  141. ReConnect();
  142. };
  143. }
  144. //重连
  145. function ReConnect() {
  146. if (!lockReconnect) {
  147. lockReconnect = true;
  148. //没连接上会一直重连,设置延迟避免请求过多
  149. setTimeout(function () {
  150. console.log(new Date() + " " + "重连中……");
  151. lockReconnect = false;
  152. CreateWebSockets();
  153. }, 2000);
  154. }
  155. }
  156. //发送
  157. function Sends() {
  158. if (wst.readyState != wst.OPEN) {
  159. ReConnect();
  160. }
  161. if (wst.readyState == wst.OPEN) {
  162. console.log(new Date() + " send " + JSON.stringify(objs));
  163. wst.send(JSON.stringify(objs));
  164. }
  165. }
  166. //注册
  167. function Conn(userCode) {
  168. console.log(userCode);
  169. objs.action = "serconn";
  170. objs.code = userCode;
  171. Sends();
  172. }
  173. //查看更多
  174. function getmore(ele) {
  175. objs.action = "loglist";
  176. objs.code = $("#" + ele).find(".hidcid").val();
  177. objs.msg = $("#" + ele).find(".hidnum").val();
  178. Sends();
  179. }
  180. //发送消息
  181. function sendinfo(ele) {
  182. var msg = $("#" + ele).find(".send_content").val();
  183. console.log(msg)
  184. if (msg) {
  185. objs.action = "sersend";
  186. objs.code = $("#" + ele).find(".hidcid").val();
  187. objs.msg = msg;
  188. Sends();
  189. $("#" + ele).find(".senderror").text("");
  190. }
  191. else {
  192. $("#" + ele).find(".senderror").text("请输入内容");
  193. }
  194. }
  195. function append(ele, cname, msg,codes,dates) {
  196. // var html = '<li><span class="' + cname + '">' + msg + '</span></li>';
  197. var html='<li>' +
  198. '<p class="message_time"><span>' + dates + '</span></p>' +
  199. '<div class="message_mincon ' + cname + '">' +
  200. '<img class="ver_middle" src="img/chat_pic.jpg" alt="" width="30" height="30"/>' +
  201. '<div class="message_text">' + msg + '</div>' +
  202. '</div>' +
  203. '</li>'
  204. $(html).appendTo(ele);
  205. $(ele).scrollTop($(ele)[0].scrollHeight);
  206. $('.li'+codes).find('.pie').removeClass('pieHide').addClass('pieShow');
  207. $('.open_chat').find('.before').removeClass('hide').addClass('show');
  208. }
  209. function insert(ele, cname, msg, nodown) {
  210. // var html = '<li><span class="' + cname + '">' + msg + '</span></li>';
  211. var html='<li>' +
  212. // '<p class="message_time"><span>' + n.CreateDate + '</span></p>' +
  213. '<div class="message_mincon ' + cname + '">' +
  214. '<img class="ver_middle" src="img/chat_pic.jpg" alt="" width="30" height="30"/>' +
  215. '<div class="message_text">' + msg + '</div>' +
  216. '</div>' +
  217. '</li>'
  218. var list = $(ele).find("li");
  219. if (list.length) {
  220. $(html).insertBefore(list[0]);
  221. }
  222. else {
  223. $(html).appendTo(ele);
  224. }
  225. if (!nodown) {
  226. $(ele).scrollTop($(ele)[0].scrollHeight);
  227. }
  228. }
  229. function notice(ele,cname, msg){
  230. var html = '<li><span class="' + cname + '">' + msg + '</span></li>';
  231. $(html).appendTo(ele);
  232. $(ele).scrollTop($(ele)[0].scrollHeight);
  233. }
  234. // //键盘发送事件
  235. // $('input').bind('keypress', function(event) {
  236. // if(event.keyCode == "13") {
  237. // $('.sendTo').trigger("click");
  238. // }
  239. // });
  240. // $(document).keydown(function(event) {
  241. // if(event.keyCode == 13) {
  242. // $(".sendTo").click();
  243. // }
  244. // });
  245. function removed(ele){
  246. var code=$(ele).parent().attr('code');
  247. $(".user").removeClass("activess");
  248. $("#" + code).remove();
  249. $(ele).parent().remove();
  250. $(ele).parent().parent();
  251. showChat();
  252. }
  253. function showChat(){
  254. $('.sidebar_list').children("li:first-child").addClass("activess");
  255. $('.chat_main').children(".tabMain:first-child").addClass("activess");
  256. }
  257. $('.open_chat').click(function(){
  258. if($('#chat').css('display')=='block'){
  259. $('#chat').hide();
  260. }else{
  261. $('#chat').show();
  262. }
  263. })