八十九 / filament-reports
您的filament应用中的优雅报告
Requires
- php: ^8.1
- filament/filament: ^3.0
- illuminate/contracts: ^10.0|^11.0
- spatie/laravel-package-tools: ^1.15.0
Requires (Dev)
- nunomaduro/collision: ^7.9
- orchestra/testbench: ^8.0
- pestphp/pest: ^2.0
- pestphp/pest-plugin-arch: ^2.0
- pestphp/pest-plugin-laravel: ^2.0
README
🛠️ 加入旅程
嗨,我是八十九。我创建了报告插件来解决我作为开发人员遇到的真实问题。您的赞助将使我能够投入更多时间来增强这些工具并帮助更多人。成为赞助者 并与我一起在开发社区中产生积极影响。
安装
然后您可以通过composer安装此包
composer require eightynine/filament-reports
您可以使用以下方式发布配置
php artisan vendor:publish --provider="EightyNine\Reports\ReportsServiceProvider" --tag="reports-config"
用法
注册插件
将插件添加到您的面板服务提供者,这是用于页面发现和将报告添加到导航
use EightyNine\Reports\ReportsPlugin; public function panel(Panel $panel): Panel { return $panel ->default() ->id('demo') ->path('demo') ... ->plugins([ ReportsPlugin::make() ]); }
创建您的第一个报告
该包包含一个报告创建命令,这将创建在 app/Filament/Reports
目录中的报告。
php artisan make:filament-report UsersReport
该命令将创建一个具有以下结构的报告类
namespace App\Filament\Reports; use EightyNine\Reports\Report; use EightyNine\Reports\Components\Body; use EightyNine\Reports\Components\Footer; use EightyNine\Reports\Components\Header; use Filament\Forms\Form; class UserReport extends Report { public ?string $heading = "Report"; // public ?string $subHeading = "A report"; public function header(Header $header): Header { return $header ->schema([ // ... ]); } public function body(Body $body): Body { return $body ->schema([ // ... ]); } public function footer(Footer $footer): Footer { return $footer ->schema([ // ... ]); } public function filterForm(Form $form): Form { return $form ->schema([ // ... ]); } }
报告有以下部分
- 页眉
- 主体
- 页脚
- 筛选表单
页眉
页眉是报告的最顶部部分,可以用来显示标题、副标题、图片和描述。如果该部分留空,则不会显示任何内容,但如果您有针对报告的定制页眉,则可以在此定义它。
页眉区域具有可用于排列项目的布局。布局是 HeaderColumn
和 HeaderRow
。
HeaderColumn
是垂直布局,它将项目堆叠在一起。HeaderColumn
内的项目可以垂直和水平对齐,具体取决于您希望如何对齐项目。HeaderRow
是水平布局,它将项目并排放置。HeaderRow
内的项目可以垂直和水平对齐,具体取决于您希望如何对齐项目。
HeaderColumn
和 HeaderRow
可以嵌套在对方内部以创建更复杂的布局。
除了布局之外,页眉还具有用于显示数据的组件。组件有
Text
- 这用于显示文本,它可以用来显示标题或副标题,或者使用您可能喜欢的任何样式。Image
- 这用于显示图片,它可以用来显示徽标或任何您想要显示的图片。
以下是一个页眉部分的示例
public function header(Header $header): Header { return $header ->schema([ Header\Layout\HeaderRow::make() ->schema([ Header\Layout\HeaderColumn::make() ->schema([ Text::make("User registration report") ->title() ->primary(), Text::make("A user registration report") ->subtitle(), ]), Header\Layout\HeaderColumn::make() ->schema([ Image::make($imagePath), ]) ->alignRight(), ]), ]); }
主体
主体是报告的主要部分,可以用来显示表格、图表或其他数据。如果该部分留空,则不会显示任何内容。
主体区域具有可用于排列项目的布局。布局是 BodyColumn
和 BodyRow
。它们的行为与 HeaderColumn
和 HeaderRow
相同,但用于主体部分。但它们专门用于主体部分,因为它们具有不同的样式。
除了布局之外,主体还具有用于显示数据的组件。组件有
Table
- 这用于显示表格,它可以用来显示数据列表。VerticalSpace
- 这用于在项目之间添加垂直间距。
文本(Text)和图像(Image)组件也可以在主体部分中使用。
以下是主体部分的示例
public function body(Body $body): Body { return $body ->schema([ Body\Layout\BodyColumn::make() ->schema([ Body\Table::make() ->columns([ EightyNine\Reports\Components\Body\TextColumn::make("name"), EightyNine\Reports\Components\Body\TextColumn::make("age") ->numeric() ]) ->data( fn(?array $filters) => collect([ [ "name" => "One", "age" => 5 ], [ "name" => "Two", "age" => 5 ], [ "name" => "Three", "age" => 5 ], [ "name" => "Four", "age" => 5 ], ]) ), VerticalSpace::make(), Body\Table::make() ->data( fn(?array $filters) => $this->verificationSummary($filters) ), ]), ]); }
页脚
页脚是报告的底部部分,可以用来显示标题、副标题、图像和描述。它具有与页眉部分相同的行为的布局和组件。页脚部分有文本(Text)和图像(Image)组件,以及页脚列(FooterColumn)和页脚行(FooterRow)布局。
public function footer(Footer $footer): Footer { return $footer ->schema([ Footer\Layout\FooterRow::make() ->schema([ Footer\Layout\FooterColumn::make() ->schema([ Text::make("Footer title") ->title() ->primary(), Text::make("Footer subtitle") ->subtitle(), ]), Footer\Layout\FooterColumn::make() ->schema([ Text::make("Generated on: " . now()->format('Y-m-d H:i:s')), ]) ->alignRight(), ]), ]); }
筛选表单
过滤器表单用于过滤报告中显示的数据。过滤器表单使用 Filament 表单构建器,因此您可以使用 Filament 中可用的任何表单组件。表单显示在报告的侧面,过滤器数据将在所有表的 data()
回调中可用。这将在下面的章节中进一步解释。
过滤器表单的示例
public function filterForm(Form $form): Form { return $form ->schema([ Input::make('search') ->placeholder('Search') ->autofocus() ->iconLeft('heroicon-o-search'), Select::make('status') ->placeholder('Status') ->options([ 'active' => 'Active', 'inactive' => 'Inactive', ]), ]); }
分组行
您可以将列分组到多行中,以显示相关数据。
请注意,按照您希望分组行的列进行排序很重要,否则将出现多个组
use EightyNine\Reports\Components\Body\TextColumn; Body\Table::make() ->columns([ TextColumn::make("location") ->groupRows(), TextColumn::make("name"), TextColumn::make("age") ->numeric() ]) ->data( fn(?array $filters) => collect([ ["location"=>"New York", "name" => "One", "age" => 5 ], ["location"=>"New York", "name" => "Two", "age" => 5 ], ["location"=>"Florida", "name" => "Three", "age" => 5 ], ["location"=>"New York", "name" => "Four", "age" => 5 ], ])->orderBy('location') ),
变更日志
请参阅变更日志,了解最近有哪些更改。
贡献
请参阅贡献指南以获取详细信息。
安全漏洞
请审查我们的安全策略以了解如何报告安全漏洞。
鸣谢
许可证
MIT 许可证(MIT)。有关更多信息,请参阅许可证文件。