2025-06-06 18:11:22 +08:00
|
|
|
<?php
|
|
|
|
|
2025-07-01 10:36:00 +08:00
|
|
|
namespace App\Livewire\Tables;
|
2025-06-06 18:11:22 +08:00
|
|
|
|
2025-08-20 15:26:05 +08:00
|
|
|
use App\Models\Branch;
|
2025-06-06 18:11:22 +08:00
|
|
|
use App\Models\RoomStatusLog;
|
2025-08-20 15:26:05 +08:00
|
|
|
use App\Enums\RoomType;
|
2025-06-06 18:11:22 +08:00
|
|
|
use Illuminate\Support\Carbon;
|
|
|
|
use Illuminate\Database\Eloquent\Builder;
|
|
|
|
use PowerComponents\LivewirePowerGrid\Button;
|
|
|
|
use PowerComponents\LivewirePowerGrid\Column;
|
|
|
|
use PowerComponents\LivewirePowerGrid\Facades\Filter;
|
|
|
|
use PowerComponents\LivewirePowerGrid\Facades\PowerGrid;
|
|
|
|
use PowerComponents\LivewirePowerGrid\PowerGridFields;
|
|
|
|
use PowerComponents\LivewirePowerGrid\PowerGridComponent;
|
|
|
|
|
|
|
|
final class RoomStatusLogTable extends PowerGridComponent
|
|
|
|
{
|
|
|
|
public string $tableName = 'room-status-log-table';
|
|
|
|
|
|
|
|
public bool $showFilters = false;
|
|
|
|
public function boot(): void
|
|
|
|
{
|
|
|
|
config(['livewire-powergrid.filter' => 'outside']);
|
|
|
|
}
|
|
|
|
|
|
|
|
public function setUp(): array
|
|
|
|
{
|
|
|
|
$actions = [];
|
|
|
|
$header = PowerGrid::header()
|
|
|
|
->withoutLoading()
|
|
|
|
->showToggleColumns();
|
2025-08-03 22:00:08 +08:00
|
|
|
$header->includeViewOnTop('livewire.headers.room-status-log');
|
2025-06-06 18:11:22 +08:00
|
|
|
|
|
|
|
$actions[]=$header;
|
|
|
|
$actions[]=PowerGrid::footer()->showPerPage()->showRecordCount();
|
|
|
|
return $actions;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function datasource(): Builder
|
|
|
|
{
|
2025-08-20 15:26:05 +08:00
|
|
|
return RoomStatusLog::with(['room', 'branch'])->latest();
|
2025-06-06 18:11:22 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
public function relationSearch(): array
|
|
|
|
{
|
2025-08-20 15:26:05 +08:00
|
|
|
return [
|
|
|
|
'branch' => ['name'],
|
|
|
|
'room' => ['name'],
|
|
|
|
'user' => ['name'],
|
|
|
|
];
|
2025-06-06 18:11:22 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
public function fields(): PowerGridFields
|
|
|
|
{
|
|
|
|
return PowerGrid::fields()
|
|
|
|
->add('id')
|
2025-08-20 15:26:05 +08:00
|
|
|
->add('branch_name', function (RoomStatusLog $model) {
|
|
|
|
return $model->branch?->name;
|
|
|
|
})
|
|
|
|
->add('room_type', function (RoomStatusLog $model) {
|
|
|
|
return $model->room?->type->labelPowergridFilter();
|
|
|
|
})
|
2025-06-06 18:11:22 +08:00
|
|
|
->add('room_name', function (RoomStatusLog $model) {
|
2025-08-20 15:26:05 +08:00
|
|
|
return $model->room?->name;
|
2025-06-06 18:11:22 +08:00
|
|
|
})
|
|
|
|
->add('user_name', function (RoomStatusLog $model){
|
|
|
|
return $model->user?->name;
|
|
|
|
})
|
2025-08-20 15:26:05 +08:00
|
|
|
->add('is_online_img', fn ($model) =>
|
|
|
|
[
|
|
|
|
$model->is_online ? 'check-circle' : 'x-circle' => [
|
|
|
|
'text-color' => $model->is_online ? 'text-green-600' : 'text-red-600',
|
|
|
|
],
|
|
|
|
])
|
2025-06-06 18:11:22 +08:00
|
|
|
->add('status_str',function (RoomStatusLog $model){
|
|
|
|
return $model->status->labelPowergridFilter();
|
|
|
|
})
|
2025-08-20 15:26:05 +08:00
|
|
|
->add('started_at')
|
|
|
|
->add('ended_at')
|
2025-06-06 18:11:22 +08:00
|
|
|
->add('message')
|
2025-08-20 15:26:05 +08:00
|
|
|
->add('source')
|
2025-06-06 18:11:22 +08:00
|
|
|
->add('created_at');
|
|
|
|
}
|
|
|
|
|
|
|
|
public function columns(): array
|
|
|
|
{
|
|
|
|
$column=[];
|
2025-06-11 10:26:40 +08:00
|
|
|
$column[]=Column::make(__('room-status-log.id'), 'id');
|
2025-08-20 15:26:05 +08:00
|
|
|
$column[]=Column::make(__('room-status-log.branch'), 'branch_name');
|
|
|
|
$column[]=Column::make(__('room-status-log.room_type'), 'room_type');
|
|
|
|
$column[]=Column::make(__('room-status-log.room_name'), 'room_name');
|
2025-06-11 10:26:40 +08:00
|
|
|
$column[]=Column::make(__('room-status-log.user'), 'user_name');
|
2025-08-20 15:26:05 +08:00
|
|
|
$column[]=Column::make(__('room-status-log.is_online'), 'is_online_img')->template();
|
2025-06-11 10:26:40 +08:00
|
|
|
$column[]=Column::make(__('room-status-log.status'), 'status_str');
|
2025-08-20 15:26:05 +08:00
|
|
|
$column[]=Column::make(__('room-status-log.started_at'), 'started_at');
|
|
|
|
$column[]=Column::make(__('room-status-log.ended_at'), 'ended_at');
|
2025-06-11 10:26:40 +08:00
|
|
|
$column[]=Column::make(__('room-status-log.message'), 'message');
|
2025-08-20 15:26:05 +08:00
|
|
|
$column[]=Column::make(__('room-status-log.source'), 'source');
|
2025-06-11 10:26:40 +08:00
|
|
|
$column[]=Column::make(__('room-status-log.created_at'), 'created_at');
|
2025-06-06 18:11:22 +08:00
|
|
|
return $column;
|
|
|
|
}
|
2025-08-20 15:26:05 +08:00
|
|
|
public function rowTemplates(): array
|
|
|
|
{
|
|
|
|
return [
|
|
|
|
'check-circle' => '<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-6 {{ text-color }}">
|
|
|
|
<path stroke-linecap="round" stroke-linejoin="round" d="M9 12.75 11.25 15 15 9.75M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z" />
|
|
|
|
</svg>',
|
|
|
|
'x-circle' => '<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-6 {{ text-color }}">
|
|
|
|
<path stroke-linecap="round" stroke-linejoin="round" d="m9.75 9.75 4.5 4.5m0-4.5-4.5 4.5M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z" />
|
|
|
|
</svg>',
|
|
|
|
];
|
|
|
|
}
|
2025-06-06 18:11:22 +08:00
|
|
|
|
|
|
|
public function filters(): array
|
|
|
|
{
|
2025-08-20 15:26:05 +08:00
|
|
|
$branches = Branch::query()->orderBy('name')->get()->map(fn($branch) => (object)[
|
|
|
|
'value' => $branch->id,
|
|
|
|
'label' => $branch->name,
|
|
|
|
]);
|
|
|
|
//dd($branches);
|
2025-06-06 18:11:22 +08:00
|
|
|
return [
|
2025-08-20 15:26:05 +08:00
|
|
|
Filter::enumSelect('branch_name','branch_id')
|
|
|
|
->datasource($branches)
|
|
|
|
->optionLabel('label'),
|
|
|
|
Filter::inputText('room_type')
|
|
|
|
->placeholder('輸入"pc","svr"')
|
|
|
|
->filterRelation('room','type'),
|
|
|
|
Filter::inputText('room_name')
|
|
|
|
->placeholder('輸入包廂名稱')
|
|
|
|
->filterRelation('room','name')
|
2025-06-06 18:11:22 +08:00
|
|
|
];
|
|
|
|
}
|
|
|
|
}
|