'required|string|max:255', ]; protected $paginationTheme = 'tailwind'; public function getUsersProperty() { return User::where('name', 'like', "%{$this->search}%") ->orderBy($this->sortField, $this->sortDirection) ->paginate(10); } public function sortBy($field) { if ($this->sortField === $field) { $this->sortDirection = $this->sortDirection === 'asc' ? 'desc' : 'asc'; } else { $this->sortField = $field; $this->sortDirection = 'asc'; } } public function mount() { $this->roles = Role::all(); } public function openCreateModal() { $this->resetFields(); $this->showCreateModal = true; } public function openEditModal($id) { $user = User::findOrFail($id); $this->editingUserId = $user->id; $this->name = $user->name; $this->selectedRoles = $user->roles()->pluck('id')->toArray(); $this->showCreateModal = true; } public function save() { $this->validate(); if ($this->editingRoleId) { $role = User::findOrFail($this->editingRoleId); $role->update(['name' => $this->name]); $role->syncRolses($this->selectedRoles); session()->flash('message', '使用者已更新'); } else { $role = User::create(['name' => $this->name]); $role->syncRolses($this->selectedRoles); session()->flash('message', '使用者已新增'); } $this->resetFields(); $this->showCreateModal = false; } public function delete($id) { User::findOrFail($id)->delete(); session()->flash('message', '使用者已刪除'); } public function resetFields() { $this->name = ''; $this->selectedRoles = []; $this->editingUserId = null; } public function render() { return view('livewire.admin.users', [ 'users' => $this->users, ])->layout('layouts.admin'); } }