始终开启/报告引擎

Laravel 通用报告引擎

资助包维护!
always-open


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 添加处理多种格式的功能,以下是基于上述示例的输出。

这将输出包含表格和执行 AJAX 请求获取所需数据的 HTML 页面。

{{ 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

变更日志

有关最近更改的更多信息,请参阅 CHANGELOG

贡献

有关详细信息,请参阅 CONTRIBUTING

安全漏洞

有关如何报告安全漏洞的更多信息,请参阅 我们的安全策略

鸣谢

许可协议

MIT 许可协议 (MIT)。有关更多信息,请参阅 许可文件