nova-bi/nova-dashboard-manager

创建和管理动态仪表板


README

Nova-Dashboard 的仪表板管理器 Nova-Dashboard 允许您在 Nova-App 中配置仪表板

Latest Stable Version Total Downloads Latest Unstable Version License

Laravel Nova Dashboard In Action

安装

您可以通过 composer 安装此包

composer require nova-bi/nova-dashboard-manager

如果您想指定自己的表名,您需要在运行迁移之前编辑配置

nova-dashboard.table_name
nova-dashboard-manager.tables

推荐:发布配置文件以调整 Nova-Dashboard 的模型和表名

php artisan vendor:publish --provider="DigitalCreative\NovaDashboard\ToolServiceProvider" --tag="config"

推荐:发布配置文件以调整 Nova-Dashboard-Manager 的所有配置

php artisan vendor:publish --provider="NovaBi\NovaDashboardManager\DashboardManagerServiceProvider" --tag="config"

可选:发布迁移

php artisan vendor:publish --provider="NovaBi\NovaDashboardManager\DashboardManagerServiceProvider" --tag="migrations"    

运行迁移

php artisan migrate

使用方法

打开 NovaServiceProvider.php 添加类

use DigitalCreative\NovaDashboard\NovaDashboard;
use NovaBi\NovaDashboardManager\DashboardManager;

增强 tools() 方法,如下所示

public function tools()
{
    return [
        new DashboardManager(), // must be loaded first !!!
        new NovaDashboard(),
    ];
}

从游乐场开始

此包包含可工作的游乐场示例,您可以测试功能,并将代码作为您自己的实现的示例。

默认情况下,游乐场设置已配置,这将为您提供以下基本指标

  • 用户
  • 看板
  • 小部件
  • 事件
  • 事件类型

以下可视化目前可用

  • ChartJS 线图
  • ChartJS 柱状图

以下过滤器可用

  • 日期范围
  • 事件类型

转到仪表板管理器工具菜单并设置一些演示小部件、过滤器仪表板。

配置仪表板后,您需要重新加载 Nova 以显示新的菜单项以访问仪表板

开发和注册您自己的指标、过滤器可视化

指标计算与可视化的分离

指标类是所有指标计算的工具。计算适用于支持的可视化,例如,在 用户 指标中,您可以计算例如总用户数或为趋势可视化提供趋势数据。

可配置和可重用

使用自定义配置,您可以使您的板、指标、过滤器可视化可重用 - 查看以下示例 nova-bi/nova-dashboard-manager/src/Models/Datametricables/users.php 如何使用相同的指标显示总用户数和已验证电子邮件的用户。

代码结构

按照推荐的结构构建您自己的指标、过滤器可视化。请查看此包的源代码 nova-bi/nova-dashboard-manager/src 以获取详细信息

/myDashboard
    /Calculations               All calculations - could be done in metrics as well
    /Models
        /Datafilterables        Models representing filters
        /Datametricables        Models representing metrics
        /Datavisualables        Models representing visuals
            /Visuals            Implementation of visuals, 
                                    must extend `DigitalCreative\ValueWidget\Widgets` 
                                    must use Trait \NovaBi\NovaDashboardManager\Models\Datavisualables\Visuals\Visuable
    /Nova
        /Datafilterables        Resources for filter models
        /Datametricables        Resources for metric models
        /Datavisualables        Resources for visual models

在配置中注册您的源

nova-dashboard-manager.datafilterables
nova-dashboard-manager.datametricables
nova-dashboard-manager.datavisualables

现在您可以在仪表板配置中创建新的过滤器指标,并将它们附加到仪表板上。

计算调试

使用 Trait \NovaBi\NovaDashboardManager\Calculations\Calculatable,您可以使用 debugQuery() 方法查看原始 SQL

dd($calculation->debugQuery($calculationCurrentValue->query()));

直接访问仪表板

非常棒的 可折叠资源管理器 包允许您自定义菜单结构。

nova-dashboard-manager.showToolMenu 配置为 false 以隐藏工具菜单

以下代码允许通过菜单直接访问仪表板和配置(见下文 - 您知道如何解决此问题吗?)

    // CollapsibleResourceManager
    use DigitalCreative\CollapsibleResourceManager\CollapsibleResourceManager;
    use DigitalCreative\CollapsibleResourceManager\Resources\Group;
    use DigitalCreative\CollapsibleResourceManager\Resources\NovaResource;
    use DigitalCreative\CollapsibleResourceManager\Resources\RawResource;
    use DigitalCreative\CollapsibleResourceManager\Resources\TopLevelResource;
    
    // Dashboard
    use DigitalCreative\NovaDashboard\NovaDashboard;
    use NovaBi\NovaDashboardManager\DashboardManager;
    use NovaBi\NovaDashboardManager\DashboardResource;
    use NovaBi\NovaDashboardManager\Nova\DashboardConfiguration;
    use NovaBi\NovaDashboardManager\Nova\Datafilter;
    use NovaBi\NovaDashboardManager\Nova\Datawidget;

    /**
     * Get the tools that should be listed in the Nova sidebar.
     *
     * @return array
     */
    public function tools()
    {
        $analyticsDataboards = [];
        $dashboards = (new DashboardManager)->dashboards();

        foreach ($dashboards as $dboard) {
            $analyticsDataboards[] = DashboardResource::make($dboard)->label($dboard->resourceLabel())->icon(faIcon('cog'));
        }

        return [
            new DashboardManager(), // must be loaded first !!!
            new NovaDashboard(), // must be loaded as well

            new CollapsibleResourceManager([
                'navigation' => [
                    TopLevelResource::make([
                        'label' => 'Databoards',
                        'icon' => '<svg fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewBox="0 0 24 24" stroke="currentColor" class="sidebar-icon"><path d="M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z"></path></svg>',
                        'resources' => $analyticsDataboards
                    ]),
                    TopLevelResource::make([
                        'label' => 'Admin',
                        'icon' => '<svg fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewBox="0 0 24 24" stroke="currentColor"><path d="M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z"></path><path d="M15 12a3 3 0 11-6 0 3 3 0 016 0z"></path></svg>',
                        'resources' => [
                            \App\Nova\User::class,
                            Group::make([
                                    'label' => 'Dashboard Configuration',
                                    'expanded' => false,
                                    'icon' => '',
                                    'resources' =>
                                        [
                                            NovaResource::make( DashboardConfiguration::class)->index(),
                                            NovaResource::make( Datafilter::class)->index(),
                                            NovaResource::make( Datawidget::class)->index(),
                                        ]
                                ]
                            )
                        ]
                    ]),
                ]
            ])
        ];
    }

已知问题

  • 同一路由的页面在直接在视图之间导航时不会更新,例如使用 可折叠资源管理器。因此,在切换仪表板时,它们不会更新 - 我们希望很快解决这个问题。

贡献

如果您想贡献,请分叉项目并提交 PR。

查看https://github.com/Nova-BI/nova-databoards/issues以获取开放的开发任务和问题。

致谢说明

本软件高度依赖以下从laravel和nova的众多优秀软件包中精选的软件包。

许可证

本软件根据MIT许可证(MIT)发布。