【fastadmin】自定义搜索条件及tab切换
metlin 2024-08-31 12:33:02 阅读 74
【fastadmin】自定义搜索条件及tab切换
前言业务需求解决方案JS中添加自定义搜索条件HTML中添加 tab 控件后端控制器中处理自定义搜索字段
总结
前言
在fastadmin框架中,我们可以看到测试管理模块有这样一个功能,他可以将 select 搜索条件放到 tab 栏中,方便我们快速筛选表格信息,一般是 status 字段
但有些时候我们要筛选的条件可能并不是表中的字段,而是一些较为复杂的逻辑,这时候我们需要自定义筛选条件。那么如何将自定义的筛选条件呈现出上面的效果呢?
业务需求
如图所示,该需求设计的表有3张:患者表、管理员表(医生表)、患者-医生关系表,其中患者和医生的关系为多对多。
解决方案
JS中添加自定义搜索条件
<code>columns: [
// ......
{
field: 'belong',// 自定义搜索字段名
title: __('Belong'),
visible: false,// 不显示在表格列
switchable: false,// 不允许切换显示状态
searchList: { // 搜素列表
"my":__('My'),// 我的病人
"undistributed":__("Undistributed")// 未分配的病人
},
defaultValue: 'my'// 默认展示我的病人
}
}
HTML中添加 tab 控件
<div class="panel-heading">code>
{:build_heading(null,FALSE)}
<ul class="nav nav-tabs" data-field="belong">code>
<li><a href="#t-all" data-value="" data-toggle="tab">{:__('All')}</a></li>code>
<!-- 默认选中我的病人 -->
<li class="active"><a href="#t-my" data-value="my" data-toggle="tab">{:__('My')}</a></li>code>
<li><a href="#t-undistributed" data-value="undistributed" data-toggle="tab">{:__('Undistributed')}</a></li>code>
</ul>
</div>
后端控制器中处理自定义搜索字段
需要重写 index 方法,处理自定义搜索条件。将\app\admin\library\traits\Backend
中的index
方法复制到控制器中,并修改如下:
/**
* 查看
*
* @return string|Json
* @throws \think\Exception
* @throws DbException
*/
public function index()
{
//设置过滤方法
$this->request->filter(['strip_tags', 'trim']);
if (false === $this->request->isAjax()) {
return $this->view->fetch();
}
//如果发送的来源是 Selectpage,则转发到 Selectpage
if ($this->request->request('keyField')) {
return $this->selectpage();
}
// 处理自定义查询字段 belong
$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');
});
}
// 自定义搜索条件处理完毕,须删除,否则后续 $this->buildparams() 处理其他搜索条件时会报错
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);
}
总结
fastadmin 搜索条件写在表格列 columns 中,由于自定义字段只用于搜索筛选,所以设置visible: false
和 switchable: false
使其隐藏且不允许切换显示状态搜索默认值在JS中设置 defaultValue: 'my'
,在HTML中对应控件加上 active
样式搜索条件在 request 的 filter 参数中,处理完自定义搜索条件后须删除自定义字段,避免影响其它搜索条件的处理
如果本文对你有帮助,请帮忙点个赞呀!
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。