/** * 坐席监控 * */ var groupLists = []; //坐席組数组 var postSeatsLists = []; //post的参数 var seatRealSateTimer = null; //定时器 var isTimerOn = false;//定时器是否开启 $(function() { getGroups().then(function() { getSeatLists(); //获取全部坐席 }); //tab切换 $('#tab_head_left li').click(function() { var tabIndex = $(this).attr('data-index'); $(this).addClass('tab_head_active').siblings().removeClass('tab_head_active'); $('#tab_contents .seat_lists_all').eq(tabIndex).addClass('show_lists').siblings().removeClass('show_lists'); }); //监测 $('#HY_monitor').on('click', function() { switch($(this).val()) { case "开始监测": // if(top.$('#navbarTopLinks').find('i.Login').hasClass('active')) { // layer.confirm('您还没有签入,请签入后再试...', { // icon: 7, // btn: ['确定'] //按钮 // }); // return; // } getSeatsRealStates(); $(this).val("停止监测"); if(seatRealSateTimer){ clearInterval(seatRealSateTimer); //停止刷新数据 } isTimerOn = true; refreshDatas(huayi.config.monitorPlatformTime); //开始刷新数据 break; case "停止监测": $(this).val("开始监测"); isTimerOn = false; clearInterval(seatRealSateTimer); //停止刷新数据 getSeatLists(); break; } }); }); //获取全部坐席 function getSeatLists() { var loadIndex; $.ajax({ type: "get", url: huayi.config.callcenter_url + "signtokenapi/api/useraccount/getseatlist", dataType: 'json', async: true, beforeSend: function() { //触发ajax请求开始时执行 loadIndex = layer.load(); }, success: function(data) { layer.close(loadIndex); if(data.state.toLowerCase() === "success") { data = data.data; $('#seat_lists').html(''); if(data && data.length > 0) { $.each(data, function(i, v) { postSeatsLists.push({ "group_id": v.group, // 坐席所在组ID // "agent_id": v.usercode - 0 // 坐席ID "agent_id": Number(v.usercode) // 坐席ID }); $('#seat_lists').append('
' + v.username + '
' + '工号:' + v.usercode + '
' + '分机号:未知
' + '坐席组:' + formatterGroups(groupLists, v.group) + '
' + '' + ''+ '' + '' + '
' + '没有找到您想要的记录呢!我会努力的...
'); } } }, error: function(textStatus) { layer.close(loadIndex); layer.confirm('网络繁忙,请稍后再试...', { icon: 7, closeBtn: 0, btn: ['确定'] //按钮 }); }, complete: function(XMLHttpRequest, textStatus) { layer.close(loadIndex); if(textStatus == 'timeout') { var xmlhttp = window.XMLHttpRequest ? new window.XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHttp"); xmlhttp.abort(); layer.confirm('网络超时,请稍后再试...', { icon: 7, closeBtn: 0, btn: ['确定'] //按钮 }); } }, }); } /** * 获取坐席组 */ function getGroups() { var dtd = $.Deferred(); //在函数内部,新建一个Deferred对象 $.getJSON(huayi.config.callcenter_url + "callcenterapi/api/sysseatgroup/getlist", function(data) { if(data.state.toLowerCase() == "success") { var content = data.data; if(content && content.length > 0) { $(content).each(function(i, n) { groupLists.push({ 'id': n.id, 'names': n.zxzname }) }); } dtd.resolve(); // 改变Deferred对象的执行状态 } }) return dtd.promise(); // 返回promise对象 } /** * 监测坐席状态 坐席实时状态 */ function getSeatsRealStates() { $.ajax({ type: "post", url: huayi.config.callcenter_url + "callcenterapi/api/autocall/postsend", async: true, // ContentType: 'application/json', // data: JSON.stringify(postSeatsLists), //也可以不带参数名传递 // dataType: 'json', data: { posturl: huayi.config.callcenter_acd_url + "v1/acd/AgentlMgr/state", //(请求的连接) postobj: JSON.stringify(postSeatsLists), //(json数据) }, success: function(data) { data = JSON.parse(data); if(data.state.toLowerCase() === "success") { data = data.data; if(data.state.toLowerCase() === "success") { data = data.data; if(data && data.length > 0) { var seat_lists_usercodes = $('#seat_lists').find('.seat_usercode'); if(seat_lists_usercodes.length > 0) { $.each(seat_lists_usercodes, function(i, v) { $.each(data, function(j, k) { if(Number($(v).text().substring(3)) === k.agent_id) { $(v).siblings().find('.seat_userextid').text(k.extid === 0 ? '未知' : k.extid); //根据 agent_state 获取坐席状态对应的 class var real_sate_class = formatterSeatState(k.agent_state).agentStateClass; $(v).parent().parent().parent().attr('class', 'col-sm-2 seat_item_content ' + real_sate_class); //根据 class 名获取 对应的图标 var seatIcon = formatterSeatStateClass(real_sate_class).agentStateIcon; $(v).parent().siblings('.seat_state').html(''); $(v).parent().parent().parent().attr('data-agent_state', k.agent_state); //坐席状态 $(v).parent().parent().parent().attr('data-ext_state', k.ext_state); //线路状态 //通话中,获取电话号码 if(k.agent_state === 3) { getSeatsCallStates(k.agent_id, k.extid, $(v)); } else { $(v).siblings('.seat_callee').html(''); } // console.log('被监听状态:.............' + k.mon_state); //被监听状态 if(k.mon_state === 1){ $('#seat_listen_'+ k.agent_id).text('被监听中•••'); }else{ $('#seat_listen_'+ k.agent_id).text(''); } } }); }); //计算 实时状态的数量 calculatCount(); updateTable2(data); //更新表格 } } } } }, error: function(textStatus) { layer.confirm('网络繁忙,请稍后再试...', { icon: 7, closeBtn: 0, btn: ['确定'] //按钮 }); }, complete: function(XMLHttpRequest, textStatus) { if(textStatus == 'timeout') { var xmlhttp = window.XMLHttpRequest ? new window.XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHttp"); xmlhttp.abort(); layer.confirm('网络超时,请稍后再试...', { icon: 7, closeBtn: 0, btn: ['确定'] //按钮 }); } }, }); } /** * 监测 坐席通话关联状态 * agent_id 坐席ID * ext_id 分机ID * el 坐席工号所在元素 */ function getSeatsCallStates(agent_id, ext_id, el) { var postCallJson = [{ "agent_id": agent_id, "ext_id": ext_id }]; $.ajax({ type: "post", url: huayi.config.callcenter_url + "callcenterapi/api/autocall/postsend", async: true, data: { posturl: huayi.config.callcenter_cti_url + "v1/cti/AgentlMgr/assoc/info", //(请求的连接) postobj: JSON.stringify(postCallJson), //(json数据) }, success: function(data) { data = JSON.parse(data); if(data.state.toLowerCase() === "success") { data = data.data; if(data.state.toLowerCase() === "success") { data = data.data; if(data && data.length > 0) { if(data[0].caller_flag === 1){//1-是主叫 if(data[0].callee){ el.siblings('.seat_callee').html('呼出:' + data[0].callee); //呼出 主叫 }else{ el.siblings('.seat_callee').html(''); } }else{ if(data[0].caller){ el.siblings('.seat_callee').html('呼入:' + data[0].caller); //呼入 被叫 }else{ el.siblings('.seat_callee').html(''); } } } } } }, error: function(textStatus) { layer.confirm('网络繁忙,请稍后再试...', { icon: 7, closeBtn: 0, btn: ['确定'] //按钮 }); }, complete: function(XMLHttpRequest, textStatus) { if(textStatus == 'timeout') { var xmlhttp = window.XMLHttpRequest ? new window.XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHttp"); xmlhttp.abort(); layer.confirm('网络超时,请稍后再试...', { icon: 7, closeBtn: 0, btn: ['确定'] //按钮 }); } }, }); } //操作坐席 function btn_opareteSeats(event) { event.stopPropagation(); if($('#HY_monitor').val() === '开始监测') { layer.confirm('您还没有开始监测,请点击开始监测后再操作!', { icon: 7, closeBtn: 0, btn: ['确定'] //按钮 }); return } if(top.$('#navbarTopLinks').find('i.Login').hasClass('active')) { layer.confirm('您还没有签入,请签入后再操作!', { icon: 7, btn: ['确定'] //按钮 }); return; } var $el = $(event.currentTarget);//当前被点击的元素 .seat_item var real_sate_class = $el.parent().attr('class').split(' ')[2];//元素的状态class名 var agent_state_title = formatterSeatStateClass(real_sate_class).agentStateTitle;//坐席状态对应的名称 var oparate_agent_state = $el.parent().attr('data-agent_state'); //坐席状态 var oparate_ext_state = $el.parent().attr('data-ext_state'); //线路状态 var head_img = $el.find('.img-circle').attr('src'); //头像 var seat_name = $el.find('.seat_name').text(); //姓名 var seat_usercode = $el.find('.seat_usercode').text().split(':')[1]; //工号 var call_number = $el.find('.seat_callee').text(); //呼出或呼入 if(seat_usercode === window.localStorage.getItem('userCode')){ layer.confirm('您不能在坐席监控中对自己进行操作!', { icon: 7, closeBtn: 0, btn: ['确定'] //按钮 }); return; } if($('#seat_usercode_'+ window.localStorage.getItem('userCode')).parent().parent().parent().hasClass('seat_calling')){ layer.confirm('您当前在通话中不能对坐席进行操作!', { icon: 7, btn: ['确定'] //按钮 }); return; } var layerTitle = '';//弹出窗口的 title if(call_number){ layerTitle = '当前状态: ' + agent_state_title + '(' + call_number + ')'; }else{ layerTitle = '当前状态: ' + agent_state_title; } //(小休/空闲)置闲 (通话中/通话中)监听强插强拆拦截 (空闲/来电振铃)代接 // console.log('坐席:'+ oparate_agent_state + ', 线路:' + oparate_ext_state); if((oparate_agent_state === '5' && oparate_ext_state === '1') || (oparate_agent_state === '3' && oparate_ext_state === '6') || (oparate_agent_state === '2' && oparate_ext_state === '5')) { layer.open({ type: 2, content: "template/opareteSeats.html?oparate_agent_state=" + oparate_agent_state + "&oparate_ext_state=" + oparate_ext_state + "&head_img=" + head_img + "&seat_name=" + seat_name + "&seat_usercode=" + seat_usercode, //iframe的url,no代表不显示滚动条 title: layerTitle, closeBtn: 1, area: ['496px', '340px'], //宽高 }); }else{ layer.confirm('当前坐席无需操作!', { title: layerTitle, icon: 7, closeBtn: 0, btn: ['确定'] //按钮 }); } } //计算 实时状态的数量 function calculatCount() { var seat_items = $('#seat_lists').find('.seat_item_content'); var totalCount = seat_items.length; //全部坐席数量 var offlineCount = 0; //离线数量 var freeCount = 0; //空闲数量 var callingCount = 0; //通话中数量 var afterCallCount = 0; //话后处理数量 var busyCount = 0; //置忙数量(小休) $.each(seat_items, function(i, v) { var seat_state_class = $(v).attr('class').substring(27); switch(seat_state_class) { case 'seat_busy': offlineCount++; break; case 'seat_free': freeCount++; break; case 'seat_calling': callingCount++; break; case 'seat_after_call': afterCallCount++; break; case 'seat_ringing': busyCount++; break; default: break; } }); var onlineCount = freeCount + callingCount + afterCallCount + busyCount; //在线数量 $('#seat_sts').find('.total_count').text(totalCount); $('#seat_sts').find('.online_count').text(onlineCount); $('#seat_sts').find('.outline_count').text(offlineCount); $('#seat_sts').find('.free_count').text(freeCount); $('#seat_sts').find('.in_call_count').text(callingCount); $('#seat_sts').find('.call_in_count').text(afterCallCount); $('#seat_sts').find('.busy_count').text(busyCount); } /** * 刷新 数据 * monitorPlatformTime 刷新间隔 * */ function refreshDatas(monitorPlatformTime) { var objTime = { init: 0, time: function() { if(top.$("iframe:visible").contents().find('.layui-layer').length === 0) { objTime.init += 1000; //console.log(objTime.init); //当页面没有click、keydown、mousewheel 并且没有layer 弹窗时;每间隔 monitorPlatformTime 刷新数据; if(objTime.init == monitorPlatformTime) { getSeatsRealStates(); objTime.init = 0; } } }, eventFun: function() { clearInterval(seatRealSateTimer); objTime.init = 0; if(isTimerOn){ seatRealSateTimer = setInterval(objTime.time, 1000); } } } seatRealSateTimer = setInterval(objTime.time, 1000); var body = document.querySelector('html'); body.addEventListener("click", objTime.eventFun); body.addEventListener("keydown", objTime.eventFun); body.addEventListener("mousewheel", objTime.eventFun); } /** * 更新列表1 (用于检测之前) * tData 数据 */ function updateTable1(tData) { $('#list').html(''); $.each(tData, function(i, v) { var tr = '