fastadmin框架常用知识点

背景:

 最近在维护一个由fastadmin框架搭建的网站,第一次接触fastadmin,在维护的过程中遇到了一些大大小小的问题,记录下来,以供其他初学者参考;

知识点:

1. 列表页指定字段取消筛选操作?

    答:在指定的js文本中,添加属性 operate:false

 {field: 'ceshi', title: __('Ceshi'), operate:false},

2. 列表页筛选区域的select赋初始默认值?

   答: 在指定的js文本中,添加属性 defaultValue:1

 {field: 'ceshi', title: __('Ceshi'),searchList: {"1": __('yes'), "2": __('no')},defaultValue:1},

3. 列表页指定字段不在表格中显示,但是在筛选框中能够显示并筛选?

   答:在指定的js文本中,添加属性 visible:false

 {field: 'ceshi', title: __('Ceshi'),visible:false},

4. 根据条件显示或隐藏按钮?

    答:在指定的js文本中,添加方法 hidden visible

  {field: 'ceshi', title: __('Ceshi'), operate:false, table: table,formatter: Table.api.formatter.buttons,buttons:
                                [
                                    {
                                        name: 'open', text: '未开通',  title: '去开通',
                                        classname: 'btn btn-xs btn-primary btn-dialog', url: function(row, column){
                                            return "user/test/open?id="+row.id+"&name="+row.name;
                                        },
                                        hidden:function(row){
                                            if(row.status!= 1){
                                                return true;
                                            }
                                        },
                                        visible:function(row){
                                            if(row.cicada == 0 && row.ishas== 2){
                                                return true;
                                            }
                                        },
                                    }]}

5. 自定义按钮添加角色权限

    答: 在列表页index.html的操作中经常会添加一些自定义按钮,如问题4内的按钮代码;总后台权限管理中的角色管理,不同角色展示不同内容。此时,需要修改列表页index.html,添加  data-operate-open="{:$auth->check('user/test/open')}"

<div class="panel panel-default panel-intro">
    {:build_heading()}

    <div class="panel-body">
        <div id="myTabContent" class="tab-content">
            <div class="tab-pane fade active in" id="one">
                <div class="widget-body no-padding">
                    <div id="toolbar" class="toolbar">
                        {:build_toolbar('refresh')}
                    </div>
                    <table id="table" class="table table-striped table-bordered table-hover"
                           data-operate-detail="{:$auth->check('user/test/detail')}"
                           data-operate-edit="{:$auth->check('user/test/edit')}"
                           data-operate-open="{:$auth->check('user/test/open')}"
                           width="100%">
                    </table>
                </div>
            </div>
        </div>
    </div>
</div>

6. 校验表单input格式

    要求必填,且长度范围在6-32位;其它校验可参考官方文档;表单验证

   <div class="col-xs-12 col-sm-8">
      <input id="c-account" data-rule="required;length(6~32);" class="form-control" name="row[account]" type="text" placeholder="请输入您的账号" >
   </div>

7. 工具栏‘添加按钮’传递参数

  需求:根据传的参数id值,添加页面展示不同的内容

 答:1. location.search为当前页面的url参数; 在js中 add_url 最后面添加即可;

  add_url: 'edu/user/add'+location.search,

        2. 在控制器中的add方法get请求可以接收参数

$id = $this->request->param('id');

8. selectpage下拉框实现动态调取源数据

 答: data-scource调取数据源地址;

       源数据如果不是id,name 可通过data-primary-key="你的主键ID字段"data-field="你要显示的字段"修改;

      data-params 进行动态传参;

<div class="col-xs-12 col-sm-8">
   <!--多选-->
   <input id="c-test" data-rule="required" data-multiple="true" data-source="test/abc/passabc" data-pagination="true" data-page-size="10" data-params={"custom[merchantsid]":""}  class="form-control selectpage" name="row[test]" type="text" value="">
 </div>

  对应的js写方法动态传参:

add: function () {
      $("#c-test").data("params", function (obj) {
         return {custom: {merchantsid: $("#merchants_id").val()}};
      });
    Controller.api.bindevent();
 },

对应test/abc/passabc的php代码:

 public function passsabc(){
        $page = $this->request->request("pageNumber");
        $pagesize = $this->request->request("pageSize");
        $request = $this->request->request();
         
         //动态接收参数
        $merchants_id = isset($request['custom']['merchantsid'])?$request['custom']['merchantsid']:'';
        if($merchants_id != ''){
            $where['merchants_id'] = $merchants_id;
        }

        $where['status'] = 2;
        $list = $this->model->field('`shop_id` as id,`shop_name` as name')->where($where)->select();

        //添加搜索功能
        $q_word = $this->request->request("q_word/a");
        if(!empty($q_word[0])){
            $data = [];
            foreach ($list as $item) {
                if(strpos($item['name'], $q_word[0]) !== false){
                    array_push($data,$item);
                }
            }
            $list = $data;
        }

        if($this->request->request("keyValue")){
            $arr = explode(',',$this->request->request("keyValue"));
            $newlist = array();
            foreach ($list as $k=>$v){
                if(in_array($v['id'],$arr)){
                    $newlist[] = $list[$k];
                }
            }
            return ['total'=>count($newlist), 'list'=>$newlist];
        }

        $total = count($list);
        $list = $this->page_array($pagesize,$page,$list,0);
        return json(['list' => $list, 'total' => $total]);
    }

    public function page_array($count,$page,$array,$order){
        global $countpage; #定全局变量
        $page=(empty($page))?'1':$page; #判断当前页面是否为空 如果为空就表示为第一页面
        $start=($page-1)*$count; #计算每次分页的开始位置
        if($order==1){
            $array=array_reverse($array);
        }
        $totals=count($array);
        $countpage=ceil($totals/$count); #计算总页面数
        $pagedata=array();
        $pagedata=array_slice($array,$start,$count);
        return $pagedata;  #返回查询数据
    }

 

注: 后续会逐步补充遇到的问题及解决方法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章