FastAdmin后台表格添加自定义搜索条件

FastAdmin后台表格的高级搜索中,默认只包含了数据库中有的字段,且在表格的定义中声明了operate的。

但是会碰上这样的需求,比如数据表中存储了地区信息,字段为area_id,保存的是省市二级联动后的市的ID,搜索时需要先选择省、再选择市,再提交搜索。这个时候就需要对控制器、页面模板、JS文件里表格的列做一些比较大的改动,我称之后自定义搜索。

先说页面,编写index.html,在底部添加

<script id="areahtml" type="text/html">
    <div class="row">
        <div class="col-xs-12">
            <div class="form-inline" data-toggle="cxselect" data-selects="province_id,city_id">
                <select style="width: 50%" id="province_id" class="province_id form-control" name="province_id"  data-url="area/province_list" ></select>
                <input type="hidden" class="operate" data-name="province_id" value="=" />

                <select style="width: 50%" id="city_id" class="city_id form-control" name="city_id" data-url="area/city_list" ></select>
                <input type="hidden" class="operate" data-name="city_id" value="=" />
            </div>
        </div>
    </div>
</script>

再编辑对应的后端js文件,在columns加上一个字段

{
   field: "area_id",
   title: "地区",
   operate: "=",
   formatter: function (value, row, index) {
   return "";
   },
   visible: true,
  searchList: function (column) {
  //重点
  return Template("areahtml", {});
  },
 },

再在下面的事件中添加相应的处理逻辑

$('#province_id').change(function () {
    $('#city_id').data("params", function (obj) {
    return { custom: { "pid": $('#province_id').val() } };
    });
 });
$('#city_id').data("params", function (obj) {
   return { custom: { "pid": $('#province_id').val() } };
});

最后是在控制器中接收参数返回数据,涉及两个控制器,一是Area.php,用于返回省市县列表

     /**
      * 省份列表
      */
    public function province_list(){
        $list = $this->model->where(['pid' => 0])->order("id asc")->field("id as value,name")->select();
        $this->success("", null, $list);
    }

    /**
      * 市县列表
      */
      public function city_list(){
        $pid = $this->request->param("province_id");
        $list = $this->model->where(['pid' => $pid])->order("id asc")->field("id as value,name")->select();
        $this->success("", null, $list);
    }

二是主控制器,也就是用于返回表格所展示数据的控制器,在行list($where, $sort, $order, $offset, $limit) = $this->buildparams(); 前面加入如下代码

 $filter = json_decode($this->request->get("filter"),true);
 $op     = json_decode($this->request->get("op"),true);
 if(isset($filter['province_id'])){
   unset($filter['province_id']);
   unset($op['province_id']);
 }
 if(isset($filter['city_id'])){
   if($filter['city_id'] != 0){
      $filter['area_id'] = $filter['city_id'];
  }
  unset($filter['city_id']);
  unset($op['city_id']);
 }
 $this->request->get(["filter"=>json_encode($filter),'op'=>json_encode($op)]);

好了,刷新页面就可以在高级搜索中按省市来筛选了。

Leave a Comment

豫ICP备19001387号-1