owl-admin-base/app/Admin/Controllers/System/AdminRoleController.php

170 lines
6.7 KiB
PHP

<?php
namespace App\Admin\Controllers\System;
use App\Admin\Controllers\AdminController;
use App\Admin\Services\System\AdminRoleService;
use Slowlyo\OwlAdmin\Admin;
use Slowlyo\OwlAdmin\Renderers\DrawerAction;
use Slowlyo\OwlAdmin\Renderers\Form;
use Slowlyo\OwlAdmin\Renderers\Page;
use Slowlyo\OwlAdmin\Services\AdminMenuService;
use Slowlyo\OwlAdmin\Services\AdminPermissionService;
/**
* @property AdminRoleService $service
*/
class AdminRoleController extends AdminController
{
protected string $serviceName = AdminRoleService::class;
public function list(): Page
{
$crud = $this->baseCRUD()
->headerToolbar([
$this->createTypeButton('drawer', 'lg')
->visible(Admin::user()->can('admin.system.admin_roles.create')),
...$this->baseHeaderToolBar(),
])
->bulkActions([])
->filterTogglable(false)
->itemCheckableOn('${id !== 1}')
->columns([
amis()->TableColumn()->label('ID')->name('id')->sortable(),
amis()->TableColumn()->label(__('admin.admin_role.name'))->name('name'),
amis()->TableColumn()->label(__('admin.admin_role.slug'))->name('slug')->type('tag'),
amis()->TableColumn()
->label(__('admin.created_at'))
->name('created_at')
->type('datetime')
->sortable(true),
amis()->TableColumn()
->label(__('admin.updated_at'))
->name('updated_at')
->type('datetime')
->sortable(true),
amis()->Operation()->label(__('admin.actions'))->buttons([
$this->rowSetMenuButton()
->visible(Admin::user()->can('admin.system.admin_roles.set_menus'))
->visibleOn('${slug != "administrator"}'),
$this->rowSetPermissionButton()
->visible(Admin::user()->can('admin.system.admin_roles.set_permissions'))
->visibleOn('${slug != "administrator"}'),
$this->rowEditTypeButton('drawer', 'lg')
->visible(Admin::user()->can('admin.system.admin_roles.update'))
->visibleOn('${slug != "administrator"}'),
$this->rowDeleteButton()
->visible(Admin::user()->can('admin.system.admin_roles.delete'))
->visibleOn('${slug != "administrator"}'),
]),
]);
return $this->baseList($crud)->css([
'.tree-full' => [
'overflow' => 'hidden !important',
],
'.cxd-TreeControl > .cxd-Tree' => [
'height' => '100% !important',
'max-height' => '100% !important',
],
]);
}
protected function rowSetPermissionButton(): DrawerAction
{
return amis()->DrawerAction()->label(__('admin.admin_role.set_permissions'))->icon('fa-solid fa-gear')->level('link')->drawer(
amis()->Drawer()->title(__('admin.admin_role.set_permissions'))->resizable()->closeOnOutside()->closeOnEsc()->body([
amis()
->Form()
->api(admin_url('system/admin_roles/${id}/permissions'))
->mode('normal')
->data(['id' => '${id}'])
->body(
amis()->TreeControl()
->name('permissions')
->label()
->multiple()
->options(AdminPermissionService::make()->getTree())
->searchable()
->cascade()
->value('${permission_ids}')
->joinValues(false)
->extractValue()
->heightAuto()
->showIcon(false)
->initiallyOpen(false)
// ->size('full')
// ->className('h-full b-none')
// ->inputClassName('h-full tree-full')
->labelField('name')
->valueField('id'),
),
])->size('lg')
);
}
public function savePermissions()
{
$this->service->savePermissions(request('id'), request('permissions'));
return $this->autoResponse('success', __('admin.save'));
}
protected function rowSetMenuButton(): DrawerAction
{
return amis()->DrawerAction()->label(__('admin.admin_role.set_menus'))->icon('fa-solid fa-gear')->level('link')->drawer(
amis()->Drawer()->title(__('admin.admin_role.set_menus'))->resizable()->closeOnOutside()->closeOnEsc()->body([
amis()
->Form()
->api(admin_url(admin_url('system/admin_roles/${id}/menus')))
->mode('normal')
->data(['id' => '${id}'])
->body(
amis()->TreeControl()
->name('menus')
->label()
->multiple()
->options(AdminMenuService::make()->getTree())
->searchable()
->cascade()
->value('${menu_ids}')
->joinValues(false)
->extractValue()
->heightAuto()
->showIcon(false)
->initiallyOpen(false)
// ->size('full')
// ->className('h-full b-none')
// ->inputClassName('h-full tree-full')
->labelField('title')
->valueField('id')
),
])->size('lg')
);
}
public function saveMenus()
{
$this->service->saveMenus(request('id'), request('menus'));
return $this->autoResponse('success', __('admin.save'));
}
public function form(): Form
{
return $this->baseForm()->body([
amis()->TextControl()->label(__('admin.admin_role.name'))->name('name')->required(),
amis()->TextControl()
->label(__('admin.admin_role.slug'))
->name('slug')
->description(__('admin.admin_role.slug_description'))
->required(),
]);
}
public function detail(): Form
{
return $this->baseDetail()->body([]);
}
}