BaseModal.php 5.0 KB
<?php
/**
+-----------------------------------------------------------------------------------------------------------------------
 * grid 列表 modal 类:
+-----------------------------------------------------------------------------------------------------------------------
 *
 * PHP version 7
 *
 * @category  App\Admin\Grids
 * @package   App\Admin\Grids
 * @author    Richer <yangzi1028@163.com>
 * @date      2020年12月29日09:29:47
 * @copyright 2021-2022 Richer (http://www.Richer.com/)
 * @license   http://www.Richer.com/ License
 * @link      http://www.Richer.com/
 */
namespace App\Admin\Grids\Modal;

use Illuminate\Contracts\Support\Renderable;

/**
 * Class BaseModal
 *
 * @category  App\Admin\Grids\Modal
 * @package   App\Admin\Grids\Modal
 * @author    Richer <yangzi1028@163.com>
 * @date      2020年12月29日09:29:47
 * @copyright 2021-2022 Richer (http://www.Richer.com/)
 * @license   http://www.Richer.com/ License
 * @link      http://www.Richer.com/
 */
class BaseModal implements Renderable
{
    protected $pageSize = 10;

    /**
     * @return int
     */
    public function getPageSize()
    {
        return $this->pageSize;
    }

    public function render($key = null)
    {
        //
    }

    /**
     * 渲染自定义的分页 ajax
     *
     * @param $key
     * @param $paginator
     * @param $transformer
     * @param array $params
     * @return array
     */
    public function renderPaginator($key, $paginator, $transformer = null, $params = [])
    {
        // dump($paginator);
        $paginator->appends('key', $key);
        $paginator->appends('renderable', request('renderable'));
        // 追加查询条件
        if ($params) {
            array_walk($params, function ($param, $key) use (&$paginator) {
                $paginator->appends($key, $param);
            });
        }

        $items = $paginator->items() ;

        // 对数据进行转换
        $data = [];
        if ($transformer) {
            foreach ($items as $vo) {
                $data[] = $transformer->transform($vo);
            }
        } else {
            $data = $items;
        }

        // 获取当前的页码
        $page = request('page', 1);

        // 全部数据
        $total = $paginator->total();

        //  全部页码
        $lastPage = $paginator->lastPage();

        // 当前页码
        $currentPage = $paginator->currentPage();

        // 中间的页码数组
        $elements   = [];
        $len        = $lastPage - 2;
        $center_page = 8;
        // 创建数组
        if ($lastPage <= 10) {
            for ($i = 1; $i <= $lastPage; $i++) {
                $elements[0][$i] = $i;
            }
        } else {
            if ($currentPage < $center_page) {
                for ($i = 1; $i <= $center_page; $i++) {
                    $elements[0][$i] = $i;
                }
                $elements[1] = '...';
                for ($i = $lastPage-1; $i <= $lastPage; $i++) {
                    $elements[2][$i] = $i;
                }
            }/*elseif($currentPage === $lastPage /2){
//                for ($i = $lastPage /2 - 4; $i <= $lastPage /2 - 4; $i++) {
//                    $elements[0][$i] = $i;
//                }
//                $elements[1] = '...';
//                for ($i = $center_page + 1; $i <= $center_page + 4; $i++) {
//                    $elements[2][$i] = $i;
//                }
//                $elements[2]['...'] = '...';
//                for ($i = $lastPage-1; $i <= $lastPage; $i++) {
//                    $elements[2][$i] = $i;
//                }
            }*/ elseif ($currentPage <= $lastPage /2 + 1) {
                for ($i = 1; $i <= $center_page - 4; $i++) {
                    $elements[0][$i] = $i;
                }
                $elements[1] = '...';
                for ($i = $center_page + 1; $i <= $center_page + 4; $i++) {
                    $elements[2][$i] = $i;
                }
                $elements[2]['...'] = '...';
                for ($i = $lastPage-1; $i <= $lastPage; $i++) {
                    $elements[2][$i] = $i;
                }
            } else {
                for ($i = 1; $i <= 2; $i++) {
                    $elements[0][$i] = $i;
                }
                $elements[1] = '...';
                for ($i = $lastPage-$center_page-1; $i <= $lastPage; $i++) {
                    $elements[2][$i] = $i;
                }
            }
        }

        //dd($elements);



        $prev = ($page - 1) > 0 ? $page - 1 : 1;

        $next = ($page + 1) < $total ? $page + 1 : $total;

        return [
            'key'       => $key,
            'renderable'=> request('renderable'),
            'items'     => $data,
            'prev'      => $prev,
            'next'      => $next,
            'total'     => $total,
            'lastPage'  => $lastPage,
            'page'      => $page,
            'pageSize'  => $this->getPageSize(),
            'paginator' => $paginator,
            'elements'  => $elements,
            'url'       => request()->url(),
        ];
    }
}