123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611 |
- define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {
- var issent = 0;
- var Controller = {
- index: function () {
- // 初始化表格参数配置
- Table.api.init({
- extend: {
- index_url: 'templatemessage/index',
- add_url: 'templatemessage/add',
- edit_url: 'templatemessage/edit',
- del_url: 'templatemessage/del',
- multi_url: 'templatemessage/multi',
- table: 'templatemessage',
- }
- });
- var table = $("#table");
- // 初始化表格
- table.bootstrapTable({
- url: $.fn.bootstrapTable.defaults.extend.index_url,
- pk: 'id',
- sortName: 'id',
- search: false,
- commonSearch: false,
- columns: [
- [
- {checkbox: true},
- {field: 'id', title: __('Id')},
- {field: 'title', title: __('Title')},
- {field: 'tpname', title: __('Tpname')},
- {field: 'template_id', title: __('模板ID')},
- {field: 'sendtime', title: __('Sendtime'), operate:'RANGE', addclass:'datetimerange', formatter: Table.api.formatter.datetime},
- {field: 'statue', title: __('Statue'),visible:false,operate:false},
- {field: 'statue_text', title: __('Statue'), operate:false},
- {field: 'send_num', title: __('发送人数'), operate:false},
- // {field: 'success_num', title: '到达用户', operate:false},
- // {field: 'fail_num', title: '发送失败', operate:false},
- {field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate}
- ]
- ]
- });
- // 为表格绑定事件
- Table.api.bindevent(table);
- },
- add: function () {
- Controller.api.bindevent();
- $('.s_time_box span:eq(1)').click();
- },
- edit: function () {
- Controller.api.bindevent();
- },
- api: {
- getStatue: function (value, row, index) {
- if(value == 'normal'){
- if (row.sendtime < Date.parse(new Date())/1000){
- return '<span style="color:red">发送失败</span>';
- }else{
- return '未发送';
- }
- }else{
- return '<span style="color:green">已发送</span>';
- }
- },
- bindevent: function () {
- /**
- * form表单验证
- */
- $("form[role=form]").data("validator-options", {
- ignore: ':hidden',
- beforeSubmit: function (form) {
- if(issent != 1){
- Toastr.error("请先成功测试粉丝后再保存模板消息");
- return false;
- }
- var sdatatime=$('#c-sendtime').val()+'';
- sdatatime = sdatatime.replace(/-/g,'/');
- sdatatime =new Date(sdatatime).getTime();
- if(sdatatime <= new Date().getTime()){
- Toastr.error("发送时间必须大于当前时间");
- return false;
- }
- }
- });
- Form.api.bindevent($("form[role=form]"),
- function (data) {
- Fast.api.close(data);
- },
- function (data) {
- console.log('error', data);
- }
- );
- $(document).on('click','.s_tag_li_list span',function(){
- var $this = $(this);
- $this.addClass('s_s_tag').siblings('span').removeClass('s_s_tag');
- var tagObj ={
- sex:$('#sex span.s_s_tag').data('sex'),
- tag:$('#ctag span.s_s_tag').data('cid'),
- consume:$('#consume span.s_s_tag').data('fee'),
- kandian: $('#kandian span.s_s_tag').data('kandian'),
- subscribe_time:$('#subTime span.s_s_tag').data('week'),
- all:"0"
- }
- var uconditon = JSON.stringify(tagObj);
- $('#usercondition').val(uconditon);
- });
- var ofansopen=true;
- //tag切换
- $(document).on('click','.s_tag_fans_num',function(){
- var $this = $(this);
- //防止重复点击
- if(!ofansopen){
- return false;
- }
- ofansopen = false;
- $('.s_tag_footer').addClass('s_tag_fans_show');
- var tagObj ={
- sex:$('#sex span.s_s_tag').data('sex'),
- tag:$('#ctag span.s_s_tag').data('cid'),
- consume:$('#consume span.s_s_tag').data('fee'),
- kandian: $('#kandian span.s_s_tag').data('kandian'),
- subscribe_time:$('#subTime span.s_s_tag').data('week'),
- all:"0"
- }
- var uconditon = JSON.stringify(tagObj);
- $('#usercondition').val(uconditon);
- //console.log(tagObj);
- $.ajax({
- type:'post',
- data:tagObj,
- //dataType:'json',
- url:'/admin/custom/ajaxcustom',
- success:function(data){
- //console.log(data);
- $('#mustbe').html('约'+data.ids+'人');
- ofansopen = true;
- $('.s_tag_footer').removeClass('s_tag_fans_show');
- },
- error:function(err){
- ofansopen = true;
- $('.s_tag_footer').removeClass('s_tag_fans_show');
- }
- });
- });
- //获取模板json
- var ontmwjson = '';
- function fajaxtmp(str){
- if(!str){
- str = '';
- }
- var num = 0;
- var nowmsg = false;
- $.ajax({
- type:'get',
- //dataType:'json',
- url:'/admin/templatemessage/ajaxtmp' + str,
- success:function(data){
- //console.log(data);
- if(typeof data == 'string'){
- data = JSON.parse(data);
- }
- if(data.error == -1){
- $('.ntmw_head_select ul').html("");
- $('.ntmw_head_select strong').html("");
- layer.msg(data.msg);
- return false;
- }
- ontmwjson = data.data;
- //$('#select_ntmw').val(JSON.stringify(data.data));
- //模板列表
- if($('#select_msg_id').val().length>0){
- var sMsgId =$.trim($('#select_ntmw_id').val());
- for(var k=0; k<ontmwjson.length; k++){
- if(ontmwjson[k].id == sMsgId){
- num = k;
- break;
- }
- }
- var smsghtml = $('#select_ntmw').val();
- ontmwjson[num]['content'] = JSON.parse($.trim(smsghtml));
- nowmsg = true;
- }
- var $li = '';
- for(var i=0; i<ontmwjson.length; i++){
- $li += '<li>' + ontmwjson[i].title+' -- '+ ontmwjson[i].template_id + '</li>';
- }
- $('.ntmw_head_select ul').html($li);
- $('.ntmw_head_select ul li:eq('+ num +')').addClass('hover');
- //插入html数据
- selectTemplate(num,nowmsg);
- if(str == '?w=1'){
- Toastr.success('刷新模板列表成功');
- }
- },
- error:function(err){
- }
- });
- }
- fajaxtmp();
- //刷新模板列表
- $('.ntmw_but').click(function(){
- fajaxtmp('?w=1');
- });
- //选择模板
- function selectTemplate(num,bul){
- var oContent = ontmwjson[num]['content'];
- var sLi='';
- $('.ntmw_head_select strong,.ntmw_main_box h3').text(ontmwjson[num].title+' -- '+ontmwjson[num].template_id);
- $('#select_ntmw_id').val(ontmwjson[num].id);
- $('#select_template_id').val(ontmwjson[num].template_id);
- $('#select_tpname').val(ontmwjson[num].title);
- $('#select_ntmw').val(JSON.stringify(oContent));
- //console.log(ontmwjson[num].id);
- //console.log(oContent);
- for(var i=0; i<oContent.length; i++){
- sLi += '<li>';
- for(var j=0; j<oContent[i].length; j++){
- if(oContent[i][j].color!=''){
- //console.log(oContent[i][j].color);
- //console.log(oContent[i][j].fieldname);
- if(!bul){
- oContent[i][j].fieldname = '';
- }
- sLi += '<i class="fa fa-edit ntmw_li_edit"></i><span style="color: '+ oContent[i][j].color +';">'+ oContent[i][j].fieldname +'</span>';
- }else{
- sLi += '<span style="color: #000000;">'+ oContent[i][j].fieldname +'</span>';
- }
- }
- sLi += '</li>';
- }
- $('.ntmw_main_box ul').html(sLi);
- }
- //初始化 标签
- $.ajax({
- type:'get',
- url:'/admin/custom/ajaxcategory',
- cache:false,
- async:false,
- success:function(res){
- data = res.data;
- var htmlstr = '';
- for(var i=0;i<data.length;i++){
- htmlstr+='<span data-cid="'+data[i].id+'" >'+data[i].name+'</span>';
- }
- $('#ctag').append(htmlstr);
- $('#mustbe').html('约'+res.ids+'人');
- if ($('#usercondition').val().length > 0){
- $tagval = JSON.parse($('#usercondition').val());
- $("#sex span[data-sex='"+$tagval.sex+"']").addClass('s_s_tag').siblings().removeClass('s_s_tag');
- $("#ctag span[data-cid='"+$tagval.tag+"']").addClass('s_s_tag').siblings().removeClass('s_s_tag');
- $("#consume span[data-fee='"+$tagval.consume+"']").addClass('s_s_tag').siblings().removeClass('s_s_tag');
- $("#kandian span[data-kandian='"+$tagval.kandian+"']").addClass('s_s_tag').siblings().removeClass('s_s_tag');
- $("#subTime span[data-week='"+$tagval.subscribe_time+"']").addClass('s_s_tag').siblings().removeClass('s_s_tag');
- }else{
- var tagObj1 ={
- sex:-1,
- tag:-1,
- consume:-1,
- kandian: -1,
- subscribe_time:-1,
- all:"0"
- };
- var ucon1 = JSON.stringify(tagObj1);
- $('#usercondition').val(ucon1);
- }
- },
- error:function(err){
- }
- });
- /**
- * 资源类型管理
- */
- $(document).on('click', "input[name='row[type]']", function () {
- var type = $(this).val();
- if (type=='all'){
- var tagObj = {
- all:"1"
- }
- }else{
- var tagObj ={
- sex:-1,
- tag:-1,
- consume:-1,
- kandian: -1,
- subscribe_time:-1,
- all:"0"
- }
- }
- var ucon = JSON.stringify(tagObj);
- $('#usercondition').val(ucon);
- $('.group-tag-type').addClass('hide');
- $('.group-tag-type input').attr('disabled');
- $('#group-tag-type-' + type).removeClass('hide');
- $('#group-tag-type-' + type+' input').removeAttr('disabled');
- });
- if ($('#usercondition').val().length > 0) {
- $tagval = JSON.parse($('#usercondition').val());
- if ($tagval.all == 1){ //选择所有用户
- $('#type-all').attr('checked',true);
- var type = 'all';
- $('.group-tag-type').addClass('hide');
- $('.group-tag-type input').attr('disabled');
- $('#group-tag-type-' + type).removeClass('hide');
- $('#group-tag-type-' + type+' input').removeAttr('disabled');
- }
- }
- //测试发送
- var flag = 0;
- $('.test_fans_but').click(function(){
- if(flag == 1){
- return false;
- }
- flag = 1;
- var $imgTxtMain = $('.img_txt_main');
- var reg = /^(http[s]?|ftp):\/\/[^\/\.]+?\..+\w/;
- //标题
- if($.trim($('#title').val()).length == 0){
- Toastr.error("标题不能为空");
- flag = 0;
- return false;
- }
- //微信模板内容
- if($.trim($('#select_ntmw').val()).length == 0){
- Toastr.error("未填写模板内容");
- flag = 0;
- return false;
- }
- //网址
- if($.trim($('#f_url').val()).length == 0){
- Toastr.error("跳转链接不能为空");
- flag = 0;
- return false;
- }
- if($.trim($('#userId').val()) == ''){
- Toastr.error("请填写测试粉丝ID");
- flag = 0;
- return false;
- }
- if($.trim($('#userId').val()) == ''){
- Toastr.error("请填写测试粉丝ID");
- flag = 0;
- return false;
- }
- var sentData = {
- title:$('#title').val(),
- admin_id:$('#admin_id').val(),
- user_id:$('#userId').val(),
- message_html:$('#select_ntmw').val(),
- url:$('#f_url').val(),
- template_id:$('#select_template_id').val(),
- tpid:$('#select_ntmw_id').val()
- };
- console.log(sentData);
- $.ajax({
- type:'post',
- url:'/admin/templatemessage/sent',
- data:sentData,
- dataType:'json',
- cache:false,
- async:false,
- success:function(data){
- console.log(data);
- flag = 0;
- if(data.errcode == 0){
- issent = 1;
- Toastr.success('已送达');
- }else{
- Toastr.error('错误码:'+data.errcode+'错误信息:'+data.errmsg);
- }
- },
- error:function(err){
- flag = 0;
- }
- })
- });
- //发送消息时间
- $(document).on('click','.s_time_box span',function(){
- var $this = $(this);
- var nval = parseInt($this.attr('stime'));
- var ntime = Date.parse(new Date());
- var nt = ntime + nval;
- $('#c-sendtime').val(GetRTime(nt));
- });
- function GetRTime(time){
- var stime;
- time = new Date(time);
- var year = time.getYear() + 1900;
- var month = time.getMonth()+1;
- var day = time.getDate();
- var hours = time.getHours();
- var minutes = time.getMinutes();
- var seconds = time.getSeconds();
- stime = year + '-' +
- (month < 10 ? '0'+month : month) + '-' +
- (day < 10 ? '0'+day : day) + ' ' +
- (hours < 10 ? '0'+hours : hours) + ':' +
- (minutes < 10 ? '0'+minutes : minutes) + ':' +
- (seconds < 10 ? '0'+seconds : seconds);
- return stime;
- }
- var ontmwspan = '';
- //选择模板
- $(document).on('click','.ntmw_li_edit',function(){
- var oThis=$(this);
- var oNextSpan = oThis.next('span');
- var sColor = oNextSpan.css('color');
- ontmwspan = oNextSpan;
- var shtml= '<div class="ntmw_pop_box">\
- <div class="ntmw_edit_textarea_box"><div class="ntmw_edit_textarea" contenteditable="true" style="color:#000000;">' + ontmwspan.html() + '</div></div>\
- <div class="ntmw_edit_color_box"><strong>字体颜色:</strong><span style="background-color:#000000"></span><span style="background-color:#ff0000"></span><span style="background-color:#ff9400"></span><span style="background-color:#0099ff"></span><span style="background-color:#ff3399"></span><span style="background-color:#999999"></span></div>\
- <div class="ntmw_edit_word_box"><span>占位符<i class="fa fa-question-circle" title="使用说明"></i>:</span><strong contenteditable="false" data-key="$user_nickname">用户昵称</strong><strong contenteditable="false" data-key="$user_id">用户id</strong><strong contenteditable="false" data-key="$user_vip_endtime">用户vip到期时间</strong><strong contenteditable="false" data-key="$wx_nickname">微信公众号名称</strong></div>\
- </div>';
- layer.open({
- type: 1,
- title:'',
- skin: 'layui-layer-rim', //加上边框
- btn: ['保存'],
- content: shtml,
- yes: function(index, layero){
- var $nuldiv = $('<div></div>');
- var sHtmlReg=/<[^<>]+>/g;
- var sNtmwEditTextarea =$('.ntmw_edit_textarea').html();
- $nuldiv.append(sNtmwEditTextarea);
- $nuldiv.find('strong[contenteditable="false"]').remove();
- sNtmwEditTextarea =$nuldiv.html();
- if(sHtmlReg.test(sNtmwEditTextarea)){
- Toastr.error("您输入的内容包含特殊字符,请重新输入");
- return false;
- }
-
-
-
-
-
- layer.close(index);
- var sTextareaColor = $('.ntmw_edit_textarea').css('color');
- var sTextareaContent = $.trim($('.ntmw_edit_textarea').html());
- oNextSpan.css('color',sTextareaColor).html(sTextareaContent);
- var $li = $('.ntmw_main_box ul li');
- var sVal =JSON.parse($.trim($('#select_ntmw').val()));
- for(var i=0; i<$li.length; i++){
- var aLi = sVal[i];
- $lispan = $li.eq(i).find('span');
- for(var j=0; j<$lispan.length; j++){
- var $prev = $lispan.eq(j).prev();
- if($prev.is('i')){
- aLi[j].color = colorRGB2Hex($lispan.eq(j).css('color'));
- }
- aLi[j].fieldname = $lispan.eq(j).html();
- }
- }
- $('#select_ntmw').val(JSON.stringify(sVal));
- }
- });
- //默认字体颜色
- var $span = $('.ntmw_edit_color_box span');
- for(var i=0; i<$span.length; i++){
- var sNowSpanColor = $span.eq(i).css('backgroundColor');
- if(sColor == sNowSpanColor){
- $span.eq(i).addClass('active').siblings('span').removeClass('active');
- break;
- }
- if(sColor == $span.eq(0).css('backgroundColor')){
- $span.eq(0).addClass('active').siblings('span').removeClass('active');
- break;
- }
- }
- $('.ntmw_edit_textarea').css('color',sColor);
- $('.ntmw_edit_textarea').append('\r');
- $('.ntmw_edit_textarea').focus();
- keepLastIndex($('.ntmw_edit_textarea').get(0));
- });
- //rgb转换未16进制
- function colorRGB2Hex(color) {
- if(!/#/.test(color)){
- var rgb = color.split(',');
- var r = parseInt(rgb[0].split('(')[1]);
- var g = parseInt(rgb[1]);
- var b = parseInt(rgb[2].split(')')[0]);
- var hex = "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);
- return hex;
- }
- return color;
- }
- //修改字体颜色
- $(document).on('click','.ntmw_edit_color_box span',function(){
- var $this = $(this);
- var sColor = $this.css('backgroundColor');
- $this.addClass('active').siblings('span').removeClass('active');
- $('.ntmw_edit_textarea').css('color',sColor);
- });
- //添加占位符
- var lastEditRange;
- $(document).on('click','.ntmw_edit_word_box strong',function(){
- var $this = $(this);
- var sHtml = $this.prop("outerHTML");
- var sTATxt = $.trim($('.ntmw_edit_textarea').html()) + ' ' + sHtml + ' \r';
- var txtFocus = $('.ntmw_edit_textarea').get(0);
- var sTATxtLen = sTATxt.length - 1;
- $('.ntmw_edit_textarea').html(sTATxt);
- $this.blur();
- keepLastIndex(txtFocus);
- });
- //将光标放到最后面
- function keepLastIndex(obj) {
- if(window.getSelection) {//ie11 10 9 ff safari
- obj.focus(); //解决ff不获取焦点无法定位问题
- var range = window.getSelection();//创建range
- range.selectAllChildren(obj);//range 选择obj下所有子内容
- range.collapseToEnd();//光标移至最后
- }else if(document.selection) {//ie10 9 8 7 6 5
- var range = document.selection.createRange();//创建选择对象
- //var range = document.body.createTextRange();
- range.moveToElementText(obj);//range定位到obj
- range.collapse(false);//光标移至最后
- range.select();
- }
- }
- //选择模板下拉切换
- $(document).on('click','.ntmw_head_select li',function(){
- var $this=$(this);
- var sTxt = $this.text();
- var nIndex = $this.index();
- $this.addClass('hover').siblings('li').removeClass('hover');
- $('.ntmw_head_select strong').data('value',nIndex);
- $('.ntmw_head_select strong').text(sTxt);
- selectTemplate(nIndex);
- });
- $(document).on('click','.ntmw_edit_word_box i',function(){
- layer.open({
- type: 1,
- title:'',
- skin: 'layui-layer-rim', //加上边框
- btn: ['知道了'],
- content: '<div class="ntmw_question_box">\
- <div class="ntmw_question_li">模板:亲爱的<span>用户昵称</span>, 您的年费到期时间为<span>用户vip到期时间</span></div>\
- <div class="ntmw_question_li">效果:亲爱的宁静致远,您的年费到期时间为2018-12-29 17:28</span></div>\
- </div>',
- yes: function(index, layero){
- layer.close(index);
- }
- });
- })
- //修改url
- $(document).on('click','.img_txt_edit_url',function(){
- var $this=$(this);
- Fast.api.open('referral/referral/select?one=1', '选择', {
- callback: function (data) {
- var data = data[0];
- // console.log('展示title回调', data);
- $this.parent().siblings('input').val(data.source_url);
- }
- });
- });
- //修改book
- $(document).on('click','.img_txt_edit_book',function(){
- var $this=$(this);
- Fast.api.open('book.book/select?one=1', '选择', {
- callback: function (data) {
- var data = data[0];
- $this.parent().siblings('input').val(data.current_book_url);
- }
- });
- });
- }
- }
- };
- return Controller;
- });
|