vipimagetextmediapush.js 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511
  1. define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'template', 'custommain'], function ($, undefined, Backend, Table, Form, Template, Custommain) {
  2. var Controller = {
  3. index: function () {
  4. // 初始化表格参数配置
  5. Table.api.init({
  6. extend: {
  7. index_url: 'vipcustom/vipimagetextmediapush/index?status=' + Config.status,
  8. },
  9. searchFormVisible: true,
  10. search:false
  11. });
  12. var table = $("#table");
  13. // 初始化表格
  14. table.bootstrapTable({
  15. url: $.fn.bootstrapTable.defaults.extend.index_url,
  16. pk: 'id',
  17. sortName: 'id',
  18. clickToSelect:false,
  19. pageSize: 12, //每页的记录行数(*)
  20. pageList: [12, 36, 72, 120], //可供选择的每页的行数(*)
  21. columns: [Controller.api.showFilterColumns(table)],
  22. onLoadSuccess: function () { //加载成功时执行
  23. },
  24. onPostBody:function(){
  25. $('#table td').attr('rowspan', '1000');
  26. }
  27. });
  28. // 为表格绑定事件
  29. Table.api.bindevent(table);
  30. $(document).on('mouseover','#table td',function(){
  31. $('.wxb-card-list-scroll .anticon').tooltip();
  32. });
  33. //群发消息
  34. $(document).on('click','.btn-multi-ajax',function(){
  35. var multi_url = $(this).attr('data-href');
  36. $.get(multi_url,{},function(data){
  37. if(data.code){
  38. var msg = data.msg != '' ? data.msg : '操作成功';
  39. Toastr.success(msg);
  40. }else{
  41. var msg = data.msg != '' ? data.msg : '操作失败';
  42. Toastr.error(msg);
  43. }
  44. });
  45. });
  46. //删除
  47. $(document).on('click','.btn-del-ajax',function(){
  48. if(!Custommain.check_waiting_send_editable($(this).attr('data_send_time'))){
  49. Toastr.error("发送前10分钟不可操作");
  50. return;
  51. }
  52. var del_url = $(this).attr('data-href');
  53. layer.confirm("确定删除此项?", {icon: 3, title: "温馨提示", shadeClose: true}, function (index) {
  54. layer.close(index);
  55. $.get(del_url,{},function(data){
  56. if(data.code){
  57. var msg = data.msg != '' ? data.msg : '操作成功';
  58. Toastr.success(msg);
  59. table.bootstrapTable('refresh');
  60. }else{
  61. var msg = data.msg != '' ? data.msg : '操作失败';
  62. Toastr.error(msg);
  63. }
  64. });
  65. }, function(){
  66. layer.close();
  67. });
  68. });
  69. //编辑 待发送 消息
  70. $(document).on('click','.btn-editwaitmsg-ajax',function(){
  71. if(!Custommain.check_waiting_send_editable($(this).attr('data_send_time'))){
  72. Toastr.error("发送前10分钟不可操作");
  73. return;
  74. }
  75. Fast.api.open($(this).attr('data-href'), '编辑', {});
  76. });
  77. // 打开详情页面
  78. $(document).on('click', '.btn-view-ajax', function () {
  79. Fast.api.open($(this).attr('data-href'), '查看详情', {});
  80. });
  81. },
  82. //待发图文客服消息
  83. editwaitingimgmsg:function(){
  84. //发送 订阅号/服务号 验证
  85. $("#add-form").data("validator-options", {
  86. ignore: ':hidden',
  87. beforeSubmit: function (form) {
  88. var user_json = $.parseJSON($('.img_txt_hidde_input_no').val())
  89. if (user_json.all==0 && !user_json.subscribe_time) {
  90. var sub_from = (new Moment($('input[name="row[sub_from]"]').val())).valueOf() / 1000
  91. var sub_to = (new Moment($('input[name="row[sub_to]"]').val())).valueOf() / 1000
  92. if(!sub_from && !sub_to){
  93. Toastr.error("起止时间不能为空");
  94. return false;
  95. }else{
  96. user_json.subscribe_range = sub_from +'-'+ sub_to;
  97. }
  98. }
  99. $('.img_txt_hidde_input_no').val(JSON.stringify(user_json));
  100. var senddyhradioval = $('#dyhradio input').val();
  101. if ($(":checkbox[name^='row[sub_id]']", $("#add-form")).length) {
  102. if (!$('#c-name').val()) {
  103. Toastr.error("请选择需要发送的服务号");
  104. return false;
  105. }
  106. var other_tips = $(":checked[name^='row[sub_id]']", $("#add-form"));
  107. if (other_tips.length <= 0) {
  108. Toastr.error("请选择需要发送的订阅号");
  109. return false;
  110. }
  111. if (senddyhradioval < other_tips.length) {
  112. Toastr.error("最多可选择发送" + senddyhradioval + '个订阅号');
  113. return false;
  114. }
  115. }
  116. if (!$('.js_selected_group_id').val()) {
  117. if ($(":checkbox[name^='row[service_id]']", $("#add-form")).length) {
  118. var other_tips = $(":checked[name^='row[service_id]']", $("#add-form"));
  119. if (other_tips.length <= 0) {
  120. Toastr.error("请选择需要发送的服务号");
  121. return false;
  122. }
  123. if (senddyhradioval < other_tips.length) {
  124. Toastr.error("最多可选择发送" + senddyhradioval + '个服务号');
  125. return false;
  126. }
  127. }
  128. }
  129. //发送时间必须大于当前时间
  130. var sdatatime=$('#c-sendtime').val()+'';
  131. sdatatime = sdatatime.replace(/-/g,'/');
  132. sdatatime =new Date(sdatatime).getTime();
  133. if(sdatatime <= new Date().getTime()){
  134. Toastr.error("发送时间必须大于当前时间");
  135. return false;
  136. }
  137. }
  138. });
  139. Controller.api.bindevent();
  140. },
  141. //查看详情
  142. viewdetail: function () {
  143. // 初始化表格参数配置
  144. Table.api.init({
  145. extend: {
  146. getimage_url: window.location.href,
  147. },
  148. search: false,
  149. showToggle: false,
  150. showColumns: false,
  151. showExport: false,
  152. commonSearch: false
  153. });
  154. var table = $("#table");
  155. //当表格数据加载完成时
  156. table.on('load-success.bs.table', function (e, data) {
  157. //这里可以获取从服务端获取的JSON数据
  158. //console.log(data);
  159. //这里我们手动设置底部的值
  160. //$("#money").text(data.extend.money);
  161. //$("#price").text(data.extend.price);
  162. });
  163. // 初始化表格
  164. table.bootstrapTable({
  165. url: $.fn.bootstrapTable.defaults.extend.getimage_url,
  166. pk: 'id',
  167. sortName: 'id',
  168. columns: [Controller.api.getimagelist(table)]
  169. });
  170. // 为表格绑定事件
  171. Table.api.bindevent(table);
  172. $(document).on('click', '.btn-close', function () {
  173. Fast.api.close();
  174. });
  175. },
  176. api: {
  177. showFilterColumns:function(table){
  178. var cols = new Array();
  179. /*cols.push({field: 'sendtime', title:"发送时间",operate:'RANGE', addclass:'datetimerange', visible:false});
  180. cols.push({field: 'official_account_type', title:"群发类型",searchList: {"0":__('服务号'),"1":__('订阅号')}, visible:false});
  181. cols.push({field: 'wechat_name', title:"公众号名称", visible:false});*/
  182. cols.push({field: 'id', title: "推广ID", formatter: Controller.api.formatter.showStyle});
  183. cols.push({field: "message_json$[*].book_name", title:"书籍名称", visible:false,operate:'LIKE %...%'});
  184. return cols;
  185. },
  186. bindevent: function () {
  187. Custommain.checkbox_relation('#dyhradio', '#dyhcheck');
  188. //群发测试
  189. $('.test_fans_but').click(function(){
  190. Custommain.fans_send_message();
  191. })
  192. Form.api.bindevent($("form[role=form]"));
  193. //修改发送消息时间
  194. $(document).on('click','.s_time_box span',function(){
  195. var $this = $(this);
  196. var nval = parseInt($this.attr('stime'));
  197. var ntime = Date.parse(new Date());
  198. var nt = ntime + nval;
  199. $('#c-sendtime').val(GetRTime(nt));
  200. });
  201. function GetRTime(time){
  202. var stime;
  203. time = new Date(time);
  204. var year = time.getYear() + 1900;
  205. var month = time.getMonth()+1;
  206. var day = time.getDate();
  207. var hours = time.getHours();
  208. var minutes = time.getMinutes();
  209. var seconds = time.getSeconds();
  210. stime = year + '-' +
  211. (month < 10 ? '0'+month : month) + '-' +
  212. (day < 10 ? '0'+day : day) + ' ' +
  213. (hours < 10 ? '0'+hours : hours) + ':' +
  214. (minutes < 10 ? '0'+minutes : minutes) + ':' +
  215. (seconds < 10 ? '0'+seconds : seconds);
  216. return stime;
  217. }
  218. /**
  219. * 资源类型管理
  220. */
  221. $(document).on('click', "input[name='row[type]']", function () {
  222. var type = $(this).val();
  223. if (type == 'all') {
  224. var tagObj = {
  225. all: "1"
  226. }
  227. } else {
  228. var tagObj = {
  229. sex: -1,
  230. mobile_system: 0,
  231. tag: -1,
  232. consume: -1,
  233. kandian: -1,
  234. subscribe_time: -1,
  235. all: "0"
  236. }
  237. }
  238. var ucon = JSON.stringify(tagObj);
  239. $('#usercondition').val(ucon);
  240. $('.group-tag-type').addClass('hide');
  241. $('.group-tag-type input').attr('disabled');
  242. $('#group-tag-type-' + type).removeClass('hide');
  243. $('#group-tag-type-' + type + ' input').removeAttr('disabled');
  244. });
  245. if ($('#usercondition').val() && $('#usercondition').val().length > 0) {
  246. $tagval = JSON.parse($('#usercondition').val());
  247. if ($tagval.all == 1) { //选择所有用户
  248. $('#type-all').attr('checked', true);
  249. var type = 'all';
  250. $('.group-tag-type').addClass('hide');
  251. $('.group-tag-type input').attr('disabled');
  252. $('#group-tag-type-' + type).removeClass('hide');
  253. $('#group-tag-type-' + type + ' input').removeAttr('disabled');
  254. }
  255. }
  256. $.ajax({
  257. type: 'get',
  258. url: '/admin/custom/ajaxcategory',
  259. cache: false,
  260. async: false,
  261. success: function (res) {
  262. data = res.data;
  263. var htmlstr = '';
  264. for (var i = 0; i < data.length; i++) {
  265. htmlstr += '<span data-cid="' + data[i].id + '" >' + data[i].name + '</span>';
  266. }
  267. $('#ctag').append(htmlstr);
  268. $('#mustbe').html('约' + res.ids + '人');
  269. if ($('#usercondition').val() && $('#usercondition').val().length > 0) {
  270. $tagval = JSON.parse($('#usercondition').val());
  271. $("#sex span[data-sex='" + $tagval.sex + "']").addClass('s_s_tag').siblings().removeClass('s_s_tag');
  272. $("#mobile_system span[data-mobile_system='" + $tagval.mobile_system + "']").addClass('s_s_tag').siblings().removeClass('s_s_tag');
  273. $("#ctag span[data-cid='" + $tagval.tag + "']").addClass('s_s_tag').siblings().removeClass('s_s_tag');
  274. $("#consume span[data-fee='" + $tagval.consume + "']").addClass('s_s_tag').siblings().removeClass('s_s_tag');
  275. $("#kandian span[data-kandian='" + $tagval.kandian + "']").addClass('s_s_tag').siblings().removeClass('s_s_tag');
  276. // $("#subTime span[data-week='" + $tagval.subscribe_time + "']").addClass('s_s_tag').siblings().removeClass('s_s_tag');
  277. // if ($tagval.subscribe_range) {
  278. // var t_l = $tagval.subscribe_range.split('-');
  279. // $('input[name="row[sub_from]"]').val(Moment(parseInt(t_l[0]) * 1000).format("YYYY-MM-DD HH:mm:ss"));
  280. // $('input[name="row[sub_to]"]').val(Moment(parseInt(t_l[1]) * 1000).format("YYYY-MM-DD HH:mm:ss"));
  281. // }
  282. if ($tagval.subscribe_time) {
  283. $("#subscribe_time1 span[data-fee='" + $tagval.subscribe_time + "']").addClass('s_s_tag').siblings().removeClass('s_s_tag');
  284. $('#subscribe_time2').hide();
  285. } else {
  286. $("#subscribe_time1 span").last().addClass('s_s_tag').siblings().removeClass('s_s_tag');
  287. }
  288. } else {
  289. var tagObj1 = {
  290. sex: -1,
  291. mobile_system: 0,
  292. tag: -1,
  293. consume: -1,
  294. kandian: -1,
  295. subscribe_time: -1,
  296. all: "0"
  297. };
  298. var ucon1 = JSON.stringify(tagObj1);
  299. $('#usercondition').val(ucon1);
  300. }
  301. },
  302. error: function (err) {
  303. }
  304. });
  305. $(document).on('click', '.s_tag_li_list span', function () {
  306. var $this = $(this);
  307. $this.addClass('s_s_tag').siblings('span').removeClass('s_s_tag');
  308. var tagObj = {
  309. sex: $('#sex span.s_s_tag').data('sex'),
  310. mobile_system: $('#mobile_system span.s_s_tag').data('mobile_system'),
  311. tag: $('#ctag span.s_s_tag').data('cid'),
  312. consume: $('#consume span.s_s_tag').data('fee'),
  313. kandian: $('#kandian span.s_s_tag').data('kandian'),
  314. subscribe_time: $('#subscribe_time1 span.s_s_tag').data('fee'),
  315. all: "0"
  316. }
  317. if ($(this).parent().attr('id') == 'subscribe_time1') {
  318. if ($(this).data('fee')) {
  319. $('#cdstarttime').val('');
  320. $('#cdendtime').val('');
  321. $('#subscribe_time2').hide();
  322. } else {
  323. $('#subscribe_time2').show();
  324. }
  325. }
  326. var uconditon = JSON.stringify(tagObj);
  327. $('#usercondition').val(uconditon);
  328. });
  329. var ofansopen = true;
  330. //tag切换
  331. $(document).on('click', '.s_tag_fans_num', function () {
  332. var $this = $(this);
  333. //防止重复点击
  334. if (!ofansopen) {
  335. return false;
  336. }
  337. ofansopen = false;
  338. $('.s_tag_footer').addClass('s_tag_fans_show');
  339. var tagObj = {
  340. sex: $('#sex span.s_s_tag').data('sex'),
  341. mobile_system: $('#mobile_system span.s_s_tag').data('mobile_system'),
  342. tag: $('#ctag span.s_s_tag').data('cid'),
  343. consume: $('#consume span.s_s_tag').data('fee'),
  344. kandian: $('#kandian span.s_s_tag').data('kandian'),
  345. subscribe_time: $('#subscribe_time1 span.s_s_tag').data('fee'),
  346. all: "0"
  347. }
  348. var uconditon = JSON.stringify(tagObj);
  349. $('#usercondition').val(uconditon);
  350. //console.log(tagObj);
  351. $.ajax({
  352. type: 'post',
  353. data: tagObj,
  354. //dataType:'json',
  355. url: '/admin/custom/ajaxcustom',
  356. success: function (data) {
  357. //console.log(data);
  358. $('#mustbe').html('约' + data.ids + '人');
  359. ofansopen = true;
  360. $('.s_tag_footer').removeClass('s_tag_fans_show');
  361. },
  362. error: function (err) {
  363. ofansopen = true;
  364. $('.s_tag_footer').removeClass('s_tag_fans_show');
  365. }
  366. });
  367. });
  368. },
  369. formatter:{
  370. showImage: function (value, row, index) {
  371. return '<img style="height:100px;" src="' + value + '"/>';
  372. },
  373. showType: function (value, row, index) {
  374. var type_arr = ['书籍', '活动', '继续阅读', '菜单'];
  375. return type_arr[value];
  376. },
  377. showPosition: function (value, row, index) {
  378. return index + 1;
  379. },
  380. showPushType: function (value, row, index) {
  381. var push_arr = ['外推', '内推'];
  382. return push_arr[value];
  383. },
  384. showStyle:function(value, row, index){
  385. var message_data = JSON.parse(row.message_json).shift();
  386. /*jshint multistr: true */
  387. var html = '<div class="wxb-card-list-scroll"><div class="wxb-card-item"><div class="wxb-card-item-inner"><div class="item-header"><div>';
  388. html += '<div class="tweets-card-title"><p>推广id:' + row.id + '</p></div>';
  389. html += '<div class="tweets-card-title"><p>创建时间:'+Table.api.formatter.datetime(row.createtime,row,index)+'</p></div>';
  390. html += '<div class="tweets-card-title"><p>修改时间:'+Table.api.formatter.datetime(row.updatetime,row,index)+'</p></div>';
  391. var offical_type = parseInt(row.official_account_type) == 1 ? '订阅号' : '服务号';
  392. var send_color = '';
  393. var send_text = '';
  394. switch (parseInt(row.status)) {
  395. case 0:
  396. send_color = 'red';
  397. send_text = '待发送';
  398. break;
  399. case 1:
  400. send_color = '#FF9900';
  401. send_text = '群发中';
  402. break;
  403. case 2:
  404. send_color = '#88d743';
  405. send_text = '已群发';
  406. break;
  407. }
  408. html += '<div class="tweets-card-title"><p style="color:' + send_color + '">发送时间:' + Table.api.formatter.datetime(row.sendtime, row, index) + ' ' + send_text + '</p></div>';
  409. html += '<div class="tweets-card-title"><p>群发类型:' + offical_type + '</p></div>';
  410. html += '</div></div><ul class="article-list"><li> <a class="article-item">';
  411. html += '<div class="novel-img article-item-cover" style="background-image: url('+message_data.image+');"></div>';
  412. html += '<p class="article-item-title">'+message_data.title+'</p>';
  413. html +='</a>';
  414. html += '</li></ul><ul class="footer-btns">';
  415. if (parseInt(Config.status) == 0) {
  416. if(Custommain.check_waiting_send_editable(row.sendtime)){
  417. html += '<li><a class="btn-del-ajax" data_send_time="'+row.sendtime+'" href="javascript:void(0);" data-href="/admin/vipcustom/vipimagetextmediapush/del?table=push&ids=' + row.id + '">删除</a></li>';
  418. html += '<li><a class="btn-editwaitmsg-ajax" data_send_time="'+row.sendtime+'" href="javascript:void(0);" data-href="/admin/vipcustom/vipimagetextmediapush/editwaitingimgmsg?table=push&ids=' + row.id + '">编辑</a></li>';
  419. }
  420. } else if (parseInt(Config.status) == 2) {
  421. html += '<li><a class="btn-view-ajax" href="javascript:void(0);" data-href="/admin/vipcustom/vipimagetextmediapush/viewdetail?ids=' + row.id + '">查看详情</a></li>';
  422. //html += '<li><a href="/admin/vipcustomurl/index?push_id=' + row.id +'">查看数据分析</a></li>';
  423. }
  424. html += '</ul></div></div></div>';
  425. return html;
  426. }
  427. },
  428. getimagelist: function (table) {
  429. var cols = [];
  430. cols.push({
  431. field: 'title',
  432. title: "标题",
  433. operate: false
  434. });
  435. cols.push({
  436. field: 'image',
  437. title: "图片",
  438. operate: false,
  439. formatter: Controller.api.formatter.showImage
  440. });
  441. cols.push({
  442. field: 'type',
  443. title: "链接类型",
  444. operate: false,
  445. formatter: Controller.api.formatter.showType
  446. });
  447. cols.push({
  448. field: 'book_id',
  449. title: "书籍id",
  450. operate: false,
  451. });
  452. cols.push({
  453. field: 'name',
  454. title: "书籍名称/活动名称/菜单名称",
  455. operate: false
  456. });
  457. return cols;
  458. }
  459. }
  460. };
  461. return Controller;
  462. });