前言
在fastadmin框架中,我们可以看到测试管理模块有这样一个功能,他可以将 select 搜索条件放到 tab 栏中,方便我们快速筛选表格信息,一般是 status 字段
业务需求
如图所示,该需求设计的表有3张:患者表、管理员表(医生表)、患者-医生关系表,其中患者和医生的关系为多对多。
解决方案
JS中添加自定义搜索条件
columns: [
{
field: 'belong',
title: __('Belong'),
visible: false,
switchable: false,
searchList: {
"my":__('My'),
"undistributed":__("Undistributed")
},
defaultValue: 'my'
}
}
HTML中添加 tab 控件
<div class="panel-heading">
{:build_heading(null,FALSE)}
<ul class="nav nav-tabs" data-field="belong">
<li><a href="#t-all" data-value="" data-toggle="tab">{:__('All')}</a></li>
<li class="active"><a href="#t-my" data-value="my" data-toggle="tab">{:__('My')}</a></li>
<li><a href="#t-undistributed" data-value="undistributed" data-toggle="tab">{:__('Undistributed')}</a></li>
</ul>
</div>
后端控制器中处理自定义搜索字段
需要重写 index 方法,处理自定义搜索条件。将\app\admin\library\traits\Backend中的index方法复制到控制器中,并修改如下:
public function index()
{
$this->request->filter(['strip_tags', 'trim']);
if (false === $this->request->isAjax()) {
return $this->view->fetch();
}
if ($this->request->request('keyField')) {
return $this->selectpage();
}
$filter = $this->request->get("filter", '');
$filter = (array)json_decode($filter, true);
$filter = $filter ? $filter : [];
if (isset($filter['belong'])) {
if ($filter['belong'] == 'my') {
$this->model = $this->model->whereIn('id', function ($query) {
$query->table('patient_doctor')
->where('doctor_id', $this->auth->id)
->field('patient_id');
});
} else if ($filter['belong'] == 'undistributed') {
$this->model = $this->model->whereNotIn('id', function ($query) {
$query->table('patient_doctor')->field('patient_id');
});
}
unset($filter['belong']);
$this->request->get(['filter' => json_encode($filter)]);
}
[$where, $sort, $order, $offset, $limit] = $this->buildparams();
$list = $this->model
->where($where)
->order($sort, $order)
->paginate($limit);
$result = ['total' => $list->total(), 'rows' => $list->items()];
return json($result);
}
总结
如果本文对你有帮助,请帮忙点个赞呀!