SiteMenuController.php 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. <?php
  2. namespace App\Distributor\Controllers;
  3. use App\Distributor\Repositories\DistProduct;
  4. use App\Distributor\Repositories\DistProductCategory;
  5. use App\Distributor\Repositories\SiteMenu;
  6. use App\Distributor\Repositories\SitePages;
  7. use App\Distributor\Repositories\SitePagesTag;
  8. use Dcat\Admin\Form;
  9. use Dcat\Admin\Grid;
  10. use Dcat\Admin\Show;
  11. use Dcat\Admin\Http\Controllers\AdminController;
  12. use Dcat\Admin\Layout\Content;
  13. use Dcat\Admin\Admin;
  14. use Dcat\Admin\Tree;
  15. use Dcat\Admin\Layout\Row;
  16. use function Symfony\Component\String\u;
  17. class SiteMenuController extends AdminController
  18. {
  19. /**
  20. * page index
  21. */
  22. public function index(Content $content)
  23. {
  24. return $content
  25. ->header(admin_trans( 'admin.top_menu') )
  26. ->description('')
  27. ->body($this->tree());
  28. }
  29. private function tree()
  30. {
  31. return function (Row $row) {
  32. $tree = new Tree(new SiteMenu);
  33. $tree->branch(function ($branch) {
  34. $arr[] = $branch['title'];
  35. if ($branch['uri']) {
  36. $arr[] = $branch['uri'];
  37. }
  38. return implode(' - ', $arr);
  39. });
  40. //按钮
  41. $tree->disableEditButton();
  42. $tree->disableCreateButton();
  43. $tree->showQuickCreateButton();
  44. $tree->showQuickEditButton();
  45. $row->column(6, $tree);
  46. };
  47. }
  48. /**
  49. * Make a grid builder.
  50. *
  51. * @return Grid
  52. */
  53. // protected function grid()
  54. // {
  55. // return Grid::make(new SiteMenu(), function (Grid $grid) {
  56. // $grid->column('id')->sortable();
  57. // $grid->column('parent_id');
  58. // $grid->column('order');
  59. // $grid->column('title');
  60. // $grid->column('uri');
  61. // $grid->column('show');
  62. // $grid->column('menu_type');
  63. // $grid->column('menu_config');
  64. // $grid->column('created_at');
  65. // $grid->column('updated_at')->sortable();
  66. //
  67. // $grid->filter(function (Grid\Filter $filter) {
  68. // $filter->equal('id');
  69. //
  70. // });
  71. // });
  72. // }
  73. /**
  74. * Make a show builder.
  75. *
  76. * @param mixed $id
  77. *
  78. * @return Show
  79. */
  80. // protected function detail($id)
  81. // {
  82. // return Show::make($id, new SiteMenu(), function (Show $show) {
  83. // $show->field('id');
  84. // $show->field('parent_id');
  85. // $show->field('order');
  86. // $show->field('title');
  87. // $show->field('uri');
  88. // $show->field('show');
  89. // $show->field('menu_type');
  90. // $show->field('menu_config');
  91. // $show->field('created_at');
  92. // $show->field('updated_at');
  93. // });
  94. // }
  95. /**
  96. * Make a form builder.
  97. *
  98. * @return Form
  99. */
  100. protected function form()
  101. {
  102. $thisObject = $this;
  103. return Form::make(new SiteMenu(), function (Form $form) use ($thisObject) {
  104. $menuConfig = $form->model()->menu_config;
  105. $form->select('parent_id', admin_trans_label('parent_id'))
  106. ->options(SiteMenu::selectOptions())
  107. ->required();
  108. $form->text('title')->required();
  109. $form->select('menu_type')->options(config('dictionary.menu_type'))->required()
  110. ->when(1, function (Form $form) use ($menuConfig,$thisObject) {
  111. //选择产品
  112. $form->select('collections_type')->options(config('dictionary.collections_type'))
  113. ->value($thisObject->getArrayValue('collections_type',$menuConfig))
  114. ->when(0, function (Form $form) use ($menuConfig,$thisObject) {
  115. $form->select('product_category')->options(DistProductCategory::selectOptions())->value($thisObject->getArrayValue('product_category',$menuConfig));
  116. })->when(1, function (Form $form) use ($menuConfig,$thisObject) {
  117. $form->select('pages_tag')->options('api/tag')->value($thisObject->getArrayValue('posts_tag',$menuConfig));
  118. });
  119. })
  120. ->when(2, function (Form $form) use ($menuConfig,$thisObject) {
  121. //选择产品
  122. $form->select('product',admin_trans_label('select_product'))->options('api/products')
  123. ->value($thisObject->getArrayValue('product',$menuConfig))
  124. ->help('The latest 30 products are displayed by default, and you can also use the search function to find all products.');
  125. })
  126. ->when(3, function (Form $form) use ($menuConfig,$thisObject) {
  127. //选择页面
  128. $form->select('posts',admin_trans_label('select_pages'))->options('api/pages')
  129. ->value($thisObject->getArrayValue('posts',$menuConfig))
  130. ->help('The latest 30 published posts are displayed by default, and you can also use the search function to find all posts.');
  131. })
  132. ->when(4, function (Form $form) use ($menuConfig,$thisObject) {
  133. //url
  134. $form->url('url')->value($thisObject->getArrayValue('url',$menuConfig));
  135. });
  136. $form->switch('show')->default(1);
  137. $form->hidden('uri');
  138. $form->textarea('menu_config')->hideInDialog();
  139. $form->ignore(['collections_type','product_category','pages_tag','product','posts','url']);
  140. //保存事件
  141. $form->submitted(function (Form $form) use ($thisObject) {
  142. $result = $thisObject->convertMenuConfig($form);
  143. $form->uri = $result['uri'];
  144. $form->menu_config = $result['menuConfig'];
  145. });
  146. });
  147. }
  148. protected function convertMenuConfig(Form $form) {
  149. $uri = "";
  150. $menuConfig = [
  151. 'collections_type' => $form->input('collections_type'),
  152. 'product_category' => $form->input('product_category'),
  153. 'posts_tag' => $form->input('posts_tag'),
  154. 'product' => $form->input('product'),
  155. 'posts' => $form->input('posts'),
  156. 'url' => $form->input('url'),
  157. ];
  158. $menuType = $form->input('menu_type');
  159. switch ($menuType) {
  160. case 0: //选择产品
  161. $uri ="/";
  162. break;
  163. case 1: //集合
  164. if ($form->input('collections_type') == 0) {
  165. //产品分类
  166. $row = DistProductCategory::getOneById($form->input('product_category'));
  167. $uri = $row ? "/product-category/".$row->slug : "/";
  168. } else {
  169. //文章标签
  170. $row = SitePagesTag::getOneById($form->input('posts_tag'));
  171. $uri = $row ? "/collections/".$row->slug : "/";
  172. }
  173. break;
  174. case 2: //选择产品
  175. $row = DistProduct::getOneById($form->input('product'));
  176. $uri = $row ? "/products/".$row->slug : "/";
  177. break;
  178. case 3: //选择页面
  179. $row = SitePages::getOneById($form->input('posts'));
  180. $uri = $row ? "/pages/".$row->slug : "/";
  181. break;
  182. case 4: //url
  183. $uri = $form->input('url');
  184. break;
  185. }
  186. return ['uri'=>$uri,'menuConfig'=>$menuConfig];
  187. }
  188. protected function getArrayValue($key,$arr) {
  189. if (isset($arr[$key])) {
  190. return $arr[$key];
  191. }
  192. return "";
  193. }
  194. }