FarmerGrid.php 4.9 KB
<?php
/**
+-----------------------------------------------------------------------------------------------------------------------
 * 管理端列表grid trait层:渲染生成 会员 grid 列表
+-----------------------------------------------------------------------------------------------------------------------
 *
 * PHP version 7
 *
 * @category  App\Admin\Grids\User
 * @package   App\Admin\Grids\User
 * @author    Richer <yangzi1028@163.com>
 * @date      2020年12月28日 17:57:14
 * @copyright 2021-2022 Richer (http://www.Richer.com/)
 * @license   http://www.Richer.com/ License
 * @link      http://www.Richer.com/
 */
namespace App\Admin\Grids\User;

use App\Admin\Extensions\Actions\FarmerImporter;
use App\Admin\Extensions\Exporter\FarmerExporter;
use App\Models\User\Family;
use App\Models\User\Group;
use App\Models\User\User;
use Encore\Admin\Grid;

/**
 * Class FarmerGrid.
 *
 * @category  App\Admin\Grids\User
 * @package   App\Admin\Grids\User
 * @author    Richer <yangzi1028@163.com>
 * @date      2020年12月28日 17:57:14
 * @copyright 2021-2022 Richer (http://www.Richer.com/)
 * @license   http://www.Richer.com/ License
 * @link      http://www.Richer.com/
 */
trait FarmerGrid
{
    /**
     * 设置默认排序规则
     *
     * @return void
     */
    public function setGridTitle()
    {
        $this->grid->setTitle($this->title.'列表');
    }

    /**
     * 为grid增加导出的配置
     *
     * @return \Encore\Admin\Grid
     */
    public function renderGridExporter()
    {
        $fileName = $this->title.'列表_'.date('YmdHis');
        $this->grid->exporter(new FarmerExporter($fileName));
        return $this->grid;
    }

    /**
     * 为grid增加筛选条件
     *
     * @return \App\Admin\Rewrite\Grid
     */
    public function renderGridFilter()
    {
        $this->grid->filter(
            function ($filter) {
                // 筛选条件默认展开
                $filter->expand();

                $this->filterSingleSelect($filter, 'group_id', __('所属小组'), Group::getSelectOptions('farmer'));
                $this->filterSingleSelect($filter, 'family_id', __('所属家庭'), Family::getSelectOptions());

                $this->filterSingleSelect($filter, 'role', __('role'), User::FARMER_ROLE_OPTIONS);

                $filter->like('name', __('truename'));

                $this->filterText($filter, 'mobile');

                //4.去掉默认的搜索
                $filter->disableIdFilter();
            }
        );

        return $this->grid;
    }

    /**
     * 设置默认排序规则
     *
     * @return void
     */
    public function setGridOrder()
    {
        $this->grid->model()->orderBy('created_at', 'desc');
    }


    /**
     * 设置默认查询条件
     * 增加数据权限的判断。步骤:
     * 1、判断用户是否是超级管理员,并判断用户的pid,如果pid为0 则为平台总用户,不进行数据权限的判断
     * 2、如果pid大于0 则为 平台子管理员,则需要进行数据权限的判断
     *
     * @return void
     */
    public function setGridQuery()
    {
        parent::setGridQuery();
        $this->grid->model()->whereIn('role', User::FARMER_OPTIONS);
        $this->grid->model()->with(['group']);
    }

    /**
     * 设置行操作的样式
     *
     * @return void
     */
    public function setActionClass()
    {
        $this->grid->disableRowSelector();
    }

    /**
     * 自定义每行的操作
     * 根据每个模块设置的权限来判断当前的操作
     *
     * @param $actions
     * @return void $grid grid
     */
    public function setRowCustomActions($actions)
    {
        // 当前数据的主键
        $id = $actions->getKey();
        // 当前的url
        $url = $actions->getResource();
    }

    /**
     * 渲染grid字段
     *
     * @return void
     */
    public function renderGridFields()
    {
        $this->gridRowNo();
        $this->gridTextField('group.name', '所属小组');
        $this->gridTextField('family.name', '所属家庭');
        $this->gridTextField('nickname', __('wx_nickname'));
        $this->gridSingleImageField('avatar', __('wx_avatar'));
//        $this->grid->column('avatar', '头像')->gravatar(45);
        $this->gridTextField('name', __('truename'));
        $this->gridTextField('mobile');
        $this->gridSingleSelectField('gender', __('gender'), User::GENDER_OPTIONS, User::GENDER_COLOR_OPTIONS);
        $this->gridSingleSelectField('role', __('role'), User::ROLE_TYPE_OPTIONS, User::ROLE_TYPE_COLOR_OPTIONS);
        $this->gridTextField('house_number');
        $this->gridTextField('address');
        $this->gridTextField('login_times')->sortable();
        $this->gridDateField('last_login_time');
        $this->gridDateField('created_at', __('registered_at'));

        $this->grid->tools(function (Grid\Tools $tools) {
            // 导入
            $tools->append(new FarmerImporter());
        });
    }
}