MenuController.php 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. <?php
  2. namespace Longyi\DynamicMenu\Http\Controllers;
  3. use Illuminate\Http\Request;
  4. use Illuminate\Routing\Controller;
  5. use Longyi\DynamicMenu\Models\MenuItem;
  6. use Webkul\User\Repositories\RoleRepository;
  7. use Illuminate\Support\Facades\DB;
  8. use Illuminate\Support\Facades\View;
  9. class MenuController extends Controller
  10. {
  11. protected $roleRepository;
  12. public function __construct(RoleRepository $roleRepository)
  13. {
  14. $this->roleRepository = $roleRepository;
  15. $this->_config = request('_config');
  16. }
  17. public function index()
  18. {
  19. try {
  20. $allItems = MenuItem::with('children')
  21. ->orderBy('parent_id')
  22. ->orderBy('sort_order')
  23. ->get();
  24. $menuItems = $allItems->whereNull('parent_id');
  25. return view('dynamicmenu::admin.menu.index', compact('menuItems', 'allItems'));
  26. } catch (\Exception $e) {
  27. \Log::error('MenuController 错误: ' . $e->getMessage());
  28. \Log::error($e->getTraceAsString());
  29. throw $e;
  30. }
  31. //\Log::info('===== MenuController::index 结束 =====');
  32. }
  33. public function create()
  34. {
  35. $menuItems = MenuItem::orderBy('parent_id')->orderBy('sort_order')->get();
  36. return view($this->_config['view'], compact('menuItems'));
  37. }
  38. public function store(Request $request)
  39. {
  40. $request->validate([
  41. 'name' => 'required|string|max:255',
  42. 'key' => 'required|string|unique:dynamic_menu_items,key',
  43. 'route' => 'required|string',
  44. 'icon' => 'nullable|string',
  45. 'parent_id' => 'nullable|exists:dynamic_menu_items,id',
  46. 'sort_order' => 'integer',
  47. 'status' => 'boolean'
  48. ]);
  49. $data = $request->all();
  50. $data['parent_id'] = $data['parent_id'] === '' ? null : $data['parent_id'];
  51. $data['created_by'] = auth()->guard('admin')->user()->id;
  52. MenuItem::create($data);
  53. session()->flash('success', '菜单项创建成功');
  54. return redirect()->route($this->_config['redirect']);
  55. }
  56. public function edit($id)
  57. {
  58. $menuItem = MenuItem::with('parent')->findOrFail($id);
  59. $menuItems = MenuItem::orderBy('parent_id')->orderBy('sort_order')->get();
  60. return view($this->_config['view'], compact('menuItem', 'menuItems'));
  61. }
  62. public function update(Request $request, $id)
  63. {
  64. $request->validate([
  65. 'name' => 'required|string|max:255',
  66. 'key' => 'required|string|unique:dynamic_menu_items,key',
  67. 'route' => 'required|string',
  68. 'icon' => 'nullable|string',
  69. 'parent_id' => 'nullable|exists:dynamic_menu_items,id',
  70. 'sort_order' => 'integer',
  71. 'status' => 'boolean'
  72. ]);
  73. $menuItem = MenuItem::findOrFail($id);
  74. $menuItem->update($request->all());
  75. session()->flash('success', '菜单项更新成功');
  76. return redirect()->route($this->_config['redirect']);
  77. }
  78. public function destroy($id)
  79. {
  80. $menuItem = MenuItem::with('children')->findOrFail($id);
  81. if ($menuItem->children->count() > 0) {
  82. session()->flash('error', '请先删除子菜单项');
  83. return redirect()->back();
  84. }
  85. $menuItem->delete();
  86. session()->flash('success', '菜单项删除成功');
  87. return redirect()->route($this->_config['redirect']);
  88. }
  89. public function permission()
  90. {
  91. $roles = $this->roleRepository->all();
  92. $menuItems = MenuItem::with('children')->orderBy('parent_id')->orderBy('sort_order')->get();
  93. return view($this->_config['view'], compact('roles', 'menuItems'));
  94. }
  95. public function updatePermission(Request $request)
  96. {
  97. $roleId = $request->input('role_id');
  98. $menuItemIds = $request->input('menu_items', []);
  99. DB::table('menu_item_role')->where('role_id', $roleId)->delete();
  100. foreach ($menuItemIds as $menuItemId) {
  101. DB::table('menu_item_role')->insert([
  102. 'menu_item_id' => $menuItemId,
  103. 'role_id' => $roleId
  104. ]);
  105. }
  106. session()->flash('success', '权限更新成功');
  107. return redirect()->back();
  108. }
  109. public function getRolePermissions(Request $request)
  110. {
  111. $roleId = $request->input('role_id');
  112. $permissions = DB::table('menu_item_role')
  113. ->where('role_id', $roleId)
  114. ->pluck('menu_item_id')
  115. ->toArray();
  116. return response()->json($permissions);
  117. }
  118. }