user.js 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882
  1. var interval = 1;//断开后计时
  2. var new_interval = 1;//消息提醒计时
  3. var connect = 0;//连接状态
  4. var new_msg = 0;//新消息数
  5. var obj = {};
  6. var msg_dialog = '';
  7. var socket = {};
  8. var chat_log = {};
  9. var connect_list = {};$('div[nctype="a-barLoginBox"]').trigger("click");
  10. var connect_n = 0;
  11. var web_info = new Array();//页面信息
  12. var friend_list = new Array();//我的好友
  13. var recent_list = new Array();//最近联系人
  14. var user_list = new Array();//所有会员信息
  15. var msg_list = new Array();//收到消息
  16. var goods_list = new Array();//所有商品信息
  17. var left_list = new Array();//左侧的会员
  18. var right_list = new Array();//右侧的会员
  19. var dialog_show = 0;//对话框是否打开
  20. var user_show = 0;//当前选择的会员
  21. var msg_max = 20;//消息数
  22. var time_max = 10;//定时(分钟)刷新防止登录超时退出,为0时关闭
  23. $(function(){
  24. if(layout == 'layout/seller_layout.php') {
  25. return ;
  26. }
  27. if(user['u_id'] != '') {
  28. web_info['html_title'] = $(document).attr('title');
  29. web_info['msg_dialog'] = '<div id="new_msg_dialog" class="msg-windows"><div class="user-tab-bar"><ul class="user-list" id="user_list"></ul></div><div class="msg-dialog">'+
  30. '<div class="dialog-body">'+
  31. '<div class="msg-top"><dl class="user-info"><dt class="user-name"></dt><dd class="user-avatar avatar-0"><img src="" alt=""></dd><dd class="store-name"></dd></dl>'+
  32. '<span class="dialog-close" onclick="msg_dialog_close(\'new_msg_dialog\');">&nbsp;</span></div>'+
  33. '<div id="msg_list" class="msg-contnet"><div id="user_msg_list"></div></div>'+
  34. '<div class="msg-input-box"><div class="msg-input-title"><a id="chat_show_smilies" href="javascript:void(0)" class="chat_smiles">表情</a>'+
  35. '<span class="title">输入聊天信息</span><span class="chat-log-btn off" onclick="show_chat_log();">聊天记录<i></i></span></div>'+
  36. '<form id="msg_form"><textarea name="send_message" id="send_message" class="textarea" onkeyup="send_keyup(event);" onfocus="send_focus();" ></textarea>'+
  37. '<div class="msg-bottom"><div id="msg_count"></div><a href="JavaScript:void(0);" onclick="send_msg();" class="msg-button"><i></i>发送消息</a><div id="send_alert"></div></div></form></div></div>'+
  38. '<div id="dialog_chat_log" class="dialog_chat_log"></div><div id="dialog_right_clear" class="dialog_right_clear"></div></div><div id="dialog_clear" class="dialog_clear"></div></div>';
  39. var chat_user_list = '<div class="chat-box"><div class="chat-list"><div class="chat-list-top"><h1><i></i>联系人</h1><span class="minimize-chat-list" onclick="chat_show_list();"></span></div>'+
  40. '<div id="chat_user_list" class="chat-list-content"><div><dl id="chat_user_friends"><dt onclick="chat_show_user_list(\'friends\');">'+
  41. '<span class="show"></span>我的好友</dt><dd id="chat_friends" style="display: none;"></dd></dl>'+
  42. '<dl id="chat_user_recent"><dt onclick="chat_show_user_list(\'recent\');"><span class="show"></span>最近联系人</dt><dd id="chat_recent" style="display: none;"></dd></dl></div></div>'+
  43. '</div></div>';
  44. var ajaxurl = CHAT_SITE_URL+'/index.php?act=web_chat&op=get_user_list&n=99&f_id='+user['u_id'];
  45. $.ajax({
  46. type: "GET",
  47. url: ajaxurl,
  48. dataType:"jsonp",
  49. async: true,
  50. success: function(u_list){
  51. for (var u_id in u_list){
  52. var user_info = u_list[u_id];
  53. connect_list[u_id] = 0;
  54. connect_n++;
  55. set_user_info(u_id,"u_name",user_info['u_name']);
  56. set_user_info(u_id,"avatar",user_info['avatar']);
  57. if ( user_info['friend'] == 1 ) friend_list[u_id] = user_info;
  58. if ( user_info['recent'] == 1 ) recent_list[u_id] = user_info;
  59. }
  60. setTimeout("getconnect()",1000);
  61. $("#web_chat_dialog").prepend(chat_user_list);
  62. $('#chat_user_list').perfectScrollbar();
  63. setInterval( function () {
  64. $.get(CHAT_SITE_URL+'/index.php?act=web_chat&op=get_session&key=member_id');
  65. }, time_max*60000);
  66. $("#chat_show_user").click(function() {
  67. chat_show_list();
  68. });
  69. }
  70. });
  71. } else {
  72. var n = send_state();
  73. if (n > 0) setTimeout("getconnect()",2000);
  74. $("#chat_show_user").click(function() {
  75. $('div[nctype="a-barLoginBox"]').trigger("click");
  76. });
  77. }
  78. $('#dialog_clear,#dialog_right_clear').live('click', function() {
  79. if (dialog_show == 1) msg_dialog_close('new_msg_dialog');
  80. });
  81. });
  82. window.onerror=function(){return true;}
  83. if (typeof JSON !== 'object') {//兼容IE7
  84. $.getScript(RESOURCE_SITE_URL+'/js/json2.js');
  85. }
  86. function msg_dialog_close(id){
  87. if (dialog_show == 1) $("#"+id).hide("slide" ,{ direction: 'right' }, 300);
  88. dialog_show = 0;
  89. close_chat_log(user_show);
  90. if ( connect === 1 ) $("#web_chat_dialog").show();
  91. }
  92. function msg_dialog_show(id){
  93. if (dialog_show == 0) {
  94. $("#"+id).show( "slide" ,{ direction: 'right' }, 600,
  95. function() {
  96. $("#send_message").focus();
  97. var obj_msg = obj.find("div[select_user_msg='"+user_show+"']");
  98. obj.find("#msg_list").scrollTop(obj_msg.height());
  99. });
  100. } else {
  101. $("#send_message").focus();
  102. }
  103. dialog_show = 1;
  104. if($("#msg_count").html() == '') {
  105. $("#send_message").charCount({//输入字数控制
  106. allowed: 255,
  107. warning: 10,
  108. counterContainerID:'msg_count',
  109. firstCounterText:'还可以输入',
  110. endCounterText:'字',
  111. errorCounterText:'已经超出'
  112. });
  113. $("#chat_show_smilies").smilies({smilies_id:"send_message"});
  114. }
  115. }
  116. function send_state(){//向服务器请求页面中的相关会员的在线状态
  117. var u_list = connect_list;
  118. var n = connect_n;
  119. if(layout == 'layout/store_layout.php') {
  120. $("[member_id]").each(function(){
  121. n++;
  122. var u_id = $(this).attr("member_id");
  123. if ( u_id > 0 && u_id != user['u_id'] ) u_list[u_id] = 0;
  124. });
  125. } else {
  126. switch (act_op){
  127. case "act_op"://不显示状态
  128. break;
  129. case "member_snsfriend_findlist"://会员中心好友中"查找好友"不显示状态
  130. case "member_snsfriend_follow"://会员中心好友中"我关注的"不显示状态
  131. case "member_snsfriend_fan"://会员中心好友中"关注我的"不显示状态
  132. break;
  133. case "brand_list":
  134. case "search_index":
  135. $(".list_pic em[member_id]").each(function(){
  136. n++;
  137. var u_id = $(this).attr("member_id");
  138. if ( u_id > 0 && u_id != user['u_id'] ) u_list[u_id] = 0;
  139. });
  140. break;
  141. default:
  142. $("[member_id]").each(function(){
  143. n++;
  144. var u_id = $(this).attr("member_id");
  145. if ( u_id > 0 && u_id != user['u_id'] ) u_list[u_id] = 0;
  146. });
  147. break;
  148. }
  149. }
  150. $('[nctype="mcard"]').each(function(){
  151. var data_str = $(this).attr('data-param');
  152. eval('var mcard_obj = '+data_str);
  153. var u_id = mcard_obj["id"];
  154. if ( u_id > 0 && u_id != user['u_id'] ) {
  155. n++;
  156. u_list[u_id] = 0;
  157. }
  158. });
  159. if(connect === 1) {
  160. if(n > 0) {
  161. socket.emit('get_state', u_list);
  162. } else {
  163. if (user['u_id'] == '') {
  164. socket.disconnect();
  165. }
  166. }
  167. } else {
  168. return n;
  169. }
  170. }
  171. function get_state(list){//返回会员的状态并在页面显示
  172. var u_list = list['u_state'];
  173. set_user_list(list['user']);
  174. if(layout == 'layout/store_layout.php' || act_op == 'goods_index') {//店铺页面
  175. var store_id = 0;
  176. var store_name = '';
  177. if($("div.service-list").size() > 0) {
  178. store_id = $("div.service-list").attr("store_id");
  179. store_name = $("div.service-list").attr("store_name");
  180. }
  181. $("[member_id]").each(function(){
  182. var u_id = $(this).attr("member_id");
  183. if(store_id > 0) {
  184. set_user_info(u_id,"s_id",store_id);
  185. set_user_info(u_id,"s_name",store_name);
  186. }
  187. if($(this).find(".chat").size()==0) {
  188. $(this).prepend(get_chat(u_id,u_list[u_id]));
  189. if($(this).attr("c_name")) {//店铺客服
  190. var c_name = $(this).attr("c_name");
  191. set_user_info(u_id,"c_name",c_name);
  192. $(this).find(".chat").attr("href","JavaScript:store_chat("+u_id+",'"+c_name+"');");
  193. }
  194. }
  195. });
  196. } else {
  197. switch (act_op){
  198. case "member_snsfriend_findlist"://会员中心好友中"查找好友"不显示状态
  199. case "member_snsfriend_follow"://会员中心好友中"我关注的"不显示状态
  200. case "member_snsfriend_fan"://会员中心好友中"关注我的"不显示状态
  201. break;
  202. case "brand_list":
  203. case "search_index":
  204. $(".list_pic em[member_id]").each(function(){
  205. var u_id = $(this).attr("member_id");
  206. if($(this).find(".chat").size()==0) {
  207. $(this).prepend(get_chat(u_id,u_list[u_id]));
  208. $(this).after("<p>在线客服</p>");
  209. }
  210. });
  211. break;
  212. default:
  213. $("[member_id]").each(function(){
  214. var u_id = $(this).attr("member_id");
  215. if($(this).find(".chat").size()==0) {
  216. $(this).prepend(get_chat(u_id,u_list[u_id]));
  217. }
  218. });
  219. break;
  220. }
  221. }
  222. if(user['u_id'] != '') {
  223. update_recent();
  224. update_friends();
  225. } else {
  226. socket.disconnect();
  227. }
  228. }
  229. function show_obj(){//弹出框
  230. if(user_show < 1) {
  231. chat_show_list();
  232. return false;
  233. }
  234. msg_dialog_show('new_msg_dialog');
  235. }
  236. function send_focus(){
  237. $("#send_alert").html('');
  238. }
  239. function send_keyup(event){//回车发消息
  240. var t_msg = $.trim($("#send_message").val());
  241. if(event.keyCode == 13 && t_msg.length > 0) {
  242. send_msg();
  243. }
  244. }
  245. function send_msg(){//发消息
  246. if(user_show < 1) {
  247. $("#send_alert").html('未选择聊天会员');
  248. return false;
  249. }
  250. var msg = {};
  251. msg['f_id'] = user['u_id'];
  252. msg['f_name'] = user['u_name'];
  253. msg['t_id'] = user_show;
  254. msg['t_name'] = user_list[user_show]['u_name'];
  255. msg['t_msg'] = $.trim($("#send_message").val());
  256. if(msg['t_msg'].length < 1) {
  257. $("#send_alert").html('发送内容不能为空');
  258. return false;
  259. }
  260. if(msg['t_msg'].length > 255) {
  261. $("#send_alert").html('一次最多只能发送255字');
  262. return false;
  263. }
  264. if(connect < 1) {
  265. $("#send_alert").html('处于离线状态,稍后再试');
  266. return false;
  267. }
  268. $.ajax({
  269. type: "POST",
  270. url: CHAT_SITE_URL+'/index.php?act=web_chat&op=send_msg',
  271. dataType:"jsonp",
  272. data: msg,
  273. async: false,
  274. success: function(t_msg){
  275. if(t_msg['error']) {
  276. $("#send_alert").html(''+t_msg['error']);
  277. return false;
  278. } else {
  279. if ( connect === 1 ) {
  280. socket.emit('send_msg', t_msg);
  281. $("#send_message").val('');
  282. $("#send_message").focus();
  283. $("#send_alert").html('');
  284. show_t_msg(t_msg);
  285. return true;
  286. } else {
  287. $("#send_alert").html('由于网络原因未发送成功,稍后再试');
  288. return false;
  289. }
  290. }
  291. }
  292. });
  293. }
  294. function get_msg(list){//接收消息
  295. var msg = {};
  296. for (var k in list){
  297. msg = list[k];
  298. var m_id = msg['m_id'];
  299. var u_id = msg['f_id'];
  300. set_user(u_id,msg['f_name']);
  301. if (typeof msg_list[u_id][m_id] === "object") {//防止重复计数
  302. continue;
  303. }
  304. if (typeof msg['user'] === "object" && typeof msg['user']['avatar'] !== "undefined" ) {
  305. var user_info = msg['user'];
  306. var u_name = user_info['u_name'];
  307. set_user_info(u_id,"u_name",u_name);
  308. set_user_info(u_id,"s_id",user_info['s_id']);
  309. set_user_info(u_id,"s_name",user_info['s_name']);
  310. set_user_info(u_id,"avatar",user_info['avatar']);
  311. if ( user_info['online'] > 0 ) set_user_info(u_id,"online",1);
  312. }
  313. if ( typeof user_list[u_id]['avatar'] === "undefined" ) {//当没获得会员信息时调用一次
  314. var ajaxurl = CHAT_SITE_URL+'/index.php?act=web_chat&op=get_info&t=member&u_id='+u_id;
  315. $.ajax({
  316. type: "GET",
  317. url: ajaxurl,
  318. dataType:"jsonp",
  319. async: false,
  320. success: function(member){
  321. var u_name = member['member_name'];
  322. set_user_info(u_id,"s_id",member['store_id']);
  323. set_user_info(u_id,"s_name",member['store_name']);
  324. set_user_info(u_id,"avatar",member['member_avatar']);
  325. }
  326. });
  327. }
  328. msg_list[u_id][m_id] = msg;
  329. if(dialog_show == 0 || obj.find("li[select_u_id='"+u_id+"']").size()==0) {//没有打开对话窗口时计数
  330. user_list[u_id]['new_msg']++;
  331. new_msg++;
  332. } else {
  333. if ( user_show == u_id) {
  334. show_msg(u_id);//当前对话的会员消息设为已读
  335. } else {
  336. user_list[u_id]['new_msg']++;
  337. new_msg++;
  338. }
  339. }
  340. alert_user_msg(u_id);
  341. }
  342. alert_msg();
  343. }
  344. function get_chat_log(time_from){
  345. var obj_chat_log = $("#dialog_chat_log");
  346. if(obj_chat_log.html() == '') {
  347. var chat_log_list = '<div class="chat-log-top"><h1><i></i>聊天记录</h1><span class="close-chat-log" onclick="show_chat_log();"></span></div>'+
  348. '<div id="chat_log_list" class="chat_log_list"><div id="chat_log_msg" class="chat-log-msg"></div></div><div class="chat-log-bottom"><div id="chat_time_from" class="chat_time_from">'+
  349. '<span time_id="7" onclick="get_chat_log(7);" class="current">7天</span><span time_id="15" onclick="get_chat_log(15);">15天</span><span time_id="30" onclick="get_chat_log(30);">30天</span></div>'+
  350. '<div class="chat_log_first"><p>已到第一页</p></div><div class="chat_log_last"><p>已到最后一页</p></div>'+
  351. '<div id="chat_log_page" class="chat_log_page"><span onclick="get_chat_previous();" class="previous" title="上一页"></span><span onclick="get_chat_next();" class="next" title="下一页"></span></div></div>';
  352. obj_chat_log.append(chat_log_list);
  353. }
  354. obj_chat_log.show();
  355. chat_log['u_id'] = user_show;
  356. chat_log['now_page'] = 0;
  357. chat_log['total_page'] = 0;
  358. chat_log['time_from'] = 7;
  359. chat_log['list'] = new Array();
  360. var time_id = obj_chat_log.find("span.current").attr("time_id");
  361. if(time_from != time_id) {
  362. obj_chat_log.find("span.current").removeClass("current");
  363. obj_chat_log.find("span[time_id='"+time_from+"']").addClass("current");
  364. chat_log['time_from'] = time_from;
  365. }
  366. get_chat_msg(false);
  367. }
  368. function get_chat_next(){
  369. var now_page = chat_log['now_page'] - 1;
  370. if(now_page >= 1) {
  371. show_chat_msg(now_page);
  372. chat_log['now_page'] = now_page;
  373. } else {
  374. $('.chat_log_last').show();
  375. setTimeout("$('.chat_log_last').hide()",2000);
  376. }
  377. }
  378. function get_chat_previous(){
  379. var now_page = chat_log['now_page'] + 1;
  380. if(chat_log['total_page'] >= now_page) {
  381. if (typeof chat_log['list'][now_page] === "undefined" ) {
  382. get_chat_msg(false);
  383. } else {
  384. show_chat_msg(now_page);
  385. chat_log['now_page'] = now_page;
  386. if(chat_log['total_page'] > now_page && typeof chat_log['list'][now_page+1] === "undefined") get_chat_msg(true);
  387. }
  388. } else {
  389. $('.chat_log_first').show();
  390. setTimeout("$('.chat_log_first').hide()",2000);
  391. }
  392. }
  393. function get_chat_msg(t){
  394. var ajaxurl = CHAT_SITE_URL+'/index.php?act=web_chat&op=get_chat_log&page=30&f_id='+user['u_id']+'&t_id='+chat_log['u_id']+'&t='+chat_log['time_from'];
  395. if(chat_log['now_page'] > 0) ajaxurl += '&curpage='+(chat_log['now_page']+1);
  396. $.ajax({
  397. type: "GET",
  398. url: ajaxurl,
  399. dataType:"jsonp",
  400. async: t,
  401. success: function(chat_msg){
  402. var now_page = chat_log['now_page'] + 1;
  403. chat_log['list'][now_page] = chat_msg['list'];
  404. if(t == false) {
  405. chat_log['now_page'] = now_page;
  406. show_chat_msg(now_page);
  407. }
  408. chat_log['total_page'] = chat_msg['total_page'];
  409. if(chat_log['total_page'] > 1 && chat_log['total_page'] > now_page && t == false) {
  410. get_chat_msg(true);
  411. }
  412. }
  413. });
  414. }
  415. function get_goods_info(msg){//显示商品图片和名称
  416. if ( typeof msg['goods_id'] === "undefined" ) {//没有定义商品编号时调用检测一次
  417. var t_msg = msg['t_msg'];
  418. var shop_site = SHOP_SITE_URL;
  419. var re = new RegExp(shop_site+"/index.php\\?act=goods&amp;op=index&amp;goods_id=(\\d+)$","g");
  420. var arr = re.exec(t_msg);
  421. goods_id = RegExp.$1;
  422. if ( arr == null) {
  423. re = new RegExp(shop_site+"/item-(\\d+)\\.html$","g");
  424. arr = re.exec(t_msg);
  425. goods_id = RegExp.$1;
  426. if ( arr == null) {
  427. goods_id = 0;
  428. }
  429. }
  430. if ( goods_id > 0 ) {
  431. if ( typeof goods_list[goods_id] === "undefined" ) {
  432. var ajaxurl = CHAT_SITE_URL+'/index.php?act=web_chat&op=get_goods_info&goods_id='+goods_id;
  433. $.ajax({
  434. type: "GET",
  435. url: ajaxurl,
  436. dataType:"jsonp",
  437. async: true,
  438. success: function(goods){
  439. if (typeof goods['goods_id'] !== "undefined" ) {
  440. goods_id = goods['goods_id'];
  441. msg['goods_id'] = goods_id;
  442. msg['goods_info'] = goods;
  443. show_msg_goods(msg);
  444. if ( typeof goods_list[goods_id] === "undefined" ) {
  445. goods_list[goods_id] = goods;
  446. }
  447. }
  448. }
  449. });
  450. } else {
  451. msg['goods_id'] = goods_id;
  452. msg['goods_info'] = goods_list[goods_id];
  453. show_msg_goods(msg);
  454. }
  455. }
  456. } else {
  457. show_msg_goods(msg);
  458. }
  459. }
  460. function update_msg(u_id){//更新已读
  461. var u_name = user_list[u_id]['u_name'];
  462. user_list[u_id]['new_msg'] = 0;
  463. alert_user_msg(u_id);
  464. new_msg--;
  465. alert_msg();
  466. }
  467. function store_chat(u_id,c_name){//店铺客服对话窗口
  468. set_user_info(u_id,"c_name",c_name);//设置客服别名
  469. chat(u_id);
  470. }
  471. function chat(u_id){//打开对话窗口
  472. if(user['u_id'] == '') {//未登录时弹出登录窗口
  473. $("#chat_login").trigger("click");
  474. return ;
  475. }
  476. if(u_id == user['u_id']) return ;
  477. if ( typeof user_list[u_id] === "undefined" || typeof user_list[u_id]['avatar'] === "undefined" ) {
  478. var ajaxurl = CHAT_SITE_URL+'/index.php?act=web_chat&op=get_info&t=member&u_id='+u_id;
  479. $.ajax({
  480. type: "GET",
  481. url: ajaxurl,
  482. dataType:"jsonp",
  483. async: false,
  484. success: function(member){
  485. var u_name = member['member_name'];
  486. if( typeof u_name === "undefined" || u_name == '') return false;
  487. set_user_info(u_id,"u_name",u_name);
  488. set_user_info(u_id,"s_id",member['store_id']);
  489. set_user_info(u_id,"s_name",member['store_name']);
  490. set_user_info(u_id,"avatar",member['member_avatar']);
  491. }
  492. });
  493. }
  494. update_user(u_id);
  495. show_msg(u_id);
  496. show_obj();
  497. }
  498. function show_dialog(){//显示窗口
  499. update_dialog();
  500. show_obj();
  501. }
  502. function update_dialog(){//显示会员的对话
  503. if ( new_msg < 1 ) return true;
  504. var select_user = 0;
  505. for (var u_id in user_list){
  506. if ( user_list[u_id]['new_msg'] > 0 ) {
  507. update_user(u_id);
  508. obj.find("em[unread_id='"+u_id+"']").addClass("unread");
  509. obj.find("em[unread_id='"+u_id+"']").html(user_list[u_id]['new_msg']);
  510. }
  511. }
  512. select_user = obj.find(".unread").first().attr("unread_id");
  513. if ( select_user > 0 ) show_msg(select_user);
  514. }
  515. function show_chat_log(){
  516. if(user_show < 1) {
  517. $("#send_alert").html('未选择聊天会员');
  518. return false;
  519. }
  520. if (typeof chat_log['u_id'] === "undefined" || chat_log['u_id'] != user_show) {
  521. $("#web_chat_dialog").hide();
  522. $("#dialog_right_clear").hide();
  523. get_chat_log(7);
  524. obj.find(".chat-log-btn").removeClass("off");
  525. obj.find(".chat-log-btn").addClass("on");
  526. } else {
  527. close_chat_log(user_show);
  528. }
  529. }
  530. function show_msg(u_id){//显示会员的消息
  531. var user_info = user_list[u_id];
  532. var u_name = user_info['u_name'];
  533. if(obj.find("div[select_user_msg='"+u_id+"']").size()==0) {
  534. obj.find("#user_msg_list").prepend('<div class="msg_list" select_user_msg="'+u_id+'"></div>');
  535. }
  536. obj.find(".msg_list").hide();
  537. obj.find("div[select_user_msg='"+u_id+"']").show();
  538. obj.find("li[select_u_id]").removeClass("select_user");
  539. obj.find("li[select_u_id='"+u_id+"']").addClass("select_user");
  540. if(user_show != u_id) {
  541. close_chat_log(user_show);
  542. var add_html = '';
  543. if (typeof user_info['c_name'] !== "undefined") add_html = '--'+user_info['c_name'];
  544. if (typeof user_info['s_name'] !== "undefined") add_html = '<dd class="store-name">'+user_info['s_name']+add_html+'</dd>';
  545. obj.find(".user-info").html('<dt class="user-name">'+u_name+'</dt><dd class="user-avatar avatar-'+user_info['online']+'"><img src="'+
  546. user_info['avatar']+'" alt="'+u_name+'"></dd>'+add_html);
  547. obj.find('#msg_list').perfectScrollbar('destroy');
  548. obj.find('#msg_list').perfectScrollbar();
  549. }
  550. user_show = u_id;
  551. var max_id = 0;
  552. for (var m_id in msg_list[u_id]){
  553. if(obj.find("div[m_id='"+m_id+"']").size()==0) {
  554. var msg = msg_list[u_id][m_id];
  555. show_f_msg(msg);
  556. update_msg(u_id);
  557. delete msg_list[u_id][m_id];//删除消息
  558. if ( m_id > max_id ) max_id = m_id;
  559. }
  560. }
  561. var obj_msg = obj.find("div[select_user_msg='"+u_id+"']");
  562. obj.find("#msg_list").scrollTop(obj_msg.height());
  563. $("#send_message").focus();
  564. if ( max_id > 0 && connect === 1 ) socket.emit('del_msg', {'max_id':max_id,'f_id':u_id});
  565. }
  566. function show_f_msg(msg){//显示收到的消息
  567. var u_id = msg['f_id'];
  568. var user_info = user_list[u_id];
  569. var text_append = '';
  570. var obj_msg = obj.find("div[select_user_msg='"+u_id+"']");
  571. text_append += '<div class="from_msg" m_id="'+msg['m_id']+'">';
  572. text_append += '<span class="user-avatar"><img src="'+user_info['avatar']+'"></span>';
  573. text_append += '<dl><dt class="from-msg-time">';
  574. text_append += msg['add_time']+'</dt>';
  575. text_append += '<dd class="from-msg-text">';
  576. text_append += update_chat_msg(msg['t_msg'])+'</dd>';
  577. text_append += '<dd class="arrow"></dd>';
  578. text_append += '</dl>';
  579. text_append += '</div>';
  580. obj_msg.append(text_append);
  581. get_goods_info(msg);
  582. var n = obj_msg.find("div[m_id]").size();
  583. if ( n >= msg_max && n % msg_max ==1) {
  584. obj_msg.append('<div clear_id="'+msg['m_id']+'" onclick="clear_msg('+u_id+','+msg['m_id']+
  585. ');" class="clear_msg"><a href="Javascript: void(0);">清除已上历史消息</a></div>');
  586. }
  587. obj.find("#msg_list").scrollTop(obj_msg.height());
  588. }
  589. function show_t_msg(msg){//显示发出的消息
  590. var user_info = user;
  591. var u_id = msg['t_id'];
  592. var text_append = '';
  593. var obj_msg = obj.find("div[select_user_msg='"+u_id+"']");
  594. text_append += '<div class="to_msg" m_id="'+msg['m_id']+'">';
  595. text_append += '<span class="user-avatar"><img src="'+user_info['avatar']+'"></span>';
  596. text_append += '<dl><dt class="to-msg-time">';
  597. text_append += msg['add_time']+'</dt>';
  598. text_append += '<dd class="to-msg-text">';
  599. text_append += update_chat_msg(msg['t_msg'])+'</dd>';
  600. text_append += '<dd class="arrow"></dd>';
  601. text_append += '</dl>';
  602. text_append += '</div>';
  603. obj_msg.append(text_append);
  604. get_goods_info(msg);
  605. var n = obj_msg.find("div[m_id]").size();
  606. if ( n >= msg_max && n % msg_max ==1) {
  607. obj_msg.append('<div clear_id="'+msg['m_id']+'" onclick="clear_msg('+u_id+','+msg['m_id']+
  608. ');" class="clear_msg"><a href="Javascript: void(0);">清除已上历史消息</a></div>');
  609. }
  610. obj.find("#msg_list").scrollTop(obj_msg.height());
  611. }
  612. function show_chat_msg(now_page){
  613. var log_list = chat_log['list'][now_page];
  614. $('#chat_log_msg').html('');
  615. for (var k in log_list){
  616. var class_html = '';
  617. var text_append = '';
  618. var msg = log_list[k];
  619. msg['u_name'] = msg['f_name'];
  620. if ( msg['u_name'] == user['u_name'] ) {
  621. msg['u_name'] = '我';
  622. class_html = 'chat_user';
  623. }
  624. text_append += '<div class="chat_msg '+class_html+'" m_id="'+msg['m_id']+'">';
  625. text_append += '<p class="user-log"><span class="user-name">'+msg['u_name']+'</span>';
  626. text_append += '<span class="user-time">'+msg['time']+'</span></p>';
  627. text_append += '<p class="user-msg">'+update_chat_msg(msg['t_msg'])+'</p>';
  628. text_append += '</div>';
  629. $('#chat_log_msg').prepend(text_append);
  630. }
  631. $('#chat_log_list').perfectScrollbar('destroy');
  632. $('#chat_log_list').perfectScrollbar();
  633. $('#chat_log_list').scrollTop($('#chat_log_msg').height());
  634. }
  635. function show_msg_goods(msg){
  636. var m_id = msg['m_id'];
  637. var goods_id = msg['goods_id'];
  638. if ( goods_id != '' && goods_id > 0 ) {
  639. var goods = msg['goods_info'];
  640. var text_append = '';
  641. text_append += '<div class="goods_info">';
  642. text_append += '<div class="goods_name"><a class="goods_pic" target="_blank" href="'+goods['url']+'">';
  643. text_append += goods['goods_name']+'</a></div>';
  644. text_append += '<div class="goods_price">&yen;'+goods['goods_promotion_price']+'</div>';
  645. text_append += '<div class="goods_pic"><a target="_blank" href="'+goods['url']+'">';
  646. text_append += '<img width="60" height="60" src="'+goods['pic']+'"></a></div></div>';
  647. obj.find("div.msg_list div[m_id='"+m_id+"'] dd[class$='-msg-text']").append(text_append);
  648. }
  649. }
  650. function chat_show_user_list(chat_show){
  651. var obj_chat = $("#chat_user_"+chat_show);
  652. if (obj_chat.find("dt span").attr("class") == 'hide') {
  653. obj_chat.find("dd[u_id]").show();
  654. obj_chat.find("dt span").attr("class","show");
  655. } else {
  656. obj_chat.find("dd[u_id]").hide();
  657. obj_chat.find("dt span").attr("class","hide");
  658. }
  659. }
  660. function chat_show_list(){
  661. if(user['u_id'] == '') {
  662. return ;
  663. }
  664. var obj_chat = $(".chat-list");
  665. if (new_msg > 0 || obj_chat.css("display") == 'none') {
  666. obj_chat.show("slide" ,{ direction: 'right' }, 300);
  667. if (new_msg > 0) show_dialog();
  668. } else {
  669. obj_chat.hide("slide" ,{ direction: 'right' }, 300);
  670. }
  671. }
  672. function del_msg(msg){//已读消息处理
  673. var max_id = msg['max_id'];//最大的消息编号
  674. var u_id = msg['f_id'];//消息发送人
  675. for (var m_id in msg_list[u_id]){
  676. if ( max_id >= m_id) {
  677. delete msg_list[u_id][m_id];
  678. if ( user_list[u_id]['new_msg'] > 0 ) user_list[u_id]['new_msg']--;
  679. if ( new_msg > 0 ) new_msg--;
  680. alert_user_msg(u_id);
  681. }
  682. }
  683. alert_msg();
  684. }
  685. function alert_user_msg(u_id){
  686. if ( user_list[u_id]['new_msg'] > 0 ) {
  687. obj.find("em[unread_id='"+u_id+"']").addClass("unread");
  688. obj.find("em[unread_id='"+u_id+"']").html(user_list[u_id]['new_msg']);
  689. $("#chat_user_recent dd[u_id='"+u_id+"'] a").addClass("msg");
  690. } else {
  691. obj.find("em[unread_id='"+u_id+"']").html("");
  692. obj.find("em[unread_id='"+u_id+"']").removeClass("unread");
  693. $("#chat_user_recent dd[u_id='"+u_id+"'] a").removeClass("msg");
  694. }
  695. }
  696. function alert_msg(){
  697. var new_n = 0;
  698. clearInterval(new_interval);
  699. if ( new_msg > 0 ) {//消息提醒
  700. new_interval = setInterval( function () {
  701. new_n++;
  702. if ( connect === 1 ) $(document).attr('title','新消息('+new_msg+') '+web_info['html_title']);
  703. if ( new_n % 3 > 1 ) $(document).attr('title',web_info['html_title']);
  704. }, 500);
  705. $("#new_msg").show().html(new_msg);
  706. } else {
  707. new_msg = 0;
  708. $("#new_msg").hide().html('');
  709. }
  710. $(document).attr('title',web_info['html_title']);
  711. }
  712. function get_chat(u_id,online){//显示链接地址
  713. var add_html = '<a class="chat chat_online" title="在线联系">在线</a>';
  714. if (u_id != user['u_id'] && u_id > 0 ) {
  715. var class_html = 'chat_offline';
  716. var text_html = '离线';
  717. if ( online > 0 ) {
  718. class_html = 'chat_online';
  719. text_html = '在线';
  720. }
  721. add_html = '<a class="chat '+class_html+'" title="在线联系" href="JavaScript:chat('+u_id+');">'+text_html+'</a>';
  722. }
  723. return add_html;
  724. }
  725. function clear_msg(u_id,m_id){//清除消息处理
  726. var obj_msg = obj.find("div[select_user_msg='"+u_id+"']");
  727. obj_msg.find("div[clear_id='"+m_id+"']").prevAll().remove();
  728. obj_msg.find("div[clear_id='"+m_id+"']").remove();
  729. }
  730. function set_user_list(list){//初始化会员列表
  731. for (var k in list){
  732. var user_info = list[k];
  733. var u_id = user_info['u_id'];
  734. var u_name = user_info['u_name'];
  735. var online = 0;
  736. if ( user_info['online'] > 0 ) online = 1;
  737. set_user_info(u_id,"u_name",u_name);
  738. set_user_info(u_id,"s_id",user_info['s_id']);
  739. set_user_info(u_id,"s_name",user_info['s_name']);
  740. set_user_info(u_id,"avatar",user_info['avatar']);
  741. set_user_info(u_id,"online",online);
  742. }
  743. }
  744. function set_user(u_id,u_name){//初始化会员信息
  745. var user_info = new Array();
  746. user_info['u_id'] = u_id;
  747. user_info['u_name'] = u_name;
  748. user_info['new_msg'] = 0;
  749. user_info['online'] = 0;
  750. if ( typeof user_list[u_id] === "undefined" ) user_list[u_id] = user_info;
  751. if ( typeof msg_list[u_id] === "undefined" ) msg_list[u_id] = new Array();
  752. }
  753. function set_user_info(u_id,k,v){//设置会员信息
  754. if ( typeof user_list[u_id] === "undefined" ) set_user(u_id,'');
  755. user_list[u_id][k] = v;
  756. }
  757. function close_chat_log(u_id){
  758. if (user_show == 0 || chat_log['u_id'] == u_id) {
  759. chat_log = {};
  760. $("#dialog_chat_log").hide();
  761. $("#dialog_right_clear").show();
  762. $('#chat_log_msg').html('');
  763. obj.find(".chat-log-btn").removeClass("on");
  764. obj.find(".chat-log-btn").addClass("off");
  765. if ( connect === 1 ) $("#web_chat_dialog").show();
  766. }
  767. }
  768. function close_dialog(u_id){
  769. obj.find("li[select_u_id='"+u_id+"']").remove();
  770. obj.find("div[select_user_msg='"+u_id+"']").hide();
  771. if(obj.find("li[select_u_id]").size()==0) {
  772. msg_dialog_close('new_msg_dialog');
  773. } else {
  774. if ( user_show == u_id ) obj.find("li[select_u_id]").first().trigger("click");
  775. }
  776. if ( user_show == u_id ) {
  777. user_show = 0;
  778. close_chat_log(u_id);
  779. }
  780. if(obj.find("li[select_u_id]").size() < 2) obj.find(".user-tab-bar").hide();
  781. }
  782. function update_chat_msg(msg){
  783. if (typeof smilies_array !== "undefined") {
  784. msg = ''+msg;
  785. for(var i in smilies_array[1]) {
  786. var s = smilies_array[1][i];
  787. var re = new RegExp(""+s[1],"g");
  788. var smilieimg = '<img width="28" height="28" title="'+s[6]+'" alt="'+s[6]+'" src="'+RESOURCE_SITE_URL+'/js/smilies/images/'+s[2]+'">';
  789. msg = msg.replace(re,smilieimg);
  790. }
  791. }
  792. return msg;
  793. }
  794. function update_friends(){
  795. var obj_friend = $("#chat_friends");
  796. for (var u_id in friend_list){
  797. if(obj_friend.parent().find("dd[u_id='"+u_id+"']").size()==0) {
  798. if(user_list[u_id]['online'] > 0 ) {
  799. obj_friend.before('<dd u_id="'+u_id+'" onclick="chat('+u_id+');"><span class="user-avatar"><img alt="'+user_list[u_id]['u_name']
  800. +'" src="'+user_list[u_id]['avatar']+'"><i class="online"></i></span><h5>'+user_list[u_id]['u_name']+'</h5><a href="javascript:void(0)"></a></dd>');
  801. } else {
  802. obj_friend.after('<dd u_id="'+u_id+'" onclick="chat('+u_id+');"><span class="user-avatar"><img alt="'+user_list[u_id]['u_name']
  803. +'" src="'+user_list[u_id]['avatar']+'"><i class="offline"></i></span><h5>'+user_list[u_id]['u_name']+'</h5><a href="javascript:void(0)"></a></dd>');
  804. }
  805. }
  806. }
  807. obj_friend.remove();
  808. chat_show_user_list('friends');
  809. }
  810. function update_recent(){
  811. var obj_recent = $("#chat_recent");
  812. for (var u_id in recent_list){
  813. if(obj_recent.parent().find("dd[u_id='"+u_id+"']").size()==0) {
  814. if(user_list[u_id]['online'] > 0 ) {
  815. obj_recent.before('<dd u_id="'+u_id+'" title="最后对话:'+recent_list[u_id]['time']+'" onclick="chat('+u_id+');"><span class="user-avatar"><img alt="'+user_list[u_id]['u_name']
  816. +'" src="'+user_list[u_id]['avatar']+'"><i class="online"></i></span><h5>'+user_list[u_id]['u_name']+'</h5><a href="javascript:void(0)"></a></dd>');
  817. } else {
  818. obj_recent.after('<dd u_id="'+u_id+'" title="最后对话:'+recent_list[u_id]['time']+'" onclick="chat('+u_id+');"><span class="user-avatar"><img alt="'+user_list[u_id]['u_name']
  819. +'" src="'+user_list[u_id]['avatar']+'"><i class="offline"></i></span><h5>'+user_list[u_id]['u_name']+'</h5><a href="javascript:void(0)"></a></dd>');
  820. }
  821. }
  822. }
  823. obj_recent.remove();
  824. }
  825. function update_user(u_id){
  826. if(obj.find("li[select_u_id='"+u_id+"']").size()==0) {
  827. var user_info = user_list[u_id];
  828. var u_name = user_info['u_name'];
  829. var text_append = '';
  830. var class_html = 'offline';
  831. if ( user_info['online'] > 0 ) class_html = 'online';
  832. text_append += '<li class="user" select_u_id="'+u_id+'" onclick="show_msg('+u_id+');">';
  833. text_append += '<i class="'+class_html+'"></i>';
  834. text_append += '<span class="user-avatar avatar-'+user_info['online']+'" title="'+u_name+'"><img alt="'+u_name+'" src="'+user_info['avatar']+'"></span>';
  835. text_append += '<span class="user-name" title="'+u_name+'">';
  836. text_append += u_name+'<em></em></span>';
  837. text_append += '<em unread_id="'+u_id+'" class=""></em>';
  838. text_append += '<a class="ac-ico"></a>';
  839. text_append += '</li>';
  840. obj.find("#user_list").append(text_append);
  841. obj.find("#user_list").sortable({ items: 'li' });
  842. obj.find("li[select_u_id='"+u_id+"'] .ac-ico").bind("click", function() { close_dialog(u_id);return false; });
  843. if(obj.find("li[select_u_id]").size() > 1) obj.find(".user-tab-bar").show();
  844. }
  845. obj.find(".user-tab-bar").perfectScrollbar();
  846. }
  847. function getconnect(){
  848. $.getScript(connect_url+"/resource/socket.io.js", function(){
  849. clearInterval(interval);
  850. if ( typeof io === "object" ) {
  851. socket = io.connect(connect_url, { 'resource': 'resource', 'reconnect': false });
  852. socket.on('connect', function () {
  853. connect = 1;
  854. send_state();
  855. socket.on('get_state', function (u_list) {
  856. get_state(u_list);
  857. });
  858. if(user['u_id'] == '') return false;//未登录时不取消息
  859. $("#web_chat_dialog").show();
  860. if($("#new_msg_dialog").size()==0) $("#web_chat_dialog").after(web_info['msg_dialog']);
  861. obj = $("#new_msg_dialog");
  862. socket.emit('update_user', user);
  863. socket.on('get_msg', function (msg_list) {
  864. get_msg(msg_list);
  865. });
  866. socket.on('del_msg', function (msg) {
  867. del_msg(msg);
  868. });
  869. socket.on('disconnect', function () {
  870. connect = 0;
  871. $("#web_chat_dialog").hide();
  872. interval = setInterval( getconnect, 60000);//断开1分钟后重新连接服务器
  873. });
  874. });
  875. }
  876. });
  877. }