乌鸦嘴文档 乌鸦嘴文档
乌鸦嘴社区 (opens new window)
乌鸦嘴社区 (opens new window)
  • 入门

  • 数据列表

    • 表格基本使用
      • 简单示例
      • 表格显示模式
        • table_collapse
        • 边框模式
      • 基本使用方法
        • 添加列 (column)
        • 修改来源数据
        • 修改显示输出 (display)
        • 显示序号 (number)
        • 设置名称 (setName)
        • 获取当前行数据 (row)
        • 设置工具栏按钮样式
        • 设置创建按钮
        • 修改创建以及更新按钮的路由 (setResource)
        • 设置查询过滤器
        • 行选择器 (rowSelector)
        • 设置行操作按钮
        • 设置批量操作按钮 (batchActions)
        • 设置工具栏 (toolbar)
        • 设置刷新按钮 (refresh)
        • 设置分页功能 (paginate)
        • addTableClass
        • 设置表格文字居中 (text-center)
        • 显示横向滚动条 (scrollbarX)
        • 设置表格外层容器
      • 关联模型
    • 列的基本使用
    • 列的显示和扩展
    • 行的使用和扩展
    • 工具栏
    • 树状表格
    • 组合表头
    • 表格数据源
    • 表格关联关系
    • 查询过滤
    • 列过滤器
    • 表格快捷搜索
    • 表格规格筛选器
    • 数据导出
    • 快捷创建
    • 数据表格行内编辑
    • 数据表格事件
    • 表格字段翻译
    • 数据软删除
    • 头部和脚部
    • 表格异步渲染
  • 数据表单

  • 数据详情

  • 模型树

  • 数据仓库

  • 动作

  • 多语言

  • 开发扩展

  • 页面组件

  • 区块

  • 动作以及表单相应

  • 权限控制

  • 菜单

  • 帮助函数

  • 开发工具

  • 自定义登陆

  • 自定义头部导航

  • 更新日志

目录

表格基本使用

# 表格基本使用

# 简单示例

Dcat\Admin\Grid类用于生成基于数据模型的表格,先来个例子,数据库中有movies表

