MenuController.php 5.3 KB

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