reim_xina_kefu.js 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263
  1. /**
  2. * 信呼在线客服使用
  3. * caratename:雨中磐石(rainrock)
  4. * caratetime:2021-11-01 21:40:00
  5. * homepage:www.rockoa.com
  6. */
  7. reim.kefu = {
  8. arrobj:{},
  9. loaddata:function(){
  10. if(!get('centshow3'))return;
  11. this.initreload();
  12. },
  13. initreload:function(){
  14. reim.ajax(reim.getapiurl('reim','rockkefu'),{}, function(ret){
  15. if(ret.data=='ok')reim.kefu.reload();
  16. });
  17. },
  18. reload:function(o1){
  19. $('#changetabs3').show();
  20. if(o1)$(o1).html(''+js.ling(12)+' 刷新中...');
  21. reim.ajax(reim.getapiurl('rockkefu','index'),{}, function(ret){
  22. reim.kefu.showdata(ret.data);
  23. });
  24. },
  25. showdata:function(da){
  26. this.arrobj={};
  27. if(!this.socketob && da.config)this.linkwebsocket(da.config,0);
  28. this.showlishi(da.history,da.zixunarr);
  29. this.showwait(da.waitarr);
  30. },
  31. linkwebsocket:function(conf,lx){
  32. this.reimconf = conf;
  33. clearTimeout(this.webtimes);
  34. if(this.ws)this.ws.close();
  35. if(!conf.wsurl)return;
  36. this.ws = new WebSocket(jm.base64decode(conf.wsurl));
  37. var me = this;
  38. this.myid = conf.id;
  39. this.ws.onopen = function(){
  40. this.send('{"from":"'+conf.recid+'","adminid":"'+conf.id+'","atype":"connect","sendname":"'+conf.name+'"}');
  41. me.socketob = true;
  42. if(lx==1)me.linkwebsocket(conf,2);
  43. };
  44. this.ws.onerror = function(e){
  45. me.socketob = false;
  46. me.reloadWebSocket(false);
  47. };
  48. this.ws.onmessage = function (evt){
  49. var ds = JSON.parse(evt.data);
  50. me.onmessage(ds);
  51. };
  52. this.ws.onclose = function(e){
  53. me.socketob = false;
  54. me.reloadWebSocket(false);
  55. };
  56. },
  57. reloadWebSocket:function(bo){
  58. clearTimeout(this.webtimes);
  59. if(!bo){
  60. this.webtimes=setTimeout('reim.kefu.reloadWebSocket(true)', 5*1000);
  61. }else{
  62. if(!this.socketob)this.linkwebsocket(this.reimconf,1);
  63. }
  64. },
  65. showonline:function(ty,id){
  66. var bh = ''+ty+'_'+id+'';
  67. var d1 = this.arrobj[bh];
  68. var id1 = 'lname_'+bh+'';
  69. if(d1 && get(id1) && d1.online==1)get(id1).style.fontWeight='bold';
  70. },
  71. showoffline:function(ty,id){
  72. var bh = ''+ty+'_'+id+'';
  73. var d1 = this.arrobj[bh];
  74. var id1 = 'lname_'+bh+'';
  75. if(d1 && get(id1))get(id1).style.fontWeight='';
  76. if(d1)d1.online=0;
  77. },
  78. showlishi:function(da,das){
  79. var ds = [],i,d1,id1,bh;
  80. for(i=0;i<da.length;i++){
  81. d1 = da[i];
  82. d1.receid = d1.id;
  83. if(d1.type=='zixun'){
  84. this.arrobj[''+d1.type+'_'+d1.receid+''] = d1;
  85. }
  86. }
  87. for(i=0;i<das.length;i++){
  88. d1 = das[i];
  89. d1.type = 'zixun';
  90. d1.receid = d1.id;
  91. bh = ''+d1.type+'_'+d1.receid+'';
  92. if(!this.arrobj[bh])this.arrobj[bh] = d1;
  93. }
  94. for(d1 in this.arrobj)ds.push(this.arrobj[d1]);
  95. js.setoption('kefulist', JSON.stringify(ds));
  96. reim.showhistory(reim.maindata.harr);
  97. for(i=0;i<ds.length;i++){
  98. d1 = ds[i];
  99. id1 = 'lname_'+d1.type+'_'+d1.id+'';
  100. if(get(id1) && d1.online==1)get(id1).style.fontWeight='bold';
  101. }
  102. },
  103. onmessage:function(d){
  104. //console.log(d);
  105. var lx=d.type;
  106. if(lx=='chehui'){
  107. $('#qipaocont_mess_'+d.messid+'').html(js.getmsg(jm.base64decode(d.mess),'green'));
  108. this.reload();
  109. }
  110. if(lx=='zixun' || lx=='rewait'){
  111. this.reload();
  112. if(d.title){
  113. var d1 = {
  114. gid:d.sendid,
  115. title:jm.base64decode(d.title),
  116. gname:d.gname,
  117. cont:d.mess,
  118. type:'zixun',
  119. face:d.face,
  120. sound:'web/res/sound/todo.ogg'
  121. };
  122. reim.receivechat(d1);
  123. }
  124. }
  125. if(lx=='zxoff'){
  126. this.showoffline('zixun', d.zixunid);
  127. }
  128. if(lx=='kftokf'){
  129. this.reload();
  130. var d1 = {
  131. gid:d.zxid,
  132. title:jm.base64decode(d.title),
  133. gname:d.gname,
  134. cont:d.mess,
  135. type:'zixun',
  136. face:d.face,
  137. sound:'web/res/sound/todo.ogg'
  138. };
  139. reim.receivechat(d1);
  140. }
  141. },
  142. showwait:function(ds){
  143. var i,s,d1;
  144. $('#kefulistwait').html('');
  145. for(i=0;i<ds.length;i++){
  146. d1 = {
  147. 'name':ds[i].name,
  148. 'type':'wait',
  149. 'receid':ds[i].id,
  150. 'cont':ds[i].cont,
  151. 'face':ds[i].face,
  152. 'online':ds[i].online,
  153. 'subname':ds[i].subname,
  154. 'qian':'wait',
  155. 'stotal':ds[i].stotal
  156. }
  157. this.arrobj[''+d1.type+'_'+d1.receid+''] = d1;
  158. s = reim.showhistorys(d1,false, false, true);
  159. $('#kefulistwait').append(s);
  160. if(d1.online==1)this.showonline(d1.type,d1.receid);
  161. }
  162. $('#kefulistwait').append('<div align="center" style="padding:10px;"><a onclick="reim.kefu.reload(this)" style="font-size:12px;color:#bbbbbb" href="javascript:;"><i class="icon-refresh"></i> 刷新咨询</a></div>');
  163. reim.showbadge('wait');
  164. },
  165. openwait:function(d){
  166. var str = ''+d.name+'';
  167. if(d.subname)str+='<span style="color:'+maincolor+';font-size:10px">@'+d.subname+'</span>';
  168. js.confirm('确定要解答“'+str+'”此用户问题吗?', function(jg){
  169. if(jg=='yes')reim.kefu.openwaits(d);
  170. });
  171. },
  172. openwaits:function(d){
  173. $('#history_wait_'+d.receid+'').remove();
  174. this.arrobj[''+d.type+'_'+d.receid+''] = false;
  175. reim.showbadge('wait');
  176. js.loading('加入中...');
  177. reim.ajax(reim.getapiurl('rockkefu','addzixun'),{sid:d.receid}, function(ret){
  178. reim.kefu.reload();
  179. js.unloading();
  180. reim.changetabs(0);
  181. reim.showbadge('wait');
  182. reim.openchat('zixun',d.receid,d.name,d.face);
  183. });
  184. },
  185. showuser:function(sid){
  186. this.nowsid = sid;
  187. js.tanbody('zhuandivkefu','咨询人员信息',350,200,{
  188. html:'<div id="zhuandivkefu" style="height:300px;overflow:hidden;position:relative"><div align="center" style="padding:50px"><img src="images/mloading.gif"></div></div>'
  189. });
  190. reim.ajax(reim.getapiurl('rockkefu','getzxinfo'),{sid:this.nowsid},function(ret){
  191. reim.kefu.showzxinfo(ret.data);
  192. });
  193. },
  194. showzxinfo:function(ret){
  195. var str = '<table style="margin:10px">',k,v,s1;
  196. this.prinfo = ret.prinfo;
  197. this.prfies = ret.prfies;
  198. for(k in ret.prfies){
  199. v = ret.prinfo[k];
  200. if(v==null)v='';
  201. s1 = '<a onclick="reim.kefu.dbleditstr(\''+k+'\')" style="font-size:13px" class="hui">'+ret.prfies[k]+'</a>';
  202. if(k=='web'||k=='ip'||k=='adddt'||k=='zxdt'||k=='agentna'||k=='kefu')s1=ret.prfies[k];
  203. str+='<tr valign="top"><td nowrap class="cursor" style="color:gray;text-align:right;padding:4px 0px">'+s1+':</td><td style="padding:4px 0px" fields="'+k+'" class="wrap">'+v+'</td></tr>';
  204. }
  205. str+='</table>';
  206. $('#zhuandivkefu').html(str);
  207. $('#zhuandivkefu').perfectScrollbar();
  208. js.resizetan('confirm');
  209. },
  210. shareuser:function(sid, slx){
  211. changkfid = 0;
  212. this.nowsid = sid;
  213. var nae = '转给其他客服';
  214. if(slx==1)nae = '加更多客服';
  215. js.confirm('<div id="zhuandivkefu"><img src="images/mloading.gif"></div>',function(jg){
  216. if(jg=='yes')reim.kefu.savezhuan(slx);
  217. },'',nae);
  218. this.zshouwku(false);
  219. },
  220. dbleditstr:function(fid){
  221. var v = this.prinfo[fid],nam=this.prfies[fid];
  222. if(v==null)v='';
  223. js.prompt('请填写内容:','填写“'+nam+'”的值',function(jg,txt,act){
  224. if(jg=='yes'){
  225. reim.kefu.saveval(fid,txt,'zhuandivkefu');
  226. return false;
  227. }
  228. },v);
  229. },
  230. saveval:function(fid,val,act){
  231. js.setmsg('保存中...','','msgview_'+act+'');
  232. reim.ajax(reim.getapiurl('rockkefu','savezixun'),{fid:fid,val:val,sid:this.nowsid},function(ret){
  233. reim.kefu.prinfo[fid] = val;
  234. $('#zhuandivkefu').find('td[fields="'+fid+'"]').html(val);
  235. js.setmsg('','','msgview_'+act+'');
  236. },'post');
  237. },
  238. zshouwku:function(d){
  239. if(!d){
  240. reim.ajax(reim.getapiurl('rockkefu','getkefu'),{sid:this.nowsid},function(ret){reim.kefu.zshouwku(ret.data);});
  241. }else{
  242. this.kefuarr = d;
  243. var i,len=d.length,a1,str='';
  244. for(i=0;i<len;i++){
  245. str+='<label><input type="radio" name="qhkefu" onclick="changkfid=this.value" value="'+d[i].id+'"><img src="'+d[i].face+'" align="absmiddle" width="20" height="20" style="border-radius:50%">'+d[i].name+'';
  246. if(d[i].ranking)str+='<font color=gray>('+d[i].ranking+')</font>';
  247. str+='</label>&nbsp;&nbsp;';
  248. }
  249. $('#zhuandivkefu').html(str);
  250. js.resizetan('confirm');
  251. }
  252. },
  253. savezhuan:function(slx){
  254. if(changkfid==0)return;
  255. js.loading('处理中...');
  256. reim.ajax(reim.getapiurl('rockkefu','savekefu'),{sid:this.nowsid,tid:changkfid,slx:slx},function(ret){
  257. js.msgok(ret.data);
  258. },'get',function(err){
  259. js.msgerror(err.msg);
  260. });
  261. }
  262. }
粤ICP备19079148号