Fastadmin筛选分类时获取选中分类及其子分类

如下图:列表根据分类进行下拉筛选,选中某一分类后,筛选这一分类及其字分类。

实现分类下拉筛选代码:

            var table = $("#table");

            //新增 配置调用接口
            table.on('post-common-search.bs.table', function (event, table) {
                var form = $("form", table.$commonsearch);
                $("input[name='category_id']", form).addClass("selectpage").data("source", "category/index?type=consult").data("primaryKey", "id").data("field", "name").data("orderBy", "id desc");
                Form.events.cxselect(form);
                Form.events.selectpage(form);
            });

            // 初始化表格
            table.bootstrapTable({
                url: $.fn.bootstrapTable.defaults.extend.index_url,
                pk: 'id',
                sortName: 'id',
                columns: [
                    [
                        {checkbox: true},
                        {field: 'id', title: __('Id'),operate: false},
                        // {field: 'category_id', title: __('Category_id')},
                        //新增 筛选窗
                        {field: 'category_id', title: __('Cate_name'), formatter: Table.api.formatter.search,visible:false},
                        {field: 'cate_name', title: __('Cate_name'), operate: false},
                        {field: 'title', title: __('Title'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content},
                        {field: 'status', title: __('Status'), searchList: {"1":__('Status 1'),"2":__('Status 2')}, formatter: Table.api.formatter.status},
                        {field: 'createtime', title: __('Createtime'), operate:'RANGE', addclass:'datetimerange', autocomplete:false, formatter: Table.api.formatter.datetime},
                        {field: 'updatetime', title: __('Updatetime'), operate:'RANGE', addclass:'datetimerange', autocomplete:false, formatter: Table.api.formatter.datetime},
                        {field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate}
                    ]
                ]
            });

            // 为表格绑定事件
            Table.api.bindevent(table);

后台获取子分类,并把筛选由eq改成in

首先将fastadmin的生成查询条件的方法buildparams复制到当前控制器(在当前类重写buildparams方法);

然后在buildparams方法的如下位置添加代码

        $index = 0;

        //如果传的有category_id就获取他的所有字分类
        foreach ($filter as $key=>$value){
            if($key=='category_id'){
                //获取所有字分类id的方法,可下面的获取子分类方法,自己实现
                $cateModel = new Category();
                $filter[$key] = $cateModel->get_children($value,'consult');
                //筛选方式改成in
                $op['category_id'] = 'in';
            }
        }

        foreach ($filter as $k => $v) {
            if (!preg_match('/^[a-zA-Z0-9_\-\.]+$/', $k)) {
                continue;
            }

获取子分类方法

<?php

namespace app\admin\model;

use think\Model;

class Category extends Model
{
    // 表名
    protected $name = 'category';

    /**
     * 获取某一分类的所有子分类id
     * @param $pid
     * @param $type
     * @return array
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     */
    public function get_children($pid,$type){
        $arrCate = self::where('type',$type)->field('id,pid')->select();
        $lists = $this->getTree($arrCate,$pid);
        $ids = array_column($lists,'id');
        $ids[] = (int)$pid;
        return $ids;
    }

    /**
     * 获取扁平的子分类
     * @param $arrCate
     * @param $pid
     * @param $level
     * @return array
     */
    public function getTree($arrCate, $pid = 0, $level = 0){
        static $arrTree = [];	//static函数执行完后变量值仍然保存
        if(empty($arrCate)) return [];
        $level++;
        foreach($arrCate as $key => $value){
            if($value['pid'] == $pid){
                $value['level'] = $level;
                $arrTree[] = $value;
                unset($arrCate[$key]);	//注销当前节点数据,减少已无用的遍历
                $this->getTree($arrCate, $value['id'], $level);	//递归调用
            }
        }
        return $arrTree;
    }
}

如上,就实现了查询该分类和其字分类。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值