sammaye / laravel-gridview

快速构建Web应用中最常用组件的原型:网格视图

dev-master 2019-09-17 20:00 UTC

This package is auto-updated.

Last update: 2024-09-18 06:26:17 UTC


README

这是一个基于Yii2网格视图的实现,其API简单到无需解释。

尽管这可以在生产环境中使用,但它最好用作更好的东西的占位符。

为什么?

为什么不想快速构建Web应用中最常用组件的原型?

你可以直接复制并粘贴代码,为每种记录类型进行定制。

这提供了哪些别人没有的东西?

简单。这不是一个小部件,它只是一个为@include提供的辅助工具。它为网格视图的每个部分提供了一系列函数。

实际上,它的构建非常简单和自由,你可以手动实例化每个类(包括列)并在HTML的任何部分单独渲染。

需要放入什么查询?

除了分页之外的所有内容。

此插件不会为您执行过滤或搜索逻辑。

所以,例如(实际上不要使用此示例),如果你的网格名称为user

$users = User::query()
    ->withTrashed()
    ->where('email', 'like', input('user-email'))
    ->orderBy(
        ltrim(input('user-sort'), '-'), 
        strpos(input('user-sort'), '-') === 0 ? 'DESC' : 'ASC'
    )
);

这使得它非常适应变化和重构,例如使用vue.js。

这需要JavaScript吗?

不,这完全取决于你自己的选择。

有示例代码可以开始吗?

当然,这是一个视图中的示例

{!!
    \sammaye\Grid\Grid::make('user')
        ->setData($users_q)
        ->setDataRowAttributes(function($grid, $row){
            $options = [];
            if ($row->trashed()) {
                $options['class'] = 'table-danger';
            }
            return $options;
        })
        ->setHeaderRowAttributes(['class' => 'thead-dark'])
        ->setColumns([
            \sammaye\Grid\Column::make('id')
                ->setDataCellTag('th')
                ->setLabel(__('#'))
                ->setAttributes(['scope' => 'row']),
            \sammaye\Grid\Column::make('email')
                ->setDataContent(function($column, $row){
                    return $row->email . (
                        $row->hasVerifiedEmail()
                            ? '<span class="text-success">' . __(
                                'Verified: :date',
                                ['date' => $row->email_verified_at]
                            ) . '</span>'
                            : '<span class="text-danger">' . __('Not Verified') . '</span>'
                    );
                }),
            \sammaye\Grid\Column::make('first_name'),
            \sammaye\Grid\Column::make('last_name'),
            \sammaye\Grid\Column::make('identity_verified')
                ->setDataContent(function($column, $row){
                    if($row->hasVerifiedIdentity()){
                        return '<span class="text-success">' . __(
                            'Verified: :date',
                            ['date' => $row->identity_verified_at]
                        ) . '</span>';
                    }elseif($row->hasPendingVerifiedIdentity()) {
                        return '<span class="text-warning">' . __(
                            'Pending: :date',
                            ['date' => $row->identity_verification_requested_at]
                        ) . '</span>';
                    }elseif($row->hasRejectedVerifiedIdentity()){
                        return '<span class="text-danger">' . __(
                            'Rejected: :date',
                            ['date' => $row->identity_verification_rejected_at]
                        ) . '</span>';
                    }else{
                        return '<span class="text-muted">' . __('Awaiting') . '</span>';
                    }
                }),
            \sammaye\Grid\Column::make('has_documents')
                ->setDataContent(function($column, $row){
                    return $row->verificationDocuments()->count() > 0
                        ? '<span class="text-success">Yes</span>'
                        : '<span class="text-danger">No</span>';
                }),
            \sammaye\Grid\Column::make('created_at'),
            \sammaye\Grid\Column::make('updated_at'),
            \sammaye\Grid\Column::make('deleted_at'),
            \sammaye\Grid\ActionColumn::make('actions')
                ->setEditButton(function($column, $row){
                    return route('admin.user.edit', ['user' => $row]);
                }, __('Edit'))
                ->setDeleteButton(function($column, $row){
                    return route('admin.user.destroy', ['user' => $row]);
                }, __('Delete'))
                ->setRestoreButton(function($column, $row){
                    return route('admin.user.restore', ['user' => $row]);
                }, __('Restore'))
        ])
    ->getTable()
!!}