'required|string|max:255', ]; protected $paginationTheme = 'tailwind'; public function getRolesProperty() { return Role::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->permissions = Permission::all(); } public function openCreateModal() { $this->resetFields(); $this->showCreateModal = true; } public function openEditModal($id) { $role = Role::findOrFail($id); $this->editingRoleId = $role->id; $this->name = $role->name; $this->selectedPermissions = $role->permissions()->pluck('id')->toArray(); $this->showCreateModal = true; } public function save() { $this->validate(); if ($this->editingRoleId) { $role = Role::findOrFail($this->editingRoleId); $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 delete($id) { Role::findOrFail($id)->delete(); session()->flash('message', '角色已刪除'); } public function resetFields() { $this->name = ''; $this->selectedPermissions = []; $this->editingRoleId = null; } public function render() { return view('livewire.admin.roles', [ 'roles' => $this->roles, ]); } }