关于使用fastadmin的一些技巧

关于使用fastadmin的一些技巧
1.在对应js中使用后端的数据
     后端:$this->assignConfig('变量名','变量值');
     前端:Config.变量名

     例如:

$this->assignConfig('title','标题');
Config.title


 2.在原有的初始化表格基础上传自己想传的参数

     table.bootstrapTable({
         url: $.fn.bootstrapTable.defaults.extend.index_url,
         pk: 'id',
         sortName: 'id',
         search:false,
         showToggle: false,
         commonSearch: false,
         columns: [
             [
                 {field: 'name', title: __('Name')},
                 {field: 'image', title: __('Image'), events: Table.api.events.image, formatter: Table.api.formatter.images},
                 {field: 'address', title: __('Address')},
                 {field: 'room_num', title: __('Room_num')},
                 {field: 'createtime', title: __('Createtime'), operate:'RANGE', addclass:'datetimerange', formatter: Table.api.formatter.datetime},
                 {field: 'updatetime', title: __('Updatetime'), operate:'RANGE', addclass:'datetimerange', formatter: Table.api.formatter.datetime},
                 {field: 'telphone', title: __('Telphone')},
                 {
                     field: 'operate', 
                     title: __('Operate'), 
                     table: table, 
                     events: Table.api.events.operate, 
                     formatter: function (value, row, index) {
                         var that = $.extend({}, this);
                         var table = $(that.table).clone(true);
                         $(table).data("operate-del", null);
                         that.table = table;
                         return Table.api.formatter.operate.call(that, value, row, index);
                     }
                 }
             ]
         ],
         queryParams: function (params) {
             // 自定义搜索条件
             var filter = params.filter ? JSON.parse(params.filter) : {};
             var op = params.op ? JSON.parse(params.op) : {};
             //filter.后跟的是在ajax里使用的名称只需修改这两行
             filter.id = Config.hotel_id;
             //opop后跟的也是ajax里使用的名称,后面是条件
             op.id = '=';
             params.filter = JSON.stringify(filter);
             params.op = JSON.stringify(op);
             // console.log(params);
             return params;
         }
     });


     关键代码:
   

queryParams: function (params) {
         // 自定义搜索条件
         var filter = params.filter ? JSON.parse(params.filter) : {};
         var op = params.op ? JSON.parse(params.op) : {};
         //filter.后跟的是在ajax里使用的名称只需修改这两行
         filter.id = Config.hotel_id;
         //opop后跟的也是ajax里使用的名称,后面是条件
         op.id = '=';
         params.filter = JSON.stringify(filter);
         params.op = JSON.stringify(op);
         // console.log(params);
         return params;
     }

 3.添加或者修改后局部局部刷新表格而不刷新页面的做法
     

$('.btn-add').click(function(){
        // Fast.api.open('memorandum/memorandum/add');
        Backend.api.open('memorandum/memorandum/add', '添加备忘录',{
            callback:function(r){
                table.bootstrapTable('refresh');
            }
        });
    });

   

 //这样可以接收返回值
    Form.api.bindevent("form[role=form]", function(data, ret){
        //这里只要返回false,就会阻止我们的弹窗自动关闭和自动提示
        Fast.api.close(ret);//这里是重点
    },function(data,ret){

    });

4.关闭窗口并回传数据
 

Fast.api.close(data) 

5.选择一个选项后关闭弹窗并把数据回传给父级
弹窗里的js

{
    field: 'operate', 
    title: __('Operate'), 
    events: {
        'click .btn-chooseone': function (e, value, row, index) {
            var multiple = Backend.api.query('multiple');
            multiple = multiple == 'true' ? true : false;
            Fast.api.close({room_num: row.room_num,id:row.id ,multiple: false});
        },
    }, 
    formatter: function () {
        return '<a href="javascript:;" class="btn btn-danger btn-chooseone btn-xs"><i class="fa fa-check"></i> ' + __('Choose') + '</a>';
    }
}


父级里的js

$('.select').click(function(){
    obj=$(this);
    Fast.api.open(url,title,{callback: function (data) {
        obj.prev().html(data.room_num);
        obj.next().val(data.room_num);
    }});
});

6.去除操作栏中的删除

{
    field: 'operate', 
    title: __('Operate'), 
    table: table, 
    events: Table.api.events.operate,
    formatter: function (value, row, index) {
        var that = $.extend({}, this);
        var table = $(that.table).clone(true);
        $(table).data("operate-del", null);
        that.table = table;
        return Table.api.formatter.operate.call(that, value, row, index);
    }
}

7.默认编辑的弹窗100%

var table = $("#table");
$('.btn-editone').data('area',['100%','100%']);
table.on('load-success.bs.table', function (e, data) {
    $('.btn-editone').data('area',['100%','100%']);               
});

8.layer加载风格
  

 var index = layer.load(0, {shade: false}); //0代表加载的风格,支持0-2

     关闭
    

Layer.closeAll('loading');

9.打开一个新窗口(不是弹窗)
    

Backend.api.addtabs('order/order/edit?ids='+r.order_id,'订单详情');

