appointment.js 12 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. define(['jquery', 'table', 'form'], function($, Table, Form) {
  2. function formatNotifyType(val) {
  3. var map = {
  4. 'appointment_submit': '提交自动通知',
  5. 'appointment_batch': '后台统一通知',
  6. 'appointment_resend': '后台补发'
  7. };
  8. return map[val] || val || '-';
  9. }
  10. var Controller = {
  11. index: function() {
  12. Table.init = { table_elem: '#currentTable', table_render_id: 'currentTable' };
  13. Table.render({
  14. init: Table.init,
  15. toolbar: ['refresh'],
  16. url: 'appointment/index',
  17. cols: [[
  18. {type:'checkbox', width:50},
  19. {field:'id', width:80, title:'ID', sort:true},
  20. {field:'activity_title', minWidth:220, title:'预约活动'},
  21. {field:'lang', width:90, title:'语言'},
  22. {field:'notify_channel', width:110, title:'通知渠道', templet:function(d){ return d.notify_channel === 'email' ? '<span class="layui-badge layui-bg-blue">邮件</span>' : '<span class="layui-badge layui-bg-green">短信</span>'; }},
  23. {field:'mobile', width:150, title:'手机号'},
  24. {field:'email', minWidth:180, title:'邮箱'},
  25. {field:'name', width:120, title:'姓名'},
  26. {field:'status', width:110, title:'预约状态', templet:function(d){ var map={0:'未处理',1:'已预约',2:'已通知',3:'已转化',9:'无效'}; return map[d.status] || d.status; }},
  27. {field:'appointment_auto_sms', width:110, title:'自动通知', templet:function(d){ var on=parseInt(d.appointment_auto_sms,10)===1; return on ? '<span class="layui-badge layui-bg-green">开启</span>' : '<span class="layui-badge layui-bg-gray">关闭</span>'; }},
  28. {field:'submit_sms_status', width:110, title:'提交通知', templet:function(d){ var val=parseInt(d.submit_sms_status,10); if(val===1)return '<span class="layui-badge layui-bg-green">成功</span>'; if(val===2)return '<span class="layui-badge">失败</span>'; return '<span class="layui-badge layui-bg-gray">未发送</span>'; }},
  29. {field:'submit_sms_time', width:170, title:'提交通知时间', templet:function(d){ return d.submit_sms_time ? Table.formatter.datetime.call(this, d.submit_sms_time) : '-'; }},
  30. {field:'batch_sms_status', width:110, title:'统一通知', templet:function(d){ var val=parseInt(d.batch_sms_status,10); if(val===1)return '<span class="layui-badge layui-bg-green">成功</span>'; if(val===2)return '<span class="layui-badge">失败</span>'; return '<span class="layui-badge layui-bg-gray">未发送</span>'; }},
  31. {field:'batch_sms_time', width:170, title:'统一通知时间', templet:function(d){ return d.batch_sms_time ? Table.formatter.datetime.call(this, d.batch_sms_time) : '-'; }},
  32. {field:'source_page', minWidth:180, title:'来源页面'},
  33. {field:'ip', width:140, title:'IP'},
  34. {field:'createtime', width:170, title:'提交时间', templet: Table.formatter.datetime},
  35. {field:'operate', title:'操作', width:120, fixed:'right', templet:function(d){ var val=parseInt(d.submit_sms_status,10); if(val===0||val===2){ var text=d.notify_channel==='email'?'补发邮件':'补发短信'; return '<a href="javascript:;" class="layui-btn layui-btn-xs" data-id="'+d.id+'" data-event="resend">'+text+'</a>'; } return ''; }}
  36. ]],
  37. page: {}
  38. });
  39. $('#searchBtn').on('click', function() {
  40. layui.table.reload('currentTable', { where: {
  41. activity_id: $('#activity_id').val(), mobile: $('#mobile').val(), email: $('#email').val(), lang: $('#lang').val(), notify_channel: $('#notify_channel').val(),
  42. status: $('#status').val(), appointment_auto_sms: $('#appointment_auto_sms').val(), submit_sms_status: $('#submit_sms_status').val(), batch_sms_status: $('#batch_sms_status').val(),
  43. createtime_start: $('#createtime_start').val(), createtime_end: $('#createtime_end').val()
  44. }, page: {curr: 1} });
  45. });
  46. $('#resetBtn').on('click', function() {
  47. $('#activity_id,#mobile,#email,#lang,#notify_channel,#status,#appointment_auto_sms,#submit_sms_status,#batch_sms_status,#createtime_start,#createtime_end').val('');
  48. layui.form.render('select'); layui.table.reload('currentTable', { where: {}, page: {curr: 1} });
  49. });
  50. $('#sendSmsBtn').on('click', function() { var rows=layui.table.checkStatus('currentTable').data||[]; if(!rows.length){layer.msg('请先勾选预约记录');return;} var ids=rows.map(function(i){return i.id;}); layer.confirm('确认对选中的 '+ids.length+' 条预约记录统一发送短信吗?<br>仅会处理“统一通知”为未发送或失败的短信记录,已成功发送的将自动跳过。',{icon:3,title:'提示'},function(index){ $.post('appointment/sendSms',{ids:ids},function(res){ layer.msg(res.msg || (res.code===1?'发送成功':'发送失败')); if(res.code===1) layui.table.reload('currentTable'); },'json').fail(function(){layer.msg('发送请求失败');}); layer.close(index); }); });
  51. $('#sendEmailBtn').on('click', function() { var rows=layui.table.checkStatus('currentTable').data||[]; if(!rows.length){layer.msg('请先勾选预约记录');return;} var ids=rows.map(function(i){return i.id;}); layer.confirm('确认对选中的 '+ids.length+' 条预约记录统一发送邮件吗?<br>仅会处理“统一通知”为未发送或失败的邮件记录,已成功发送的将自动跳过。',{icon:3,title:'提示'},function(index){ $.post('appointment/sendEmail',{ids:ids},function(res){ layer.msg(res.msg || (res.code===1?'发送成功':'发送失败')); if(res.code===1) layui.table.reload('currentTable'); },'json').fail(function(){layer.msg('发送请求失败');}); layer.close(index); }); });
  52. $('#deleteBtn').on('click', function() { var rows=layui.table.checkStatus('currentTable').data||[]; if(!rows.length){layer.msg('请先勾选预约记录');return;} var ids=rows.map(function(i){return i.id;}); layer.confirm('确认删除选中的 '+ids.length+' 条预约记录吗?<br>相关短信/邮件日志也会一并删除,此操作不可恢复。',{icon:3,title:'警告'},function(index){ $.post('appointment/del',{ids:ids},function(res){ layer.msg(res.msg || (res.code===1?'删除成功':'删除失败')); if(res.code===1) layui.table.reload('currentTable'); },'json').fail(function(){layer.msg('删除请求失败');}); layer.close(index); }); });
  53. $(document).on('click', '[data-event="resend"]', function() { var id=$(this).data('id'); var text=$(this).text(); layer.confirm('确认'+text+'吗?',{icon:3,title:'提示'},function(index){ $.post('appointment/resendSms',{id:id},function(res){ layer.msg(res.msg || (res.code===1?'补发成功':'补发失败')); if(res.code===1) layui.table.reload('currentTable'); },'json').fail(function(){layer.msg('补发请求失败');}); layer.close(index); }); });
  54. Table.api.bindevent(); Form.api.bindevent($('form.layui-form'));
  55. },
  56. smslog: function() {
  57. Table.init = { table_elem: '#currentTable', table_render_id: 'currentTable' };
  58. Table.render({ init: Table.init, toolbar: ['refresh'], url: 'appointment/smslog', cols: [[
  59. {type:'checkbox', width:50}, {field:'id', width:80, title:'ID', sort:true}, {field:'record_id', width:100, title:'预约ID'}, {field:'activity_id', width:100, title:'活动ID'}, {field:'mobile', width:150, title:'手机号'},
  60. {field:'sms_type', width:160, title:'短信类型', templet:function(d){ return formatNotifyType(d.sms_type); }}, {field:'template_code', width:160, title:'模板编号'}, {field:'content', minWidth:260, title:'短信内容'},
  61. {field:'status', width:100, title:'状态', templet:function(d){ var map={0:'待发送',1:'成功',2:'失败'}; return map[d.status] || d.status; }},
  62. {field:'response_code', width:130, title:'返回码'}, {field:'response_msg', minWidth:220, title:'返回信息'}, {field:'send_time', width:170, title:'发送时间', templet: Table.formatter.datetime}
  63. ]], page: {} });
  64. $('#searchBtn').on('click', function() { layui.table.reload('currentTable', { where: { mobile: $('#mobile').val(), record_id: $('#record_id').val(), activity_id: $('#activity_id').val(), sms_type: $('#sms_type').val(), status: $('#status').val(), send_time_start: $('#send_time_start').val(), send_time_end: $('#send_time_end').val() }, page: {curr: 1} }); });
  65. $('#resetBtn').on('click', function() { $('#mobile,#record_id,#activity_id,#sms_type,#status,#send_time_start,#send_time_end').val(''); layui.form.render('select'); layui.table.reload('currentTable', { where: {}, page: {curr: 1} }); });
  66. $('#deleteSmslogBtn').on('click', function() { var rows=layui.table.checkStatus('currentTable').data||[]; if(!rows.length){layer.msg('请先勾选短信日志');return;} var ids=rows.map(function(i){return i.id;}); layer.confirm('确认删除选中的 '+ids.length+' 条短信日志吗?此操作不可恢复。',{icon:3,title:'警告'},function(index){ $.post('appointment/delSmslog',{ids:ids},function(res){ layer.msg(res.msg || (res.code===1?'删除成功':'删除失败')); if(res.code===1) layui.table.reload('currentTable'); },'json').fail(function(){layer.msg('删除请求失败');}); layer.close(index); }); });
  67. Table.api.bindevent(); Form.api.bindevent($('form.layui-form'));
  68. },
  69. emaillog: function() {
  70. Table.init = { table_elem: '#currentTable', table_render_id: 'currentTable' };
  71. Table.render({ init: Table.init, toolbar: ['refresh'], url: 'appointment/emaillog', cols: [[
  72. {type:'checkbox', width:50}, {field:'id', width:80, title:'ID', sort:true}, {field:'record_id', width:100, title:'预约ID'}, {field:'activity_id', width:100, title:'活动ID'},
  73. {field:'email', minWidth:220, title:'邮箱'}, {field:'mail_type', width:180, title:'邮件类型', templet:function(d){ return formatNotifyType(d.mail_type); }}, {field:'subject', minWidth:220, title:'邮件主题'}, {field:'content', minWidth:320, title:'邮件内容'},
  74. {field:'status', width:100, title:'状态', templet:function(d){ var map={0:'待发送',1:'成功',2:'失败'}; return map[d.status] || d.status; }},
  75. {field:'response_code', width:130, title:'返回码'}, {field:'response_msg', minWidth:220, title:'返回信息'}, {field:'send_time', width:170, title:'发送时间', templet: Table.formatter.datetime}
  76. ]], page: {} });
  77. $('#searchBtn').on('click', function() { layui.table.reload('currentTable', { where: { email: $('#email').val(), record_id: $('#record_id').val(), activity_id: $('#activity_id').val(), mail_type: $('#mail_type').val(), status: $('#status').val(), send_time_start: $('#send_time_start').val(), send_time_end: $('#send_time_end').val() }, page: {curr: 1} }); });
  78. $('#resetBtn').on('click', function() { $('#email,#record_id,#activity_id,#mail_type,#status,#send_time_start,#send_time_end').val(''); layui.form.render('select'); layui.table.reload('currentTable', { where: {}, page: {curr: 1} }); });
  79. $('#deleteEmaillogBtn').on('click', function() { var rows=layui.table.checkStatus('currentTable').data||[]; if(!rows.length){layer.msg('请先勾选邮件日志');return;} var ids=rows.map(function(i){return i.id;}); layer.confirm('确认删除选中的 '+ids.length+' 条邮件日志吗?此操作不可恢复。',{icon:3,title:'警告'},function(index){ $.post('appointment/delEmaillog',{ids:ids},function(res){ layer.msg(res.msg || (res.code===1?'删除成功':'删除失败')); if(res.code===1) layui.table.reload('currentTable'); },'json').fail(function(){layer.msg('删除请求失败');}); layer.close(index); }); });
  80. Table.api.bindevent(); Form.api.bindevent($('form.layui-form'));
  81. }
  82. };
  83. return Controller;
  84. });