header(trans('admin.menu')) ->description(trans('admin.list')) ->row(function (Row $row) { $row->column(7, $this->treeView()->render()); $row->column(5, function (Column $column) { $form = new \Dcat\Admin\Widgets\Form(); $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'))->default('fa-bars')->help($this->iconHelp()); $form->text('uri', trans('admin.uri')); $form->multipleSelect('roles', trans('admin.roles')) ->options($roleModel::all()->pluck('name', 'id')); if ($menuModel::withPermission()) { $form->multipleSelect('permissions', trans('admin.permission'))->options($permissionModel::selectOptions()); } $form->hidden('_token')->default(csrf_token()); $form->setWidth(9, 2); $column->append(Box::make(trans('admin.new'), $form)->style('success')); }); }); } /** * @return \Dcat\Admin\Tree */ protected function treeView() { $menuModel = config('admin.database.menu_model'); $tree = new Tree(new $menuModel); $tree->disableCreateButton(); $tree->disableQuickCreateButton(); $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; }); return $tree; } /** * Edit interface. * * @param string $id * @param Content $content * * @return Content */ public function edit($id, Content $content) { return $content ->header(trans('admin.menu')) ->description(trans('admin.edit')) ->row($this->form()->edit($id)); } /** * Make a form builder. * * @return Form */ public function form() { $menuModel = config('admin.database.menu_model'); $permissionModel = config('admin.database.permissions_model'); $roleModel = config('admin.database.roles_model'); $form = new Form(new Menu()); $form->tools(function (Form\Tools $tools) { $tools->disableView(); }); $form->display('id', 'ID'); $form->select('parent_id', trans('admin.parent_id'))->options(function () use ($menuModel) { return $menuModel::selectOptions(); }); $form->text('title', trans('admin.title'))->required(); $form->icon('icon', trans('admin.icon'))->default('fa-bars')->help($this->iconHelp()); $form->text('uri', trans('admin.uri')); $form->multipleSelect('roles', trans('admin.roles')) ->options(function () use ($roleModel) { return $roleModel::all()->pluck('name', 'id'); }) ->customFormat(function ($v) { return array_column($v, 'id'); }); if ($menuModel::withPermission()) { $form->tree('permissions', trans('admin.permission')) ->nodes(function () use ($permissionModel) { return (new $permissionModel)->allNodes(); }) ->customFormat(function ($v) { if (!$v) { return []; } return array_column($v, 'id'); }); } $form->display('created_at', trans('admin.created_at')); $form->display('updated_at', trans('admin.updated_at')); return $form; } /** * Help message for icon field. * * @return string */ protected function iconHelp() { return 'For more icons please see http://fontawesome.io/icons/'; } }