Nenhuma Descrição

outBoundPlan.js 15KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507
  1. /**
  2. * 外呼计划
  3. * */
  4. var TaskID; //计划的id
  5. var TaskState; //计划的状态
  6. $(function() {
  7. $('.tool_bars').authorizeButton();
  8. laydate.render({
  9. elem: '#sc_times',
  10. range: '~',
  11. theme: '#249fea',
  12. });
  13. initOutcryTable();
  14. //搜索
  15. $("#sc_btns").click(function() {
  16. initOutcryTable();
  17. $("#phoneLists").hide();
  18. });
  19. $('#outcryTable').on("click-row.bs.table", function(e, row, ele) {
  20. $('.success').removeClass('success'); //去除之前选中的行的,选中样式
  21. $(ele).addClass('success'); //添加当前选中的 success样式用于区别
  22. TaskID = row.id //计划ID
  23. TaskState = row.isstart; //计划状态
  24. $("#phoneLists").show();
  25. initPhoneTable();
  26. });
  27. refreshDatas(huayi.config.taskRealInfoTime); //刷新 数据
  28. });
  29. //外呼计划列表
  30. function initOutcryTable() {
  31. //先销毁表格
  32. $('#outcryTable').bootstrapTable('destroy');
  33. //初始化表格,动态从服务器加载数据
  34. $('#outcryTable').bootstrapTable({
  35. method: "get", //使用get请求到服务器获取数据
  36. url: huayi.config.callcenter_url + "callcenterapi/api/autocallouttask/getlistbypage", //获取数据的Servlet地址
  37. contentType: "application/x-www-form-urlencoded",
  38. striped: true, //表格显示条纹
  39. pagination: true, //启动分页
  40. pageSize: 10, //每页显示的记录数
  41. pageNumber: 1, //当前第几页
  42. pageList: [10, 20, 50, 100], //记录数可选列表
  43. search: false, //是否启用查询
  44. showColumns: false, //显示下拉框勾选要显示的列
  45. showRefresh: false, //显示刷新按钮
  46. sidePagination: "server", //表示服务端请求
  47. //设置为undefined可以获取pageNumber,pageSize,searchText,sortName,sortOrder
  48. //设置为limit可以获取limit, offset, search, sort, order
  49. queryParamsType: "undefined",
  50. queryParams: function queryParams(params) { //设置查询参数
  51. var param = {
  52. pageindex: params.pageNumber, //否 int 页码
  53. pagesize: params.pageSize, //否 int 条数
  54. key: $('#sc_keyWords').val(), // 否 string 任务名称,可模糊查询
  55. taskstate: $('#sc_taskState').val(), // 否 int 任务状态 (不传值时查询所有状态)
  56. stime: $('#sc_times').val() && $('#sc_times').val().split(' ~ ')[0], // 否 string 开始时间
  57. etime: $('#sc_times').val() && $('#sc_times').val().split(' ~ ')[1], // 否 string 结束时间
  58. };
  59. return param;
  60. },
  61. onLoadSuccess: function(res) { //加载成功时执行
  62. //layer.msg("加载成功");
  63. $('.tool_downs').authorizeOperateButton();
  64. $('#outcryTable').find('tbody tr:first').trigger('click');
  65. },
  66. onLoadError: function() { //加载失败时执行
  67. //layer.msg("加载数据失败", { time: 1500, icon: 2 });
  68. }
  69. });
  70. }
  71. //格式化编号
  72. function setCode(val, row, index) {
  73. return index + 1;
  74. }
  75. //格式化 计划状态
  76. function formatterState(val, row) {
  77. //0未启动,1已启动,2暂停,3处理完成,4撤销,5完成
  78. var stateClass = 'timeout_default';
  79. var stateTxt = '-';
  80. switch(val) {
  81. case 0:
  82. stateClass = 'timeout_wait';
  83. stateTxt = '未启动';
  84. break;
  85. case 1:
  86. stateClass = 'timeout_success';
  87. stateTxt = '已启动';
  88. break;
  89. case 2:
  90. stateClass = 'timeout_refuse';
  91. stateTxt = '暂停';
  92. break;
  93. case 3:
  94. stateClass = 'timeout_doned';
  95. stateTxt = '处理完成';
  96. break;
  97. case 4:
  98. stateClass = 'timeout_revoke';
  99. stateTxt = '撤销';
  100. break;
  101. case 5:
  102. stateClass = 'timeout_end';
  103. stateTxt = '完成';
  104. break;
  105. default:
  106. break;
  107. }
  108. return '<span class="' + stateClass + '">' + stateTxt + '</span>';
  109. }
  110. //格式化 上架状态
  111. function formatterIsonline(val, row) {
  112. //任务是否上线,1为上线
  113. var stateClass = 'timeout_default';
  114. var stateTxt = '-';
  115. switch(val) {
  116. case 0:
  117. stateClass = 'timeout_revoke';
  118. stateTxt = '已下架';
  119. break;
  120. case 1:
  121. stateClass = 'timeout_success';
  122. stateTxt = '已上架';
  123. break;
  124. default:
  125. break;
  126. }
  127. return '<span class="' + stateClass + '">' + stateTxt + '</span>';
  128. }
  129. //格式化 外呼计划操作
  130. function formatterOperateL(val, row) {
  131. var tplHtml = '';
  132. tplHtml += '<ul class="tool_downs">';
  133. //0未启动 编辑 上架下架 启动 停止 删除 清空号码
  134. //1已启动 编辑 暂停 停止
  135. //2暂停 编辑 启动 停止
  136. //3处理完成 重新执行
  137. //4撤销
  138. //5完成
  139. switch (row.isstart){
  140. case 0:
  141. if(row.isonline === 0) {
  142. tplHtml += '<li><a class="aBtn" authorize="yes" id="HY_upline_' + row.id + '" onclick="btn_upline(\'' + row.id + '\', 1, event)">上架</a><li>';
  143. } else {
  144. tplHtml += '<li><a class="aBtn" authorize="yes" id="HY_downline_' + row.id + '" onclick="btn_upline(\'' + row.id + '\', 0, event)">下架</a><li>';
  145. }
  146. tplHtml += '<li><a class="aBtn" authorize="yes" id="HY_edit_' + row.id + '" onclick="btn_edit(\'' + row.id + '\', \'' + row.isstart + '\', event)">编辑</a><li>';
  147. tplHtml += '<li><a class="aBtn" authorize="yes" id="HY_start_' + row.id + '" onclick="btn_oparate(\'' + row.id + '\', 1, event)">启动</a><li>';
  148. tplHtml += '<li><a class="aBtn" authorize="yes" id="HY_stop_' + row.id + '" onclick="btn_oparate(\'' + row.id + '\', 11, event)">停止</a><li>';
  149. tplHtml += '<li><a class="aBtn" authorize="yes" id="HY_deleteL_' + row.id + '" onclick="btn_deleteL(\'' + row.id + '\',event)">删除</a><li>'+
  150. '<li><a class="aBtn" authorize="yes" id="HY_empty_' + row.id + '" onclick="btn_empty(\'' + row.id + '\',event)">清空号码</a><li>';
  151. break;
  152. case 1:
  153. tplHtml += '<li><a class="aBtn" authorize="yes" id="HY_edit_' + row.id + '" onclick="btn_edit(\'' + row.id + '\', \'' + row.isstart + '\', event)">编辑</a><li>';
  154. tplHtml += '<li><a class="aBtn" authorize="yes" id="HY_pause_' + row.id + '" onclick="btn_oparate(\'' + row.id + '\', 10, event)">暂停</a><li>';
  155. tplHtml += '<li><a class="aBtn" authorize="yes" id="HY_stop_' + row.id + '" onclick="btn_oparate(\'' + row.id + '\', 11, event)">停止</a><li>';
  156. break;
  157. case 2:
  158. tplHtml += '<li><a class="aBtn" authorize="yes" id="HY_edit_' + row.id + '" onclick="btn_edit(\'' + row.id + '\', \'' + row.isstart + '\', event)">编辑</a><li>';
  159. tplHtml += '<li><a class="aBtn" authorize="yes" id="HY_start_' + row.id + '" onclick="btn_oparate(\'' + row.id + '\', 1, event)">启动</a><li>';
  160. tplHtml += '<li><a class="aBtn" authorize="yes" id="HY_stop_' + row.id + '" onclick="btn_oparate(\'' + row.id + '\', 11, event)">停止</a><li>';
  161. break;
  162. case 3:
  163. //处理完成
  164. if(row.secondflag === 0) {
  165. tplHtml += '<li><a class="aBtn" authorize="yes" id="HY_repeat_' + row.id + '" onclick="btn_repeat(\'' + row.id + '\',event)" title="点击重新执行未呼通号码">重新执行</a><li>';
  166. }
  167. break;
  168. default:
  169. break;
  170. }
  171. tplHtml +='</ul>';
  172. return tplHtml;
  173. }
  174. //添加 外呼计划
  175. function btn_add() {
  176. layer.open({
  177. maxmin: true, //开启最大化最小化按钮
  178. type: 2,
  179. content: "template/addOrEditPlan.html", //iframe的url,no代表不显示滚动条
  180. title: '添加外呼计划',
  181. area: ['60%', '90%'], //宽高
  182. });
  183. }
  184. //编辑 外呼计划
  185. function btn_edit(edit_id, isStart, event) {
  186. event.stopPropagation();
  187. layer.open({
  188. maxmin: true, //开启最大化最小化按钮
  189. type: 2,
  190. content: "template/addOrEditPlan.html?edit_id=" + edit_id + "&isStart=" + isStart, //iframe的url,no代表不显示滚动条
  191. title: '编辑外呼计划',
  192. area: ['60%', '90%'], //宽高
  193. });
  194. }
  195. //导入电话号码
  196. function btn_import() {
  197. if(!TaskID) {
  198. layer.confirm('请先选择一个外呼计划!', {
  199. icon: 7,
  200. btn: ['确定'] //按钮
  201. });
  202. return;
  203. }
  204. if(TaskState > 0){
  205. layer.confirm('该计划已经启动不能再导入号码!', {
  206. icon: 7,
  207. btn: ['确定'] //按钮
  208. });
  209. return;
  210. }
  211. layer.open({
  212. maxmin: true, //开启最大化最小化按钮
  213. type: 2,
  214. content: "template/importPhones.html?tid=" + TaskID, //iframe的url,no代表不显示滚动条
  215. title: '导入号码',
  216. area: ['50%', '80%'], //宽高
  217. });
  218. }
  219. //删除
  220. function btn_deleteL(delid,event) {
  221. event.stopPropagation();
  222. layer.confirm('您确定要删除当前外呼计划吗?', {
  223. icon: 7,
  224. btn: ['是', '否'] //按钮
  225. }, function() {
  226. /*发送请求*/
  227. $.ajax({
  228. type: "post",
  229. url: huayi.config.callcenter_url + "callcenterapi/api/autocallouttask/delete",
  230. dataType: 'json',
  231. data: {
  232. ids: delid, //是 string[] 任务标识id,可传数组或单条数据,例如:[“5aab859037c0a7745c6d5423”,”5aab859037c0a7745c6d5423”]
  233. },
  234. async: true,
  235. success: function(data) {
  236. layer.msg("删除成功");
  237. $('#outcryTable').bootstrapTable('refresh');
  238. $('#phoneTable').bootstrapTable('refresh');
  239. }
  240. });
  241. });
  242. }
  243. //外呼计划 清空号码
  244. function btn_empty(tid, event) {
  245. event.stopPropagation();
  246. layer.confirm('您确定要清空当前计划下的号码吗?', {
  247. icon: 7,
  248. btn: ['是', '否'] //按钮
  249. }, function() {
  250. $.ajax({
  251. type: "post",
  252. url: huayi.config.callcenter_url + "callcenterapi/api/autocallouttask/removeall",
  253. dataType: 'json',
  254. data: {
  255. id: tid, //是 string 任务id标识
  256. },
  257. async: true,
  258. success: function(data) {
  259. layer.msg("清空号码成功!");
  260. $('#outcryTable').bootstrapTable('refresh');
  261. $('#phoneTable').bootstrapTable('refresh');
  262. }
  263. });
  264. });
  265. }
  266. //启动(上架) //停止(下架)
  267. function btn_upline(tid, tnum, event) {
  268. event.stopPropagation();
  269. var ctitle = tnum === 1 ? '您确定要上架当前计划吗?' : '您确定要下架当前计划吗?';
  270. layer.confirm(ctitle, {
  271. icon: 7,
  272. btn: ['确定', '取消'] //按钮
  273. }, function() {
  274. $.ajax({
  275. type: "post",
  276. url: huayi.config.callcenter_url + "callcenterapi/api/autocallouttask/updateonline",
  277. dataType: 'json',
  278. data: {
  279. taskid: tid, //是 string 任务id
  280. state: tnum, //是 int 状态(传值0为下线,传1为上线)
  281. },
  282. async: true,
  283. success: function(data) {
  284. if(data.state == "success") {
  285. $('#outcryTable').bootstrapTable('refresh');
  286. var cmsg = tnum === 1 ? '当前计划上架成功' : '当前计划下架成功';
  287. layer.msg(cmsg);
  288. }
  289. }
  290. });
  291. });
  292. }
  293. //任务操作类型(1为启动,10为暂停,11为停止)
  294. function btn_oparate(tid, tnum, event) {
  295. event.stopPropagation();
  296. var ctitle = '';
  297. var cmsg = '';
  298. switch (tnum){
  299. case 1:
  300. ctitle = '请您确定已经导入外呼号码,否则启动后无法呼出号码!';
  301. cmsg = '当前计划启动成功!';
  302. break;
  303. case 10:
  304. ctitle = '您确定要暂停当前计划吗?';
  305. cmsg = '当前计划暂停成功!';
  306. break;
  307. case 11:
  308. ctitle = '您确定要停止当前计划吗?';
  309. cmsg = '当前计划停止成功!';
  310. break;
  311. default:
  312. break;
  313. }
  314. layer.confirm(ctitle, {
  315. icon: 7,
  316. btn: ['确定', '取消'] //按钮
  317. }, function() {
  318. $.ajax({
  319. type: "post",
  320. url: huayi.config.callcenter_url + "callcenterapi/api/autocall/precallope",
  321. dataType: 'json',
  322. data: {
  323. taskid: tid, //是 string 任务id
  324. type: tnum,//是 int 任务操作类型(1为启动,10为暂停,11为停止)
  325. },
  326. async: true,
  327. success: function(data) {
  328. if(data.state == "success") {
  329. $('#outcryTable').bootstrapTable('refresh');
  330. layer.msg(cmsg);
  331. }
  332. }
  333. });
  334. });
  335. }
  336. //外呼计划 未呼通号码重新执行
  337. function btn_repeat(tid, event) {
  338. event.stopPropagation();
  339. layer.confirm('您确定要重新执行当前计划下未呼通的号码吗?', {
  340. icon: 7,
  341. btn: ['是', '否'] //按钮
  342. }, function() {
  343. $.ajax({
  344. type: "post",
  345. url: huayi.config.callcenter_url + "callcenterapi/api/autocall/restart",
  346. dataType: 'json',
  347. data: {
  348. taskid: tid, //是 string 任务id
  349. },
  350. async: true,
  351. success: function(data) {
  352. layer.msg("未呼通号码重新执行成功!");
  353. $('#outcryTable').bootstrapTable('refresh');
  354. $('#phoneTable').bootstrapTable('refresh');
  355. }
  356. });
  357. });
  358. }
  359. //外呼号码列表
  360. function initPhoneTable(){
  361. //销毁表格
  362. $('#phoneTable').bootstrapTable('destroy');
  363. //初始化表格,动态从服务器加载数据
  364. $('#phoneTable').bootstrapTable({
  365. method: "get", //使用get请求到服务器获取数据
  366. url: huayi.config.callcenter_url + "callcenterapi/api/autocallouttask/gettellistbypage",
  367. contentType: "application/x-www-form-urlencoded",
  368. striped: true, //表格显示条纹
  369. pagination: true, //启动分页
  370. pageSize: 10, //每页显示的记录数
  371. pageNumber: 1, //当前第几页
  372. pageList: [10, 20, 50, 100], //记录数可选列表
  373. search: false, //是否启用查询
  374. showColumns: false, //显示下拉框勾选要显示的列
  375. showRefresh: false, //显示刷新按钮
  376. sidePagination: "server", //表示服务端请求
  377. //设置为undefined可以获取pageNumber,pageSize,searchText,sortName,sortOrder
  378. //设置为limit可以获取limit, offset, search, sort, order
  379. queryParamsType: "undefined",
  380. queryParams: function queryParams(params) { //设置查询参数
  381. var param = {
  382. pageindex: params.pageNumber,//否 int 页码
  383. pagesize: params.pageSize,//否 int 条数
  384. taskid: TaskID,//否 string 任务id
  385. };
  386. return param;
  387. },
  388. onLoadSuccess: function() { //加载成功时执行
  389. //layer.msg("加载成功");
  390. //$('.tool_downs').authorizeOperateButton();
  391. },
  392. onLoadError: function() { //加载失败时执行
  393. //layer.msg("加载数据失败", { time: 1500, icon: 2 });
  394. }
  395. });
  396. }
  397. //格式化 外呼号码列表操作
  398. function formatterOperateR(val, row) {
  399. return '<ul class="tool_downs">'+
  400. '<li><a class="aBtn" authorize="yes" id="HY_deleteR_' + row.id + '" onclick="btn_deleteR(\'' + row.id + '\')">删除</a><li>' +
  401. '</ul>';
  402. }
  403. //批量删除外呼号码
  404. function btn_deleteRs(){
  405. var ids = $.map($('#phoneTable').bootstrapTable('getSelections'),
  406. function(row) {
  407. return row.id;
  408. });
  409. /*判断长度*/
  410. if(ids[0] === "phoneTable" || ids.length <= 0) {
  411. layer.confirm('没有可删除的选项?', {
  412. icon: 7,
  413. btn: ['确定'] //按钮
  414. });
  415. return;
  416. }
  417. btn_deleteR(ids);
  418. }
  419. //删除
  420. function btn_deleteR(delid) {
  421. if(TaskState > 0){
  422. layer.confirm('该计划已经启动不能再删除号码!', {
  423. icon: 7,
  424. btn: ['确定'] //按钮
  425. });
  426. return;
  427. }
  428. layer.confirm('您确定要删除当前外呼号码吗?', {
  429. icon: 7,
  430. btn: ['是', '否'] //按钮
  431. }, function() {
  432. /*发送请求*/
  433. $.ajax({
  434. type: "post",
  435. url: huayi.config.callcenter_url + "callcenterapi/api/autocallouttask/deletetel",
  436. dataType: 'json',
  437. data: {
  438. ids: delid, //是 string[] 任务标识id,可传数组或单条数据,例如:[“5aab859037c0a7745c6d5423”,”5aab859037c0a7745c6d5423”]
  439. },
  440. async: true,
  441. success: function(data) {
  442. layer.msg("删除成功");
  443. $('#phoneTable').bootstrapTable('refresh');
  444. }
  445. });
  446. });
  447. }
  448. /**
  449. * 刷新 数据
  450. * repairPlatformTime 刷新时间的间隔;
  451. *
  452. * */
  453. function refreshDatas(repairPlatformTime) {
  454. var objTime = {
  455. init: 0,
  456. time: function() {
  457. if(top.$("iframe:visible").contents().find('.layui-layer').length === 0) {
  458. objTime.init += 1000;
  459. //console.log(objTime.init);
  460. //当页面没有click、keydown、mousemove、mousewheel 并且没有layer 弹窗时;每间隔 huayi.config.repairPlatformTime 刷新数据;
  461. if(objTime.init == repairPlatformTime) {
  462. initOutcryTable();
  463. $("#phoneLists").hide();
  464. objTime.init = 0;
  465. }
  466. }
  467. },
  468. eventFun: function() {
  469. clearInterval(testUser);
  470. objTime.init = 0;
  471. testUser = setInterval(objTime.time, 1000);
  472. }
  473. }
  474. var testUser = setInterval(objTime.time, 1000);
  475. var body = document.querySelector('html');
  476. body.addEventListener("click", objTime.eventFun);
  477. body.addEventListener("keydown", objTime.eventFun);
  478. body.addEventListener("mousemove", objTime.eventFun);
  479. body.addEventListener("mousewheel", objTime.eventFun);
  480. }