170 lines
6.7 KiB
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([]);
|
|
}
|
|
}
|