GridFilterTrait.php 3.4 KB
<?php
/**
+-----------------------------------------------------------------------------------------------------------------------
 * 自定义 grid filter 字段
+-----------------------------------------------------------------------------------------------------------------------
 *
 * PHP version 7
 *
 * @category  App\Admin\Traits
 * @package   App\Admin\Traits
 * @author    Richer <yangzi1028@163.com>
 * @date      2021年11月11日14:15:12
 * @copyright 2021-2022 Richer (http://www.Richer.com/)
 * @license   http://www.Richer.com/ License
 * @link      http://www.Richer.com/
 */
namespace App\Admin\Traits;

use App\Models\Area\Area;
use App\Models\System\SystemConfig;
use Carbon\Carbon;
use Encore\Admin\Grid;
use Encore\Admin\Widgets\Table;
use Illuminate\Support\Arr;

/**
 * Trait GridFilterTrait
 *
 * @category  App\Admin\Traits
 * @package   App\Admin\Traits
 * @author    Richer <yangzi1028@163.com>
 * @date      2021年11月11日14:15:12
 * @copyright 2021-2022 Richer (http://www.Richer.com/)
 * @license   http://www.Richer.com/ License
 * @link      http://www.Richer.com/
 */
trait GridFilterTrait
{
    /**
     * 用户筛选
     *
     * @param $filter
     * @param string $relation
     */
    public function filterUser($filter, $relation = '')
    {
        $nickname = 'nickname';
        $mobile = 'mobile';
        $relation && $nickname = $relation. '.'.$nickname;
        $relation && $mobile = $relation. '.'.$mobile;
//        $nickname = $relation ? $relation. '.'.$nickname : $nickname;
//        $mobile = $relation ? $relation. '.'.$mobile : $mobile;
//        $nickname = $relation ? $relation .'.nickname' : 'nickname'; ;
//        $mobile = $relation ? $relation .'.mobile' : 'mobile';;
        $this->filterText($filter, $nickname, __('nickname'));
        $this->filterText($filter, $mobile, __('mobile'));
    }

    /**
     * 文本筛选
     *
     * @param $filter
     * @param $field
     * @param $comment
     */
    public function filterText($filter, $field, $comment = '')
    {
        if (!$comment) {
            $comment = __($field);
        }
        $filter->like($field, $comment);
    }

    /**
     * 数字文本 筛选
     *
     * @param $filter
     * @param $key
     */
    public function filterNumber($filter, $key)
    {
        $filter->like($key, __($key))->integer();
    }

    /**
     * 单选筛选
     *
     * @param $filter
     * @param $key
     * @param string $comment
     * @param array $options
     */
    public function filterSingleSelect($filter, $key, $comment = '', $options = [])
    {

        if (!$options) {
//            $options = SystemConfig::getSelectOptions($key);
        }

        if (!$comment) {
            $comment = __($key);
        }

        foreach ($options as &$option) {
            $option = __($option);
        }
        $filter->equal($key)->select($options)->placeholder($comment);
    }

    /**
     * 日期 筛选
     *
     * @param $filter
     * @param $key
     * @param string $comment
     * @param string $function
     * @param bool $range
     */
    public function filterDate($filter, $key, $comment = '', $function = 'date', $range = true)
    {
        if (!$comment) {
            $comment = __($key);
        }

        if ($range) {
            $filter->between($key, $comment)->$function();
        } else {
            $filter->equal($key, $comment)->$function();
        }
    }
}