Поддержка
Ресурсы

Информационные панели

Главная страница Frame с карточками, метриками и сводками

Дашборд — это страница, которую пользователь видит при входе в панель. Он собирается из карточек (Card): приветственные заголовки, метрики, графики, сводки по ресурсам (Overlook), кастомные блоки. Frame поддерживает несколько дашбордов; они регистрируются в FrameServiceProvider.

Создание

php artisan frame:dashboard MainDashboard

Команда создаёт app/Frame/Dashboards/MainDashboard.php на основе стаба:

app/Frame/Dashboards/MainDashboard.php
<?php

declare(strict_types=1);

namespace App\Frame\Dashboards;

use Frame\Core\Dashboards\Dashboard;
use Frame\Laravel\Http\Requests\FrameRequest;

class MainDashboard extends Dashboard
{
    public static function cards(FrameRequest $request): array
    {
        return [
            // TODO: Attach required cards.
        ];
    }

    public static function title(): string
    {
        return 'Dashboard';
    }
}

Регистрация

Дашборд нужно подцепить в FrameServiceProvider::boot():

app/Providers/FrameServiceProvider.php
use App\Frame\Dashboards\MainDashboard;
use Frame\Core\Dashboards\DashboardManager;
use Frame\Core\Dashboards\Dashboards;

public function boot(): void
{
    parent::boot();

    app(DashboardManager::class)->buildUsing(
        fn (Dashboards $dashboards) => $dashboards
            ->push(MainDashboard::class),
    );
}

Можно зарегистрировать сразу несколько — они будут доступны через селектор дашбордов в навигации.

Карточки

Карточки описываются в методе cards(). Встроенные классы:

DashboardHeading
Frame\Laravel\Cards\DashboardHeading
Крупный заголовок-разделитель внутри дашборда.
DashboardCaption
Frame\Laravel\Cards\DashboardCaption
Подпись под заголовком или пояснительный текст.
Overlook
Frame\Laravel\Cards\Overlook
Автоматическая сводка по всем ресурсам: количество записей, последние созданные. Методы includes([...]) / excludes([...]) / alphabetical() управляют составом.
Group
Frame\Laravel\Cards\Group
Контейнер для группировки метрик в один ряд с общей шапкой.
Metric
Frame\LaravelMetrics\Contracts\Metric
Любой метрический класс (ValueMetric, LineChartMetric, BarChartMetric, PieChartMetric) — см. ниже.

Пример:

app/Frame/Dashboards/MainDashboard.php
use App\Frame\Metrics\ActiveUsers;
use App\Frame\Metrics\UsersPerDay;
use App\Frame\Resources\UserResource;
use Frame\Laravel\Cards\DashboardHeading;
use Frame\Laravel\Cards\Overlook;

public static function cards(FrameRequest $request): array
{
    return [
        DashboardHeading::make('Активность'),

        ActiveUsers::make('Активные пользователи'),
        UsersPerDay::make('Регистрации по дням'),

        DashboardHeading::make('Ресурсы'),

        Overlook::make()
            ->includes([UserResource::class])
            ->alphabetical(),
    ];
}

Метрики

Метрики — это отдельные классы, каждый из которых считает одну величину или график. Создавать их через artisan пока нельзя — наследуйте нужный базовый класс и реализуйте calculate().

ValueMetric — одно число

app/Frame/Metrics/ActiveUsers.php
<?php

declare(strict_types=1);

namespace App\Frame\Metrics;

use App\Models\User;
use Frame\Laravel\Http\Requests\FrameRequest;
use Frame\LaravelMetrics\DTO\StatValue;
use Frame\LaravelMetrics\ValueMetric;

class ActiveUsers extends ValueMetric
{
    public function calculate(FrameRequest $request): StatValue
    {
        return StatValue::make(
            $this->count($request, User::query(), dateColumn: 'last_seen_at'),
        );
    }
}

Доступные хелперы внутри ValueMetric: count(), sum($column), average($column), min($column), max($column). Все принимают FrameRequest и модель/билдер, плюс опциональную колонку для фильтрации по дате.

LineChartMetric / BarChartMetric — график

app/Frame/Metrics/UsersPerDay.php
<?php

declare(strict_types=1);

namespace App\Frame\Metrics;

use App\Models\User;
use Frame\Laravel\Http\Requests\FrameRequest;
use Frame\LaravelMetrics\DTO\LineChart;
use Frame\LaravelMetrics\LineChartMetric;

class UsersPerDay extends LineChartMetric
{
    public function calculate(FrameRequest $request): LineChart
    {
        return $this->count($request, User::query(), dateColumn: 'created_at');
    }
}

PieChartMetric — распределение

Используйте PieChartMetric для показа долей по категории (например, статусы заявок). Классы возвращают PieChart DTO, сегменты которого задаются методом addSectors(['Новые' => 12, 'В работе' => 5]) (или поштучно через addDataPoint(new PieDataPoint($name, $value))).

Опции дашборда

title()
→ string
Заголовок дашборда в навигации и на странице.
caption()
→ string
Подпись/описание под заголовком.
icon()
→ ?string
Имя иконки Tabler (например tabler-home-2). Показывается в селекторе дашбордов.
name()
→ string
Slug для URL. По умолчанию — kebab-case имени класса без суффикса Dashboard.

Пример с кастомизацией:

app/Frame/Dashboards/MainDashboard.php
public static function title(): string
{
    return 'Главная';
}

public static function caption(): string
{
    return 'Сводка по активности пользователей и ресурсам';
}

public static function icon(): ?string
{
    return 'tabler-home-2';
}

Что дальше

  • Агрегации — похожий инструмент для итогов в таблицах
  • Опции ресурса (setUp()) — управление поиском, пагинацией, экспортом