八十九/filament-reports

您的filament应用中的优雅报告

3.0.15 2024-09-09 06:50 UTC

This package is auto-updated.

Last update: 2024-09-09 06:51:39 UTC


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([
                // ...
            ]);
    }
}

报告有以下部分

  • 页眉
  • 主体
  • 页脚
  • 筛选表单

页眉

页眉是报告的最顶部部分,可以用来显示标题、副标题、图片和描述。如果该部分留空,则不会显示任何内容,但如果您有针对报告的定制页眉,则可以在此定义它。

页眉区域具有可用于排列项目的布局。布局是 HeaderColumnHeaderRow

  • HeaderColumn 是垂直布局,它将项目堆叠在一起。HeaderColumn 内的项目可以垂直和水平对齐,具体取决于您希望如何对齐项目。
  • HeaderRow 是水平布局,它将项目并排放置。HeaderRow 内的项目可以垂直和水平对齐,具体取决于您希望如何对齐项目。

HeaderColumnHeaderRow 可以嵌套在对方内部以创建更复杂的布局。

除了布局之外,页眉还具有用于显示数据的组件。组件有

  • 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(),
                ]),
            ]);
    }

主体

主体是报告的主要部分,可以用来显示表格、图表或其他数据。如果该部分留空,则不会显示任何内容。

主体区域具有可用于排列项目的布局。布局是 BodyColumnBodyRow。它们的行为与 HeaderColumnHeaderRow 相同,但用于主体部分。但它们专门用于主体部分,因为它们具有不同的样式。

除了布局之外,主体还具有用于显示数据的组件。组件有

  • 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)。有关更多信息,请参阅许可证文件