tomshaw / electricgrid
一个强大的Livewire数据表格包。非常适合需要数据表格解决方案的项目。
Requires
- php: ^8.2
- illuminate/console: ^11.0
- illuminate/contracts: ^11.0
- illuminate/support: ^11.0
- laravel/framework: ^11.0
- livewire/livewire: ^3.4
- maatwebsite/excel: ^3.1
- phpoffice/phpspreadsheet: ^1.29
Requires (Dev)
- larastan/larastan: ^2.9
- laravel/pint: ^1.14
- nunomaduro/collision: ^8.1
- orchestra/testbench: 9.x-dev
- pestphp/pest: 3.x-dev
- dev-master
- v0.5.0
- v0.4.0
- v0.3.0
- v0.2.1
- v0.2.0
- v0.1.40
- v0.1.39
- v0.1.38
- v0.1.37
- v0.1.36
- v0.1.35
- v0.1.34
- v0.1.33
- v0.1.32
- v0.1.31
- v0.1.30
- v0.1.28
- v0.1.27
- v0.1.26
- v0.1.25
- v0.1.24
- v0.1.23
- v0.1.22
- v0.1.21
- v0.1.20
- v0.1.19
- v0.1.18
- v0.1.17
- v0.1.16
- v0.1.15
- v0.1.14
- v0.1.13
- v0.1.12
- v0.1.11
- v0.1.10
- v0.1.9
- v0.1.8
- v0.1.7
- v0.1.6
- v0.1.5
- v0.1.4
- v0.1.3
- v0.1.2
- v0.1.1
- v0.1.0
- dev-release-please--branches--master
This package is auto-updated.
Last update: 2024-09-03 03:57:18 UTC
README
一个强大的Livewire数据表格包。非常适合需要数据表格解决方案的项目。
要查看完整演示,请访问Electric Grid Demo存储库。
特性
-
简单安装:使用简单的命令进行安装和包更新。
-
列:通过各种选项添加列到您的网格中,包括可排序、可样式化、可导出和可见。
-
过滤器:支持文本、数字、选择、多选、布尔值、时间选择器、日期选择器和日期时间选择器。
-
批量操作:提供在数据的多行上同时执行操作的能力。
-
表格导出:表格可以导出为xlsx、csv、pdf和html等格式。
-
搜索输入:您可以通过指定要搜索的列来启用搜索功能。
-
字母搜索:此功能允许您根据指定列中的特定字母搜索数据。
-
可切换列:隐藏或显示有用的列,以便专注于最相关的数据。
-
主题:使用不超过230行HTML的单个blade模板,使其非常容易进行主题化。
-
测试:提供运行测试的命令,以确保一切按预期工作。
安装
您可以通过composer安装此包
composer require tomshaw/electricgrid
运行安装命令。
php artisan electricgrid:install
运行更新命令以更新包
php artisan electricgrid:update
请确保将样式和脚本指令添加到您的布局中。
@vite(['resources/css/app.css', 'resources/js/app.js']) @electricgridStyles @electricgridScripts
将组件添加到您打算使用它的blade模板中。
这里命名空间是
App\Livewire\Tables,组件名称是OrdersTable。
<livewire:tables.orders-table />
使用方法
构建方法。
使用builder方法填充您的表格。
构建方法必须返回一个
Illuminate\Database\Eloquent\Builder实例。
use Illuminate\Database\Eloquent\Builder; use TomShaw\ElectricGrid\Component; use App\Models\Order; class OrdersTable extends Component { public array $computedColumns = ['posts_count']; public function builder(): Builder { return User::with(['roles', 'profile'])->withCount('posts'); } }
添加列。
使用列在网格中展示数据。
use TomShaw\ElectricGrid\{Component, Column}; use NumberFormatter; class OrdersTable extends Component { public function columns(): array { $numberFormat = new NumberFormatter('en_US', NumberFormatter::CURRENCY); return [ Column::add('id', 'ID') ->sortable() ->stylable('text-center w-20') ->exportable(), Column::add('name', 'Customer') ->callback(function (Model $model) { return view('livewire.tables.users-customer', ['model' => $model]); }) ->searchable() ->sortable() ->exportable(), Column::add('status', 'Status') ->callback(function (Order $order) { return OrderStatus::from($order->status)->name(); }) ->sortable() ->exportable(), Column::add('total', 'Total') ->callback(fn (Order $order) => $numberFormat->formatCurrency($order->total, 'USD')) ->searchable() ->sortable() ->exportable(), Column::add('invoiced', 'Invoiced') ->callback(fn (Order $order) => $order->invoiced ? 'Yes' : 'No') ->sortable() ->exportable(), Column::add('created_at', 'Created At') ->callback(fn (Order $order) => Carbon::parse($order->created_at)->format('F j, Y, g:i a')) ->sortable() ->exportable(), Column::add('updated_at', 'Updated At') ->callback(fn (Order $order) => Carbon::parse($order->updated_at)->format('F j, Y, g:i a')) ->sortable() ->exportable() ->visible(false), ]; } }
列过滤器。
过滤器允许您过滤网格中显示的数据。
可以使用
addDataAttribute方法向过滤器添加数据属性。
use TomShaw\ElectricGrid\{Component, Column, Filter}; use App\Enums\OrderStatus; class OrdersTable extends Component { public function filters(): array { return [ Filter::number('id')->placeholders('Min', 'Max'), Filter::text('name')->placeholder('Customer'), Filter::select('status')->options(OrderStatus::toOptions()), Filter::number('total')->placeholders('Min Total', 'Max Total'), Filter::boolean('invoiced')->labels('Yes', 'No'), Filter::datepicker('created_at')->addDataAttribute('format', 'H:i'), Filter::datetimepicker('updated_at'), ]; } }
Filter::number('id')
这为'id'字段创建了一个数字过滤器。
placeholders('Min', 'Max'):设置最小和最大输入字段的占位符文本。
Filter::text('name')
这为'名称'字段创建了一个文本过滤器。
placeholder('客户'):设置输入字段的占位符文本。
Filter::select('status')
这为'status'字段创建了一个选择过滤器。
options(OrderStatus::toOptions()):使用OrderStatus类的toOptions方法设置选择字段的选项。
Filter::number('total')
这为'total'字段创建了一个数字过滤器。
placeholders('Min Total', 'Max Total'):设置最小和最大输入字段的占位符文本。
Filter::boolean('invoiced')
这为'invoiced'字段创建了一个布尔过滤器。
labels('Yes', 'No'):设置true和false值的标签。
Filter::datepicker('created_at')
这为'created_at'字段创建了一个日期选择器过滤器。
addDataAttribute('format', 'H:i'):设置日期选择器的数据属性。在这种情况下,它用于设置日期格式。
Filter::datetimepicker('updated_at')
这为'updated_at'字段创建了一个日期时间选择器过滤器。日期时间选择器使用用户的本地日期和时间格式。
过滤器列类型
应使用适当的数据库列类型使用过滤器。
text:VARCHAR或TEXTnumber:整数、浮点数、双精度浮点数或十进制select:任何类型,只要值是一组选项multiselect:任何类型,只要值是一组选项boolean:TINYINT(1),其中0为假,1为真timepicker:时间datepicker:日期datetimepicker:日期时间
批量操作。
批量或批量操作允许同时执行对多行数据的操作。
您可以使用
group和groupBy辅助方法将操作组合在一起。
use TomShaw\ElectricGrid\{Component, Column, Filter, Action}; use App\Enums\OrderStatus; class OrdersTable extends Component { public bool $showCheckbox = true; public function actions(): array { return [ Action::make('approved', 'Mark Approved') ->group('Status Options') ->callback(fn ($status, $selected) => $this->updateStatusHandler($status, $selected)), Action::make('completed', 'Mark Completed') ->group('Status Options') ->callback(fn ($status, $selected) => $this->updateStatusHandler($status, $selected)), Action::make('cancelled', 'Mark Canceled') ->group('Status Options') ->callback(fn ($status, $selected) => $this->updateStatusHandler($status, $selected)), ]; } public function updateStatusHandler(string $status, array $selectedItems) { $status = OrderStatus::fromName($status); foreach ($selectedItems as $index => $orderId) { event(new OrderStatusEvent($status->value, $orderId)); } } }
表格导出。
表格可以导出为以下格式:xlsx、csv、pdf、html。导出类型由基于扩展名的格式确定决定。如果您提供SalesOrders.xlsx的文件名,将生成Excel电子表格。
use TomShaw\ElectricGrid\{Component, Column, Filter, Action}; use App\Enums\OrderStatus; class OrdersTable extends Component { public bool $showCheckbox = true; public function actions(): array { return [ Action::groupBy('Export Options', function () { return [ Action::make('csv', 'Export CSV')->export('SalesOrders.csv'), Action::make('pdf', 'Export PDF')->export('SalesOrders.pdf'), Action::make('html', 'Export HTML')->export('SalesOrders.html'), Action::make('xlsx', 'Export XLSX')->export('SalesOrders.xlsx'), ]; }), ]; } }
自定义Excel导出
Excel导出可以使用特定的样式和列宽进行自定义。
使用styles和columnWidths方法将自定义样式和列宽应用到Excel文件。
styles方法返回一个单元格样式的数组。数组的键是单元格引用,值是样式定义的数组。例如,'1' => ['font' => ['bold' => true]]将粗体字体样式应用到第1行中的所有单元格,而'B2' => ['font' => ['italic' => true]]将斜体字体样式应用到第2行的B列单元格。
columnWidths方法返回一个列宽的数组。数组的键是列字母,值是列的宽度。例如,'A' => 20将A列的宽度设置为20。
以下是如何为Excel导出定义自定义样式和列宽的示例
public function actions(): array { return [ Action::groupBy('Export Options', function () { return [ Action::make('xlsx', 'Export XLSX') ->export('SalesOrders.xlsx') ->styles($this->exportStyles) ->columnWidths($this->exportWidths), ]; }), ]; } public function getExportStylesProperty() { return [ '1' => ['font' => ['bold' => true]], 'B2' => ['font' => ['italic' => true]], 'C' => ['font' => ['size' => 16]], ]; } public function getExportWidthsProperty() { return [ 'A' => 20, 'B' => 30, ]; }
搜索输入
通过添加以下属性并填充您希望搜索的列名来启用。
public array $searchTermColumns = ['title', 'description'];
字母搜索
通过添加以下属性并填充您希望搜索的列名来启用。
public array $letterSearchColumns = ['name'];
要求
该包与Laravel 11+和PHP 8.2和8.3兼容。
测试
composer test
变更日志
有关最近更改的更多信息,请参阅变更日志。
贡献
有关详细信息,请参阅贡献。
许可证
MIT许可证(MIT)。有关更多信息,请参阅许可证文件。