CREATE TABLE `movies` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `director` int(10) unsigned NOT NULL,
  `describe` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `rate` tinyint unsigned NOT NULL,
  `released` enum(0, 1),
  `release_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

对应的数据模型为App\Models\Movie,对应的数据仓库为App\Admin\Repositories\Movie,数据仓库代码如下:

提示

如果你的数据来自MySQL,则数据仓库不是必须的,你也可以直接使用Model。

<?php

namespace App\Admin\Repositories;

use Dcat\Admin\Repositories\EloquentRepository;
use App\Models\Movie as MovieModel;

class Movie extends EloquentRepository
{
    protected $eloquentClass = MovieModel::class;
    
    /**
     * 设置表格查询的字段,默认查询所有字段
     * 
     * @return array
     */
    public function getGridColumns(){
        return ['id', 'title', 'director', 'rate', ...];
    }
}

下面的代码可以生成表movies的数据表格:

<?php

namespace App\Admin\Controllers;

use App\Admin\Repositories\Movie;
use Dcat\Admin\Grid;
use Dcat\Admin\Controllers\AdminController;

class MovieController extends AdminController
{
    protected function grid()
    {
        return Grid::make(new Movie(), function (Grid $grid) {
            // 第一列显示id字段,并将这一列设置为可排序列
            $grid->column('id', 'ID')->sortable();
            
            // 第二列显示title字段,由于title字段名和Grid对象的title方法冲突,所以用Grid的column()方法代替
            $grid->column('title');
            
            // 第三列显示director字段,通过display($callback)方法设置这一列的显示内容为users表中对应的用户名
            $grid->column('director')->display(function($userId) {
                return User::find($userId)->name;
            });
            
            // 第四列显示为describe字段
            $grid->column('describe');
            
            // 第五列显示为rate字段
            $grid->column('rate');
            
            // 第六列显示released字段,通过display($callback)方法来格式化显示输出
            $grid->column('released', '上映?')->display(function ($released) {
                return $released ? '是' : '否';
            });
            
            // 下面为三个时间字段的列显示
            $grid->column('release_at');
            $grid->column('created_at');
            $grid->column('updated_at');
            
            // filter($callback)方法用来设置表格的简单搜索框
            $grid->filter(function ($filter) {
                // 设置created_at字段的范围查询
                $filter->between('created_at', 'Created Time')->datetime();
            });
        });
    }
}

# 表格显示模式

# table_collapse

在这个版本开始,默认的表格布局将会采用 table_collapse 模式,效果如下

如果想要切换回旧版本的表格布局样式,可以在 app/Admin/bootstrap.php中加上

Grid::resolving(function (Grid $grid) {
    $grid->tableCollapse(false);
});

# 边框模式

通过withBorder方式可以让表格显示边框

$grid->withBorder();

效果

禁用边框模式

$grid->withBorder(false);

# 基本使用方法

# 添加列 (column)

// 添加单列
$grid->column('username', '用户名');

// 添加多列
$grid->columns('email', 'username' ...);

# 修改来源数据

$grid->model()->where('id', '>', 100);

$grid->model()->orderBy('profile.age');

// 回收站数据
$grid->model()->onlyTrashed();

...

同时也可以使用以下方式

protected function grid()
{
    return Grid::make(Model::with('...')->where(...), function (Grid $grid) {
        ...
    });
}

其它查询方法可以参考eloquent的查询方法

# 修改显示输出 (display)

$grid->column('text')->display(function($text) {
    return str_limit($text, 30, '...');
});

// 允许混合使用多个“display”方法
$grid->column('name')->display(function ($name) {
     return "<b>$name</b>";
 })->display(function ($name) {
    return "<span class='label'>$name</span>";
});

$grid->column('email')->display(function ($email) {
    return "mailto:$email";
});

// 可以直接写字符串
$grid->column('username')->display('...');

// 添加不存在的字段
$grid->column('column_not_in_table')->display(function () {
    return 'blablabla....'.$this->id;
});

# 显示序号 (number)

通过number方法可以在表格中添加一列从1开始计算的行序号列

$grid->number();

# 设置名称 (setName)

当页面存在多个Grid表格时,需要给表格设置不同的名称,否则部分功能可能会出现冲突的情况

$grid->setName('name1');

# 获取当前行数据 (row)

display()方法接收的匿名函数绑定了当前行的数据对象,可以在里面调用当前行的其它字段数据

$grid->column('first_name');
$grid->column('last_name');

// 不存的字段列
$grid->column('full_name')->display(function () {
    return $this->first_name.' '.$this->last_name;
});

# 设置工具栏按钮样式

工具栏按钮默认显示outline模式,效果如下

用法

$grid->toolsWithOutline();

// 禁止
$grid->toolsWithOutline(false);

效果

禁用outline后的效果

如果你希望某个按钮不使用outline模式,可以在按钮的class属性中加上disable-outline

$grid->tools('<a class="btn btn-primary disable-outline">测试按钮</a>');

# 设置创建按钮

此功能默认开启

// 禁用
$grid->disableCreateButton();
// 显示
$grid->showCreateButton();

# 开启弹窗创建表单

此功能默认不开启

$grid->enableDialogCreate();

// 设置弹窗宽高,默认值为 '700px', '670px'
$grid->setDialogFormDimensions('50%', '50%');

# 修改创建以及更新按钮的路由 (setResource)

设置修改创建以及更新按钮的路由前缀

$grid->setResource('auth/users');

# 设置查询过滤器

此功能默认开启

// 禁用
$grid->disableFilter();
// 显示
$grid->showFilter();

// 禁用过滤器按钮
$grid->disableFilterButton();
// 显示过滤器按钮
$grid->showFilterButton();

# 行选择器 (rowSelector)

// 禁用
$grid->disableRowSelector();
// 显示
$grid->showRowSelector();

# 设置选择中行的标题字段

设置选中后需要显示的字段,如不设置,默认取 name、 title、 username中的一个。

$grid->column('full_name');
$grid->column('age');

...

$grid->rowSelector()->titleColumn('full_name');

# 设置选择中行的ID字段

设置选中后需要保存的字段,默认为 数据表主键(id) 字段

$grid->column('new_id');

...

$grid->rowSelector()->idColumn('new_id');

# 设置checkbox选择框颜色

默认 primary,支持:default、 primary、 success、 info、 danger、 purple、 inverse。

$grid->rowSelector()->style('success');

# 点击当前行任意位置选中

此功能默认不开启。

$grid->rowSelector()->click();

# 设置选中行的背景颜色

use Dcat\Admin\Admin;

$grid->rowSelector()->background(Admin::color()->dark20());

# 设置默认选中 (check)

Since v2.0.21

通过check方法可以设置默认选中的行,此方法接受一个array类型或匿名函数参数

// 设置默认选中第 1/3/5 行
$grid->rowSelector()->check([0, 2, 4]);

// 传递闭包
$grid->rowSelector()->check(function () {
    // 设置默认选中第 1/3/5 行
    return in_array($this->_index, [0, 2, 4]);
});

// 在闭包中使用当前行其他字段
$grid->rowSelector()->check(function () {
    // 设置默认选中 id > 10 的行
    return $this->id > 10;
});

# 禁止更改选中状态 (disable)

Since v2.0.21

通过disable方法可以设置禁止更改选中状态的行,此方法接受一个array类型或匿名函数参数

// 禁止第 1/3/5 行更改选中状态
$grid->rowSelector()->disable([0, 2, 4]);

// 传递闭包
$grid->rowSelector()->disable(function () {
    // 禁止第 1/3/5 行更改选中状态
    return in_array($this->_index, [0, 2, 4]);
});

// 在闭包中使用当前行其他字段
$grid->rowSelector()->disable(function () {
    // 禁止 id > 10 的行更改选中状态
    return $this->id > 10;
});

// disable 可以和 check 方法一起使用
$grid->rowSelector()->check([2, 4])->disable([0, 2, 4]);

# 设置行操作按钮

// 禁用
$grid->disableActions();
// 显示
$grid->showActions();

// 禁用详情按钮
$grid->disableViewButton();
// 显示详情按钮
$grid->showViewButton();

// 禁用编辑按钮
$grid->disableEditButton();
// 显示编辑按钮
$grid->showEditButton();

// 禁用快捷编辑按钮
$grid->disableQuickEditButton();
// 显示快捷编辑按钮
$grid->showQuickEditButton();

// 设置弹窗宽高,默认值为 '700px', '670px'
$grid->setDialogFormDimensions('50%', '50%');


// 禁用删除按钮
$grid->disableDeleteButton();
// 显示删除按钮
$grid->showDeleteButton();

# 设置批量操作按钮 (batchActions)

// 禁用
$grid->disableBatchActions();
// 显示
$grid->showBatchActions();

// 禁用批量删除按钮
$grid->disableBatchDelete();
// 显示批量删除按钮
$grid->showBatchDelete();

# 设置工具栏 (toolbar)

// 禁用
$grid->disableToolbar();
// 显示
$grid->showToolbar();

# 设置刷新按钮 (refresh)

// 禁用
$grid->disableRefreshButton();
// 显示
$grid->showRefreshButton();

# 设置分页功能 (paginate)

// 禁用
$grid->disablePagination();
// 显示
$grid->showPagination();

# 简化分页 (simplePaginate)

启用 simplePaginate 功能后会使用Laravel的simplePaginate (opens new window)功能进行分页,当数据量较大时可以大幅提升页面的响应速度,但需要注意的是,使用此功能后将不会查询数据表的总行数。

// 启用
$grid->simplePaginate();

// 禁用
$grid->simplePaginate(false);

# 设置每页显示行数

// 默认为每页20条
$grid->paginate(15);

# 设置分页选择器选项

$grid->perPages([10, 20, 30, 40, 50]);

// 禁用分页选择器
$grid->disablePerPages();

# addTableClass

通过addTableClass可以给表格的table添加css样式

$grid->addTableClass(['class1', 'class2']);

# 设置表格文字居中 (text-center)

$grid->addTableClass(['table-text-center']);

# 显示横向滚动条 (scrollbarX)

显示表格横向滚动条,默认不显示

// 启用
$grid->scrollbarX();

// 禁用
$grid->scrollbarX(false);

# 设置表格外层容器

 // 更改表格外层容器
$grid->wrap(function (Renderable $view) {
    $tab = Tab::make();
    
    $tab->add('示例', $view);
    $tab->add('代码', $this->code(), true);

    return $tab;
});

# 关联模型

参考表格关联关系

Laravel Octane
列的基本使用

← Laravel Octane 列的基本使用→

Theme by Vdoing | Copyright © 2020-2022 wyz.xyz 宁ICP备15001739号-5
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×