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参数,代码如上控制器部分代码