title($this->title()) ->description(trans('admin.list')) ->body(function (Row $row) { $row->column(7, $this->treeView()->render()); if (Admin::user()->can('dcat.admin.menus.create')) { $row->column(5, function (Column $column) { $form = new WidgetForm(); $form->action(admin_url('auth/menu')); $menuModel = config('admin.database.menu_model'); $permissionModel = config('admin.database.permissions_model'); $roleModel = config('admin.database.roles_model'); $form->select('parent_id', trans('admin.parent_id'))->options($menuModel::selectOptions()); $form->text('title', trans('admin.title'))->required(); $form->icon('icon', trans('admin.icon'))->help($this->iconHelp()); $form->text('uri', trans('admin.uri')); if ($menuModel::withRole()) { $form->multipleSelect('roles', trans('admin.roles'))->options($roleModel::all()->pluck('name', 'id')); } if ($menuModel::withPermission()) { $form->tree('permissions', trans('admin.permission')) ->expand(false) ->treeState(false) ->nodes((new $permissionModel())->allNodes()); } $form->width(9, 2); $column->append(Box::make(trans('admin.new'), $form)); }); } }); } /** * @return \Dcat\Admin\Tree */ protected function treeView() { $menuModel = config('admin.database.menu_model'); return new Tree(new $menuModel(), function (Tree $tree) { $tree->disableCreateButton(); $tree->disableQuickCreateButton(); $tree->disableEditButton(); $tree->maxDepth(3); if (Admin::user()->cannot('dcat.admin.menus.edit')) { $tree->disableSaveButton(); } $tree->actions(function (Tree\Actions $actions) { if ($actions->getRow()->extension) { $actions->disableDelete(); } else { $actions->disableDelete(Admin::user()->cannot('dcat.admin.menus.destroy')); } $actions->disableEdit(Admin::user()->cannot('dcat.admin.menus.edit')); $actions->prepend(new Show()); }); $tree->branch(function ($branch) { $payload = " {$branch['title']}"; if (! isset($branch['children'])) { if (url()->isValidUrl($branch['uri'])) { $uri = $branch['uri']; } else { $uri = admin_base_path($branch['uri']); } $payload .= "   $uri"; } return $payload; }); }); } }