KTV/app/Livewire/Admin/UserForm.php

91 lines
2.2 KiB
PHP

<?php
namespace App\Livewire\Admin;
use Livewire\Component;
use App\Models\User;
use Spatie\Permission\Models\Role;
class UserForm extends Component
{
protected $listeners = ['openCreateUserModal','openEditUserModal', 'deleteUser','bulkDeleteUser'];
public bool $showCreateModal = false;
public ?int $userId = null;
public $name;
public $email;
public $roles = []; // 所有角色清單
public $selectedRoles = []; // 表單中選到的權限
protected $rules = [
'name' => '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');
}
}