MenuService.php 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. <?php
  2. namespace App\Services\Base;
  3. use App\Contracts\Repositories\Base\MenuRepository;
  4. use App\Repositories\Criteria\Base\MenuCriteria;
  5. use App\Repositories\Eloquent\Base\MenuRepositoryEloquent;
  6. use App\Repositories\Enums\ModelStatusEnum;
  7. use App\Repositories\Models\Base\Menu;
  8. use App\Repositories\Presenters\Base\MenuPresenter;
  9. use Illuminate\Http\Request;
  10. class MenuService
  11. {
  12. /**
  13. * @var MenuRepositoryEloquent
  14. */
  15. private $menuRepository;
  16. /**
  17. * MenuService constructor.
  18. *
  19. * @param MenuRepositoryEloquent $menuRepositoryEloquent
  20. */
  21. public function __construct(MenuRepositoryEloquent $menuRepositoryEloquent)
  22. {
  23. $this->menuRepository = $menuRepositoryEloquent;
  24. }
  25. /**
  26. * @param Request $request
  27. *
  28. * @return mixed
  29. * @throws \Prettus\Repository\Exceptions\RepositoryException
  30. */
  31. public function handleList(Request $request)
  32. {
  33. $this->menuRepository->pushCriteria(new MenuCriteria($request));
  34. $this->menuRepository->setPresenter(MenuPresenter::class);
  35. return $this->menuRepository->searchMenusByPage();
  36. }
  37. /**
  38. * @param $id
  39. *
  40. * @return \Illuminate\Database\Eloquent\Model
  41. */
  42. public function handleProfile($id)
  43. {
  44. $this->menuRepository->setPresenter(MenuPresenter::class);
  45. return $this->menuRepository->searchMenuBy($id);
  46. }
  47. /**
  48. * @param array $data
  49. *
  50. * @return mixed
  51. * @throws \Prettus\Validator\Exceptions\ValidatorException
  52. */
  53. public function handleStore($data)
  54. {
  55. $menu = $this->menuRepository->create($data);
  56. return $menu;
  57. }
  58. /**
  59. * @param array $data
  60. *
  61. * @return mixed
  62. * @throws \Prettus\Validator\Exceptions\ValidatorException
  63. */
  64. public function handleUpdate($data)
  65. {
  66. $menu = $this->menuRepository->update($data, $data['id']);
  67. return $menu;
  68. }
  69. /**
  70. * @param Request $request
  71. *
  72. * @return mixed
  73. * @throws \Prettus\Validator\Exceptions\ValidatorException
  74. */
  75. public function handleDelete($id)
  76. {
  77. return $this->menuRepository->delete($id);
  78. }
  79. /**
  80. * 获取当前用户的菜单及按钮权限
  81. * @return array
  82. */
  83. public function handleMyMenusLists()
  84. {
  85. $admin = login_admin();
  86. $roles = $admin->roles()->get();
  87. if ($admin->isSuperAdmin()) {
  88. $menus = $this->menuRepository->where('type', Menu::TYPE_MENU)->where('status', ModelStatusEnum::OK)->select(['id', 'name', 'path', 'parent_id', 'component', 'redirect', 'meta'])->orderByDesc('sort')->orderBy('id')->get()->toArray();
  89. $buttonPermission = $this->menuRepository->where('type', Menu::TYPE_BTN)->where('status', ModelStatusEnum::OK)->select(['title', 'path'])->get();
  90. $menus = toTree($menus);
  91. return compact('menus', 'buttonPermission');
  92. }
  93. if ($roles->count() == 1) {
  94. $role = $roles->first();
  95. $menus = $role->menus()->where('type', Menu::TYPE_MENU)->where('status', ModelStatusEnum::OK)->select(['id', 'name', 'path', 'parent_id', 'component', 'redirect', 'meta'])->orderByDesc('sort')->get()->toArray();
  96. $buttonPermission = $role->menus()->where('type', Menu::TYPE_BTN)->where('status', ModelStatusEnum::OK)->select(['title', 'path'])->get();
  97. $menus = toTree($menus);
  98. return compact('menus', 'buttonPermission');
  99. }
  100. $menus_ids = [];
  101. $button_permission_ids = [];
  102. foreach ($roles as $role) {
  103. $ids = $role->menus()->where('type', Menu::TYPE_MENU)->where('status', ModelStatusEnum::OK)->pluck('id')->toArray();
  104. $permission_ids = $role->menus()->where('type', Menu::TYPE_BTN)->where('status', ModelStatusEnum::OK)->pluck('id')->toArray();
  105. $menus_ids = array_merge($menus_ids, $ids);
  106. $button_permission_ids = array_merge($button_permission_ids, $permission_ids);
  107. }
  108. $menus = $this->menuRepository->whereIn('id', $menus_ids)->where('type', Menu::TYPE_MENU)->where('status', ModelStatusEnum::OK)->select(['id', 'name', 'path', 'parent_id', 'component', 'redirect', 'meta'])->orderByDesc('sort')->orderBy('id')->get()->toArray();
  109. $buttonPermission = $this->menuRepository->whereIn('id', $button_permission_ids)->where('type', Menu::TYPE_BTN)->where('status', ModelStatusEnum::OK)->select(['title', 'path'])->get();
  110. $menus = toTree($menus);
  111. return compact('menus', 'buttonPermission');
  112. }
  113. }