fastadmin 自定义tab栏传参到后台做筛选判断

需求入下图:需要在原有的通过status字段搜索的tab栏中,新增一个无分组的tab栏,筛选没有属于任何分组的记录

 

 

  •  新增无分组tab栏,需要在对应的model中的getStatusList方法新增,代码如下:
    public function getStatusList()
        {
            return ['正常' => __('正常'), '禁用' => __('禁用'), '无分组' => __('无分组')];
        }

     

  • 并且在对应的js代码中修改searchList参数,代码如下
    {field: 'status', title: __('Status'), searchList: {"正常":__('正常'),"禁用":__('禁用'),"无分组":__('无分组')}, formatter: Table.api.formatter.status},

     

  • 在对应控制器的index方法中,利用filter参数做判断,具体看代码注释,代码如下:
    $customWhere = [];
                $filterInfo = $this->request->get('filter','');
                $filterInfo = (array)json_decode($filterInfo, true);
    
                if (isset($filterInfo['status']) && $filterInfo['status'] == '无分组') {
                    // 移除where条件中关于status的信息
                    $op = json_decode($this->request->get("op"),true);
                    unset($filterInfo['status'],$op['status']);
    
                    // 前端请求参数重新赋值,使得在接下来的where条件中没有status
                    $this->request->get(['filter' => json_encode($filterInfo),'op' => json_encode($op)]);
                    $customWhere['group_id'] = '';
                    $customWhere['status'] = '正常';
                }
                list ($where, $sort, $order, $offset, $limit) = $this->buildparams();
                $total = $this->model->where($where)->where($customWhere)
                    ->order($sort, $order)
                    ->count();
                session("LATS_COUNT_SQL",$this->model->getLastSql());
    
                $list = $this->model->where($where)->where($customWhere)
                    ->order($sort, $order)
                    ->limit($offset, $limit)
                    ->select();

     

     

  • 总结的一些坑:
    1、在控制器中,通过filter参数接收不到tab自定义的值。需要在js文件中,tab字段(status)的searchList中也要新增需要的筛选信息(无分组),代码如上JS部分代码
    2、在控制器中,通过传过来的status判断重新拼接where条件后,需要将status字段移除filter参数,代码如上控制器部分代码

posted @ 2022-08-18 17:13  大雄呀  阅读(1174)  评论(0编辑  收藏  举报