From c2aaff1f305edfd54001e157770d123cd81b08dd Mon Sep 17 00:00:00 2001 From: "allen.yan" Date: Fri, 2 May 2025 10:35:58 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A7=BB=E9=99=A4=20=E5=A4=A7=E6=90=9C?= =?UTF-8?q?=E5=B0=8B=2020250502?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Livewire/Admin/BranchesTable.php | 108 +++++++++++++++++++++++ app/Livewire/Admin/RoleTable.php | 12 ++- app/Livewire/Admin/RoomsTable.php | 124 +++++++++++++++++++++++++++ app/Livewire/Admin/SongTable.php | 3 +- app/Livewire/Admin/UserTable.php | 3 +- 5 files changed, 247 insertions(+), 3 deletions(-) create mode 100644 app/Livewire/Admin/BranchesTable.php create mode 100644 app/Livewire/Admin/RoomsTable.php diff --git a/app/Livewire/Admin/BranchesTable.php b/app/Livewire/Admin/BranchesTable.php new file mode 100644 index 0000000..958bb73 --- /dev/null +++ b/app/Livewire/Admin/BranchesTable.php @@ -0,0 +1,108 @@ +showCheckBox(); + + return [ + PowerGrid::header() + ->showSearchInput(), + PowerGrid::footer() + ->showPerPage() + ->showRecordCount(), + ]; + } + + public function datasource(): Builder + { + return Branches::query(); + } + + public function relationSearch(): array + { + return []; + } + + public function fields(): PowerGridFields + { + return PowerGrid::fields() + ->add('id') + ->add('name') + ->add('external_ip') + ->add('created_at'); + } + + public function columns(): array + { + return [ + Column::make('Id', 'id'), + Column::make('Name', 'name') + ->sortable() + ->searchable(), + + Column::make('External ip', 'external_ip') + ->sortable() + ->searchable(), + + Column::make('Created at', 'created_at_formatted', 'created_at') + ->sortable(), + + Column::make('Created at', 'created_at') + ->sortable() + ->searchable(), + + Column::action('Action') + ]; + } + + public function filters(): array + { + return [ + ]; + } + + #[\Livewire\Attributes\On('edit')] + public function edit($rowId): void + { + $this->js('alert('.$rowId.')'); + } + + public function actions(Branches $row): array + { + return [ + Button::add('edit') + ->slot('Edit: '.$row->id) + ->id() + ->class('pg-btn-white dark:ring-pg-primary-600 dark:border-pg-primary-600 dark:hover:bg-pg-primary-700 dark:ring-offset-pg-primary-800 dark:text-pg-primary-300 dark:bg-pg-primary-700') + ->dispatch('edit', ['rowId' => $row->id]) + ]; + } + + /* + public function actionRules($row): array + { + return [ + // Hide button edit for ID 1 + Rule::button('edit') + ->when(fn($row) => $row->id === 1) + ->hide(), + ]; + } + */ +} diff --git a/app/Livewire/Admin/RoleTable.php b/app/Livewire/Admin/RoleTable.php index 3889b8d..5c216d3 100644 --- a/app/Livewire/Admin/RoleTable.php +++ b/app/Livewire/Admin/RoleTable.php @@ -3,6 +3,7 @@ namespace App\Livewire\Admin; use Spatie\Permission\Models\Role; +use Spatie\Permission\Models\Permission; use Illuminate\Support\Carbon; use Illuminate\Database\Eloquent\Builder; use PowerComponents\LivewirePowerGrid\Button; @@ -47,10 +48,19 @@ final class RoleTable extends PowerGridComponent public function fields(): PowerGridFields { + $allPermissions = Permission::pluck('name')->sort()->values(); return PowerGrid::fields() ->add('id') ->add('name') - ->add('permissions_list' ,fn(Role $model)=> $model->permissions->pluck('name')->implode(', ')) + ->add('permissions_list', function (Role $model) use ($allPermissions) { + $rolePermissions = $model->permissions->pluck('name')->sort()->values(); + + if ($rolePermissions->count() === $allPermissions->count() && $rolePermissions->values()->all() === $allPermissions->values()->all()) { + return 'all'; + } + + return $rolePermissions->implode(', '); + }) ->add('created_at_formatted', fn (Role $model) => Carbon::parse($model->created_at)->format('d/m/Y H:i:s')); } diff --git a/app/Livewire/Admin/RoomsTable.php b/app/Livewire/Admin/RoomsTable.php new file mode 100644 index 0000000..852ddcc --- /dev/null +++ b/app/Livewire/Admin/RoomsTable.php @@ -0,0 +1,124 @@ +showCheckBox(); + + return [ + PowerGrid::header() + ->showSearchInput(), + PowerGrid::footer() + ->showPerPage() + ->showRecordCount(), + ]; + } + + public function datasource(): Builder + { + return Rooms::query(); + } + + public function relationSearch(): array + { + return []; + } + + public function fields(): PowerGridFields + { + return PowerGrid::fields() + ->add('id') + ->add('branch_id') + ->add('name') + ->add('internal_ip') + ->add('port') + ->add('status') + ->add('started_at_formatted', fn (Rooms $model) => Carbon::parse($model->started_at)->format('d/m/Y H:i:s')) + ->add('ended_at_formatted', fn (Rooms $model) => Carbon::parse($model->ended_at)->format('d/m/Y H:i:s')) + ->add('created_at_formatted', fn (Rooms $model) => Carbon::parse($model->created_at)->format('d/m/Y H:i:s')); + } + + public function columns(): array + { + return [ + Column::make('Id', 'id'), + Column::make('Branch id', 'branch_id'), + Column::make('Name', 'name') + ->sortable() + ->searchable(), + + Column::make('Internal ip', 'internal_ip') + ->sortable() + ->searchable(), + + Column::make('Port', 'port'), + Column::make('Status', 'status') + ->sortable() + ->searchable(), + + Column::make('Started at', 'started_at_formatted', 'started_at') + ->sortable(), + + Column::make('Ended at', 'ended_at_formatted', 'ended_at') + ->sortable(), + + Column::make('Created at', 'created_at_formatted', 'created_at') + ->sortable(), + + Column::action('Action') + ]; + } + + public function filters(): array + { + return [ + Filter::datetimepicker('started_at'), + Filter::datetimepicker('ended_at'), + Filter::datetimepicker('created_at'), + ]; + } + + #[\Livewire\Attributes\On('edit')] + public function edit($rowId): void + { + $this->js('alert('.$rowId.')'); + } + + public function actions(Rooms $row): array + { + return [ + Button::add('edit') + ->slot('Edit: '.$row->id) + ->id() + ->class('pg-btn-white dark:ring-pg-primary-600 dark:border-pg-primary-600 dark:hover:bg-pg-primary-700 dark:ring-offset-pg-primary-800 dark:text-pg-primary-300 dark:bg-pg-primary-700') + ->dispatch('edit', ['rowId' => $row->id]) + ]; + } + + /* + public function actionRules($row): array + { + return [ + // Hide button edit for ID 1 + Rule::button('edit') + ->when(fn($row) => $row->id === 1) + ->hide(), + ]; + } + */ +} diff --git a/app/Livewire/Admin/SongTable.php b/app/Livewire/Admin/SongTable.php index 12105e9..38e4d2d 100644 --- a/app/Livewire/Admin/SongTable.php +++ b/app/Livewire/Admin/SongTable.php @@ -43,7 +43,8 @@ final class SongTable extends PowerGridComponent PowerGrid::header() ->showSoftDeletes() ->showToggleColumns() - ->showSearchInput(), + //->showSearchInput() + , PowerGrid::footer() ->showPerPage() ->showRecordCount(), diff --git a/app/Livewire/Admin/UserTable.php b/app/Livewire/Admin/UserTable.php index cc65c2e..207a1a4 100644 --- a/app/Livewire/Admin/UserTable.php +++ b/app/Livewire/Admin/UserTable.php @@ -42,7 +42,8 @@ final class UserTable extends PowerGridComponent PowerGrid::header() //->showSoftDeletes() ->showToggleColumns() - ->showSearchInput(), + //->showSearchInput() + , PowerGrid::footer()->showPerPage()->showRecordCount(), ]; }