Menu.php 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. <?php
  2. namespace app\admin\controller;
  3. use app\admin\middleware\Login;
  4. use app\Request;
  5. class Menu extends Base
  6. {
  7. /**
  8. * 中间件校验
  9. * 1.权限
  10. * @var array[]
  11. */
  12. protected $middleware = [
  13. //except 除了某个方法不校验,其余校验
  14. //only 仅仅校验某个方法
  15. Login::class => ['except' => ['']],
  16. // Auth::class => ['except' => ['']],
  17. ];
  18. /**
  19. * 获取菜单
  20. * @param Request $request
  21. * @return void
  22. */
  23. public function list(Request $request)
  24. {
  25. $menuJson = file_get_contents(root_path() . "config/json/menu.json");
  26. $menu = json_decode($menuJson, true);
  27. // $admin = $request->admin;
  28. $role_codes = [];
  29. // if ($admin->role && $admin->role->codes) {
  30. // $role_codes = explode(',', $admin->role->codes);
  31. // }
  32. $role_codes[] = 'home';
  33. $role_codes[] = 'admin';
  34. $fin_menu = $this->getFinMenu($menu, $role_codes,1);
  35. $result = [
  36. 'menu' => $fin_menu,
  37. 'role' => $role_codes,
  38. ];
  39. return $this->success($result);
  40. }
  41. /**
  42. * @param $menu_list
  43. * @param $role_codes
  44. * @param int $is_root
  45. * @return array
  46. */
  47. public function getFinMenu($menu_list, $role_codes, int $is_root = 0): array
  48. {
  49. $fin_menu = [];
  50. foreach ($menu_list as $key => $val) {
  51. if (isset($val['children'])) {
  52. $child_list = $this->getChild($val['children']);
  53. $parents = false;
  54. foreach ($child_list as $kes => $ves) {
  55. if (in_array($ves['role'], $role_codes) || $is_root) {
  56. $parents = true;
  57. break;
  58. }
  59. }
  60. if (in_array($val['role'], $role_codes) || $parents) {
  61. $item = $val;
  62. $item['children'] = $this->getFinMenu($val['children'], $role_codes, $is_root);
  63. $fin_menu[] = $item;
  64. }
  65. } else {
  66. if (isset($val['role'])) {
  67. if (in_array($val['role'], $role_codes) || $is_root || $val['role'] == 'index') {
  68. $fin_menu[] = $val;
  69. }
  70. }
  71. }
  72. }
  73. return $fin_menu;
  74. }
  75. /**
  76. * 获取所有子节点
  77. * @param array $arrData
  78. * @param string $strChild
  79. * @return array|mixed
  80. */
  81. public function getChild(array $arrData = [], string $strChild = "children"): mixed
  82. {
  83. if (empty($arrData) || !is_array($arrData)) {
  84. return $arrData;
  85. }
  86. $arrRes = [];
  87. foreach ($arrData as $k => $v) {
  88. $arrTmp = $v;
  89. if (isset($arrTmp[$strChild])) {
  90. unset($arrTmp[$strChild]);
  91. }
  92. $arrRes[] = $arrTmp;
  93. if (isset($v[$strChild])) {
  94. if (!empty($v[$strChild])) {
  95. $arrTmp = $this->getChild($v[$strChild]);
  96. $arrRes = array_merge($arrRes, $arrTmp);
  97. }
  98. }
  99. }
  100. return $arrRes;
  101. }
  102. }