bluefyn-international/report-engine

该包已被弃用且不再维护。作者建议使用 always-open/report-engine 包。

Laravel 通用报告引擎


README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

Laravel 通用报告引擎

安装

您可以通过 composer 安装此包。

composer require always-open/report-engine

使用方法

创建报告

创建一个扩展 ReportBase 的报告。在这个类中,您将定义查询以获取数据以及要输出的列。

<?php

namespace App\Reports\User;

use App\Models\User;
use AlwaysOpen\ReportEngine\BaseFeatures\Data\Types\Text;
use AlwaysOpen\ReportEngine\ReportBase;
use Illuminate\Database\Query\Builder;

class UserReport extends ReportBase
{
    protected $autoloadInitialData = true;

    /**
     * @return string
     */
    public function title(): string
    {
        return 'User Maintenance';
    }

    /**
     * @return string
     */
    public function description(): string
    {
        return 'List of all users within the system';
    }

    /**
     * @return Builder
     */
    public function baseQuery(): Builder
    {
        return User::toBase()
            ->select([
                'id',
                'email',
                'name',
            ]);
    }

    /**
     * @return array
     */
    public function availableColumns(): array
    {
        return [
            'name' => [
                'label'      => 'Name',
                'filterable' => true,
                'type'       => new Text(),
            ],
            'email' => [
                'label'      => 'Email',
                'filterable' => true,
                'type'       => new Text(),
            ],
        ];
    }
}

创建控制器

创建一个用于输出报告的控制器。

<?php

namespace App\Http\Controllers;

use App\Reports\User\UserReport;

class UserController extends Controller
{
    /**
     * @return UserReport
     */
    public function index() : UserReport
    {
        return app(UserReport::class);
    }
}

创建路由

创建路由时,请确保包含 multiformat,这将处理诸如 .sql.json 端点调用。

<?php

use App\Http\Controllers\UserController;

Route::get('users', [UserController::class, 'index'])
    ->multiformat();

路由

Multiformat 向 URL 添加处理多个格式的功能,以下是在上述示例的基础上构建的输出。

这将输出一个包含表格的 HTML 页面,并通过 AJAX 请求获取所需数据。

{{ base_url }}/users

这将输出数据的 JSON 有效负载。

{{ base_url }}/users.json

这将输出完整的 SQL 查询,对调试很有用。

{{ base_url }}/users.sql

这将返回查询的 explain 命令的输出,对调试很有用。

{{ base_url }}/users.explain

过滤器

以下是默认类型的可能过滤器。要构建一个过滤器,请遵循以下格式

let filterParams = new URLSearchParams();
let filterName = 'name'
let action = 'equals'
let value = 'bob'
filterParams.append('filters['+filterName+']['+action+']', value)

日期时间

  • 不等于
  • 等于
  • 大于
  • 大于等于
  • 小于
  • 小于等于

小数

  • 不等于
  • 等于
  • 大于
  • 大于等于
  • 小于
  • 小于等于

美元

  • 不等于
  • 等于
  • 大于
  • 大于等于
  • 小于
  • 小于等于

枚举

  • 等于

HTML

  • 包含
  • 不包含

整数

  • 不等于
  • 等于
  • 大于
  • 大于等于
  • 小于
  • 小于等于

可空小数

  • 不等于
  • 等于
  • 大于
  • 大于等于
  • 为空
  • 不为空
  • 小于
  • 小于等于

可空整数

  • 不等于
  • 等于
  • 大于
  • 大于等于
  • 为空
  • 不为空
  • 小于
  • 小于等于

数字

  • 不等于
  • 等于
  • 大于
  • 大于等于
  • 小于
  • 小于等于

数字HTML

  • 不等于
  • 等于
  • 大于
  • 大于等于
  • 小于
  • 小于等于

百分比

  • 不等于
  • 等于
  • 大于
  • 大于等于
  • 小于
  • 小于等于

文本

  • 包含
  • 不包含
  • 不等于
  • 等于

URL

  • 包含
  • 不包含

是/否

  • 为真
  • 为假

是/否简短

  • 为真
  • 为假

测试

composer test

更新日志

请参阅更新日志了解最近有哪些变化。

贡献

请参阅贡献指南了解详细信息。

安全漏洞

请查阅我们的安全策略了解如何报告安全漏洞。

鸣谢

许可证

MIT许可证(MIT)。请参阅许可证文件获取更多信息。