10.tpl模版的使用
    注意js中define中增加template
    html中
  

 <script id='roomstatustpl' type="text/html">
        <div class="panel panel-primary" style="border-bottom: 0;border-left: 0;border-right: 0;">
            <div class="panel-heading room_num"><%=num%> 房间</div>
            <div class="panel-body">
                <% for(var i=0;i<statusList.length;i++){%>
                <%if(statusList[i].status == 1){%>
                <button class="btn btn-warning status" data-status='1' data-index="<%=id%>">退换房</button>
                <%}%>
                <%if(statusList[i].status == 2){%>
                <button class="btn btn-success status" data-status='2' data-index="<%=id%>">办理入住</button>
                <%}%>
                <%if(statusList[i].status == 4){%>
                <button class="btn btn-danger status" data-status='4' data-index="<%=id%>">保洁</button>
                <%}%>
                <%if(statusList[i].status == 5){%>
                <button class="btn btn-success status" data-status='5' data-index="<%=id%>">保洁完成</button>
                <%}%>
                <%}%>
            </div>
        </div>
    </script>


    js中
    

$(document).on('click','.room',function(){
        num=$(this).find('p').eq(0).html();
        id=$(this).data('index');
        status=$(this).data('status');
        statusList=[];
        console.log(status);
        switch(status){
            case '1':  //未入住
                statusList.push({'title':'办理入住','status':2});
                statusList.push({'title':'保洁','status':4});
            break;
            case '2': //已入住
                statusList.push({'title':'办理退房','status':1});
            break;
            case '4': //保洁
                statusList.push({'title':'保洁完成','status':5});
            break;
        }
        console.log(statusList);
        console.log(statusList.length);
        data={
            'num':num,
            'id':id,
            'statusList':statusList
        }
        Layer.open({
            type: 1,
            title: false,
            closeBtn: 0,
            shadeClose: true,
            skin: 'yourclass',
            content: Template('roomstatustpl',data),
        });
    })

11.监听回车键按下
  

 document.onkeydown = keyListener;
    function keyListener(e) {
        // 当按下回车键,执行我们的代码
        if (e.keyCode == 13) {
            //要执行的逻辑
        }
    }

12.datetimepicker自定义加载及使用(可以控制开始和结束时间的联动)

html代码

<form class="" role="form" method="get" action="{:url('index')}">
            <div class="select">
                <div>
                    选择日期
                </div>
                <div>
                    <input class="form-control datetimepicker" data-date-format="YYYY-MM-DD" data-date-max-date="{:date('Y-m-d')}"  name="row[begin]" id="begin" value="{$begin??date('Y-m-d')}" type="text" placeholder="开始日期">
                </div>
                <div>
                    至
                </div>
                <div>
                    <input class="form-control  datetimepicker" data-date-format="YYYY-MM-DD" data-date-max-date="{:date('Y-m-d')}" data-date-min-date="{:date('Y-m-d')}"  name="row[end]" type="text" id="end" value="{$end??date('Y-m-d')}" placeholder="结束日期">
                </div>
                <div>
                    <button type="button" class="btn btn-success btn-tongji">统计</button>
                </div>
                <div class="clear"></div>
            </div>
            <div class="clear"></div>

            <div style="height: 20px;"></div>
            <div class="row tongji">
                <div class="col-md-12">
                <span class="text-red">2019-12-10</span> 至 <span class="text-red">2019-12-30</span> 共成交 <span class="text-red">100</span> 单,营收 <span class="text-red">1000</span> 元 &nbsp;&nbsp;<a class="btn btn-primary baobiao" href="{:url('export')}">导出报表</a> 
                </div>
            </div>
        </form>

js代码:

define(['jquery', 'bootstrap', 'backend', 'table', 'form','bootstrap-datetimepicker'], function ($, undefined, Backend, Table, Form,Datetimepicker) {

    var Controller = {
        index: function () {
            var options = {
                format: 'YYYY-MM-DD',
                useCurrent: false,
                icons: {
                    time: 'fa fa-clock-o',
                    date: 'fa fa-calendar',
                    up: 'fa fa-chevron-up',
                    down: 'fa fa-chevron-down',
                    previous: 'fa fa-chevron-left',
                    next: 'fa fa-chevron-right',
                    today: 'fa fa-history',
                    clear: 'fa fa-trash',
                    close: 'fa fa-remove'
                },
                showTodayButton: true,
                showClose: true
            };
            $('#begin').datetimepicker(options);
            $('#end').datetimepicker(options);
            $("#begin").on("dp.change", function (e) {
                begin=$(this).val();
                end=$('#endtime').val();
                b1=(new Date(begin)).getTime();
                e1=(new Date(end)).getTime();
                if(b1>=e1){
                    $('#endtime').data("DateTimePicker").date(e.date);
                }
               $('#end').data("DateTimePicker").minDate(e.date);
            });
            $("#end").on("dp.change", function (e) {
               $('#begin').data("DateTimePicker").maxDate(e.date);
            });
            Controller.api.bindevent();
        },
        add: function () {
            Controller.api.bindevent();
        },
        edit: function () {
            Controller.api.bindevent();
        },
        order: function (){
            
        },
        api: {
            bindevent: function () {
                Form.api.bindevent($("form[role=form]"));
            }
        }
    };
    return Controller;
});

关键是:define中增加bootstrap-datetimepicker

12.在表中以某个字段排序关键 sortable

{field: 'id', title: __('Id'), sortable: true},

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值