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([]); } }