diff --git a/app/Livewire/Admin/EditUserModal.php b/app/Livewire/Admin/EditUserModal.php deleted file mode 100644 index baf641e..0000000 --- a/app/Livewire/Admin/EditUserModal.php +++ /dev/null @@ -1,42 +0,0 @@ -userId = $user->id; - $this->name = $user->name; - $this->email = $user->email; - } - - public function save() - { - $this->validate([ - 'name' => 'required', - 'email' => 'required|email', - ]); - - User::find($this->userId)->update([ - 'name' => $this->name, - 'email' => $this->email, - ]); - - $this->closeModal(); - $this->dispatch('notify', '使用者更新成功'); - } - - public function render() - { - return view('livewire.admin.edit-user-modal'); - } -} diff --git a/app/Livewire/Admin/RoleForm.php b/app/Livewire/Admin/RoleForm.php new file mode 100644 index 0000000..482af39 --- /dev/null +++ b/app/Livewire/Admin/RoleForm.php @@ -0,0 +1,81 @@ +permissions = Permission::all(); + } + + public function openCreateRoleModal() + { + $this->resetFields(); + $this->showCreateModal = true; + } + + public function openEditRoleModal($id) + { + $role = Role::findOrFail($id); + $this->roleId = $role->id; + $this->name = $role->name; + $this->selectedPermissions = $role->permissions()->pluck('id')->toArray(); + $this->showCreateModal = true; + } + + public function save() + { + $this->validate([ + 'name' => 'required|string|max:255', + 'selectedPermissions' => 'array', + ]); + + if ($this->roleId) { + $role = Role::findOrFail($this->roleId); + $role->update(['name' => $this->name]); + $role->syncPermissions($this->selectedPermissions); + session()->flash('message', '角色已更新'); + } else { + $role = Role::create(['name' => $this->name]); + $role->syncPermissions($this->selectedPermissions); + session()->flash('message', '角色已新增'); + } + + $this->resetFields(); + $this->showCreateModal = false; + } + + public function deleteRole($id) + { + Role::findOrFail($id)->delete(); + session()->flash('message', '角色已刪除'); + } + + public function resetFields() + { + $this->name = ''; + $this->selectedPermissions = []; + $this->roleId = null; + } + + public function render() + { + return view('livewire.admin.role-form'); + } +} diff --git a/app/Livewire/Admin/RoleTable.php b/app/Livewire/Admin/RoleTable.php new file mode 100644 index 0000000..ad4223c --- /dev/null +++ b/app/Livewire/Admin/RoleTable.php @@ -0,0 +1,104 @@ + 'outside']); + } + + public function setUp(): array + { + //$this->showCheckBox(); + + return [ + //PowerGrid::header() + // ->showSearchInput(), + //PowerGrid::footer() + // ->showPerPage() + // ->showRecordCount(), + ]; + } + + public function datasource(): Builder + { + //dd(Role::with('permissions')); + return Role::with('permissions'); + } + + public function relationSearch(): array + { + return []; + } + + public function fields(): PowerGridFields + { + return PowerGrid::fields() + ->add('id') + ->add('name') + ->add('created_at_formatted', fn (Role $model) => Carbon::parse($model->created_at)->format('d/m/Y H:i:s')); + } + + public function columns(): array + { + return [ + Column::make('ID', 'id')->sortable()->searchable(), + Column::make('名稱', 'name')->sortable()->searchable(), + //Column::make('權限', 'permissions_list', function ($role) { + // return $role->permissions->pluck('name')->implode(', '); + //}), + Column::make('Created at', 'created_at_formatted', 'created_at')->sortable(), + Column::action('Action') + ]; + } + + public function filters(): array + { + return [ + Filter::datetimepicker('created_at'), + ]; + } + + + public function actions(Role $row): array + { + return [ + Button::add('edit') + ->slot('編輯') + ->icon('solid-pencil-square') + ->class('inline-flex items-center gap-1 px-3 py-1 rounded ') + ->dispatchTo('admin.role-form', 'openEditRoleModal', ['id' => $row->id]), + Button::add('delete') + ->slot('刪除') + ->icon('solid-trash') + ->class('inline-flex items-center gap-1 px-3 py-1 rounded ') + ->dispatchTo('admin.role-form', 'deleteRole', ['id' => $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/Roles.php b/app/Livewire/Admin/Roles.php index 2fb948b..47e67f7 100644 --- a/app/Livewire/Admin/Roles.php +++ b/app/Livewire/Admin/Roles.php @@ -99,6 +99,6 @@ class Roles extends Component { return view('livewire.admin.roles', [ 'roles' => $this->roles, - ])->layout('layouts.admin'); + ]); } } diff --git a/app/Livewire/Admin/UserForm.php b/app/Livewire/Admin/UserForm.php new file mode 100644 index 0000000..bd78453 --- /dev/null +++ b/app/Livewire/Admin/UserForm.php @@ -0,0 +1,90 @@ + 'required|string|max:255', + 'email' => 'required|string|max:255', + ]; + + public function mount() + { + $this->roles = Role::all(); + } + + public function openCreateUserModal() + { + $this->resetFields(); + $this->showCreateModal = true; + } + + public function openEditUserModal($id) + { + $user = User::findOrFail($id); + $this->userId = $user->id; + $this->name = $user->name; + $this->email =$user->email; + $this->selectedRoles = $user->roles()->pluck('id')->toArray(); + $this->showCreateModal = true; + } + + public function save() + { + $this->validate(); + + if ($this->userId) { + $role = User::findOrFail($this->userId); + $role->update([ + 'name' => $this->name, + 'email' => $this->email, + ]); + $role->syncRolses($this->selectedRoles); + session()->flash('message', '使用者已更新'); + } else { + $role = User::create([ + 'name' => $this->name, + 'email' => $this->email, + ]); + $role->syncRolses($this->selectedRoles); + session()->flash('message', '使用者已新增'); + } + + $this->resetFields(); + $this->showCreateModal = false; + } + + public function deleteUser($id) + { + User::findOrFail($id)->delete(); + session()->flash('message', '使用者已刪除'); + } + + public function resetFields() + { + $this->name = ''; + $this->email = ''; + $this->selectedRoles = []; + $this->userId = null; + } + + public function render() + { + return view('livewire.admin.user-form'); + } +} diff --git a/app/Livewire/Admin/UserTable.php b/app/Livewire/Admin/UserTable.php index 3ba91db..ef565be 100644 --- a/app/Livewire/Admin/UserTable.php +++ b/app/Livewire/Admin/UserTable.php @@ -24,17 +24,10 @@ final class UserTable extends PowerGridComponent public bool $showFilters = false; - public bool $showEditModal = false; - public $editingUserId; - public $name; - public $email; - public function boot(): void { config(['livewire-powergrid.filter' => 'outside']); } - - /* */ public function setUp(): array @@ -104,17 +97,17 @@ final class UserTable extends PowerGridComponent public function actions(User $row): array { return [ + Button::add('edit') - ->slot('編輯') - ->icon('solid-pencil-square') - ->class('inline-flex items-center gap-1 px-3 py-1 rounded ') - ->openModal('admin.edit-user-modal', ['userId' => $row->id]), + ->slot('編輯') + ->icon('solid-pencil-square') + ->class('inline-flex items-center gap-1 px-3 py-1 rounded ') + ->dispatchTo('admin.user-form', 'openEditUserModal', ['id' => $row->id]), Button::add('delete') - ->slot('刪除') - ->icon('solid-trash') - ->class('inline-flex items-center gap-1 px-3 py-1 rounded ') - ->confirmPrompt('確定要刪除這位使用者嗎?|DELETE', 'DELETE') // 使用 'DELETE' 作為標識符 - ->dispatch('delete-user', ['userId' => $row->id]), + ->slot('刪除') + ->icon('solid-trash') + ->class('inline-flex items-center gap-1 px-3 py-1 rounded ') + ->dispatchTo('admin.user-form', 'deleteUser', ['id' => $row->id]), ]; } #[On('bulkDelete.{tableName}')] @@ -127,13 +120,6 @@ final class UserTable extends PowerGridComponent } } - #[\Livewire\Attributes\On('delete-user')] - public function deleteUser($userId): void - { - User::findOrFail($userId)->delete(); - - $this->dispatch('notify', '刪除成功'); - } /* public function actionRules($row): array { diff --git a/resources/views/livewire/admin/edit-user-modal.blade.php b/resources/views/livewire/admin/edit-user-modal.blade.php deleted file mode 100644 index 2efe871..0000000 --- a/resources/views/livewire/admin/edit-user-modal.blade.php +++ /dev/null @@ -1,16 +0,0 @@ -