MenuController.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. <?php
  2. namespace Dcat\Admin\Controllers;
  3. use Dcat\Admin\Models\Repositories\Menu;
  4. use Dcat\Admin\Form;
  5. use Dcat\Admin\Layout\Column;
  6. use Dcat\Admin\Layout\Content;
  7. use Dcat\Admin\Layout\Row;
  8. use Dcat\Admin\Tree;
  9. use Dcat\Admin\Widgets\Box;
  10. use Dcat\Admin\Widgets\Card;
  11. use Illuminate\Routing\Controller;
  12. class MenuController extends Controller
  13. {
  14. use HasResourceActions;
  15. /**
  16. * Index interface.
  17. *
  18. * @param Content $content
  19. *
  20. * @return Content
  21. */
  22. public function index(Content $content)
  23. {
  24. return $content
  25. ->header(trans('admin.menu'))
  26. ->description(trans('admin.list'))
  27. ->row(function (Row $row) {
  28. $row->column(7, $this->treeView()->render());
  29. $row->column(5, function (Column $column) {
  30. $form = new \Dcat\Admin\Widgets\Form();
  31. $form->action(admin_url('auth/menu'));
  32. $menuModel = config('admin.database.menu_model');
  33. $permissionModel = config('admin.database.permissions_model');
  34. $roleModel = config('admin.database.roles_model');
  35. $form->select('parent_id', trans('admin.parent_id'))->options($menuModel::selectOptions());
  36. $form->text('title', trans('admin.title'))->required();
  37. $form->icon('icon', trans('admin.icon'))->help($this->iconHelp());
  38. $form->text('uri', trans('admin.uri'));
  39. $form->multipleSelect('roles', trans('admin.roles'))
  40. ->options($roleModel::all()->pluck('name', 'id'));
  41. if ($menuModel::withPermission()) {
  42. $form->tree('permissions', trans('admin.permission'))->nodes((new $permissionModel)->allNodes());
  43. }
  44. $form->hidden('_token')->default(csrf_token());
  45. $form->setWidth(9, 2);
  46. $column->append(Card::make(trans('admin.new'), $form)->class('card material'));
  47. });
  48. });
  49. }
  50. /**
  51. * @return \Dcat\Admin\Tree
  52. */
  53. protected function treeView()
  54. {
  55. $menuModel = config('admin.database.menu_model');
  56. $tree = new Tree(new $menuModel);
  57. $tree->disableCreateButton();
  58. $tree->disableQuickCreateButton();
  59. $tree->branch(function ($branch) {
  60. $payload = "<i class='fa {$branch['icon']}'></i>&nbsp;<strong>{$branch['title']}</strong>";
  61. if (!isset($branch['children'])) {
  62. if (url()->isValidUrl($branch['uri'])) {
  63. $uri = $branch['uri'];
  64. } else {
  65. $uri = admin_base_path($branch['uri']);
  66. }
  67. $payload .= "&nbsp;&nbsp;&nbsp;<a href=\"$uri\" class=\"dd-nodrag\">$uri</a>";
  68. }
  69. return $payload;
  70. });
  71. return $tree;
  72. }
  73. /**
  74. * Edit interface.
  75. *
  76. * @param string $id
  77. * @param Content $content
  78. *
  79. * @return Content
  80. */
  81. public function edit($id, Content $content)
  82. {
  83. return $content
  84. ->header(trans('admin.menu'))
  85. ->description(trans('admin.edit'))
  86. ->row($this->form()->edit($id));
  87. }
  88. /**
  89. * Make a form builder.
  90. *
  91. * @return Form
  92. */
  93. public function form()
  94. {
  95. $menuModel = config('admin.database.menu_model');
  96. $permissionModel = config('admin.database.permissions_model');
  97. $roleModel = config('admin.database.roles_model');
  98. $form = new Form(new Menu());
  99. $form->tools(function (Form\Tools $tools) {
  100. $tools->disableView();
  101. });
  102. $form->display('id', 'ID');
  103. $form->select('parent_id', trans('admin.parent_id'))->options(function () use ($menuModel) {
  104. return $menuModel::selectOptions();
  105. });
  106. $form->text('title', trans('admin.title'))->required();
  107. $form->icon('icon', trans('admin.icon'))->help($this->iconHelp());
  108. $form->text('uri', trans('admin.uri'));
  109. $form->multipleSelect('roles', trans('admin.roles'))
  110. ->options(function () use ($roleModel) {
  111. return $roleModel::all()->pluck('name', 'id');
  112. })
  113. ->customFormat(function ($v) {
  114. return array_column($v, 'id');
  115. });
  116. if ($menuModel::withPermission()) {
  117. $form->tree('permissions', trans('admin.permission'))
  118. ->nodes(function () use ($permissionModel) {
  119. return (new $permissionModel)->allNodes();
  120. })
  121. ->customFormat(function ($v) {
  122. if (!$v) {
  123. return [];
  124. }
  125. return array_column($v, 'id');
  126. });
  127. }
  128. $form->display('created_at', trans('admin.created_at'));
  129. $form->display('updated_at', trans('admin.updated_at'));
  130. return $form;
  131. }
  132. /**
  133. * Help message for icon field.
  134. *
  135. * @return string
  136. */
  137. protected function iconHelp()
  138. {
  139. return 'For more icons please see <a href="http://fontawesome.io/icons/" target="_blank">http://fontawesome.io/icons/</a>';
  140. }
  141. }