MenuController.php 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  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. \Log::info('===== MenuController::index 开始 =====');
  20. try {
  21. \Log::info('开始查询菜单数据');
  22. $allItems = MenuItem::with('children')
  23. ->orderBy('parent_id')
  24. ->orderBy('sort_order')
  25. ->get();
  26. \Log::info('查询完成,总数: ' . $allItems->count());
  27. $menuItems = $allItems->whereNull('parent_id');
  28. \Log::info('顶级菜单数: ' . $menuItems->count());
  29. \Log::info('准备返回视图');
  30. return view('dynamicmenu::admin.menu.index', compact('menuItems', 'allItems'));
  31. } catch (\Exception $e) {
  32. \Log::error('MenuController 错误: ' . $e->getMessage());
  33. \Log::error($e->getTraceAsString());
  34. throw $e;
  35. }
  36. \Log::info('===== MenuController::index 结束 =====');
  37. }
  38. public function create()
  39. {
  40. $menuItems = MenuItem::orderBy('parent_id')->orderBy('sort_order')->get();
  41. return view($this->_config['view'], compact('menuItems'));
  42. }
  43. public function store(Request $request)
  44. {
  45. $this->validate($request, [
  46. 'name' => 'required|string|max:255',
  47. 'key' => 'required|string|unique:ly_dynamic_menu_items,key',
  48. 'route' => 'required|string',
  49. 'icon' => 'nullable|string',
  50. 'parent_id' => 'nullable|exists:ly_dynamic_menu_items,id',
  51. 'sort_order' => 'integer',
  52. 'status' => 'boolean'
  53. ]);
  54. $data = $request->all();
  55. $data['created_by'] = auth()->guard('admin')->user()->id;
  56. MenuItem::create($data);
  57. session()->flash('success', '菜单项创建成功');
  58. return redirect()->route($this->_config['redirect']);
  59. }
  60. public function edit($id)
  61. {
  62. $menuItem = MenuItem::with('parent')->findOrFail($id);
  63. $menuItems = MenuItem::orderBy('parent_id')->orderBy('sort_order')->get();
  64. return view($this->_config['view'], compact('menuItem', 'menuItems'));
  65. }
  66. public function update(Request $request, $id)
  67. {
  68. $this->validate($request, [
  69. 'name' => 'required|string|max:255',
  70. 'key' => 'required|string|unique:ly_dynamic_menu_items,key,' . $id,
  71. 'route' => 'required|string',
  72. 'icon' => 'nullable|string',
  73. 'parent_id' => 'nullable|exists:ly_dynamic_menu_items,id',
  74. 'sort_order' => 'integer',
  75. 'status' => 'boolean'
  76. ]);
  77. $menuItem = MenuItem::findOrFail($id);
  78. $menuItem->update($request->all());
  79. session()->flash('success', '菜单项更新成功');
  80. return redirect()->route($this->_config['redirect']);
  81. }
  82. public function destroy($id)
  83. {
  84. $menuItem = MenuItem::with('children')->findOrFail($id);
  85. if ($menuItem->children->count() > 0) {
  86. session()->flash('error', '请先删除子菜单项');
  87. return redirect()->back();
  88. }
  89. $menuItem->delete();
  90. session()->flash('success', '菜单项删除成功');
  91. return redirect()->route($this->_config['redirect']);
  92. }
  93. public function permission()
  94. {
  95. $roles = $this->roleRepository->all();
  96. $menuItems = MenuItem::with('children')->orderBy('parent_id')->orderBy('sort_order')->get();
  97. return view($this->_config['view'], compact('roles', 'menuItems'));
  98. }
  99. public function updatePermission(Request $request)
  100. {
  101. $roleId = $request->input('role_id');
  102. $menuItemIds = $request->input('menu_items', []);
  103. DB::table('menu_item_role')->where('role_id', $roleId)->delete();
  104. foreach ($menuItemIds as $menuItemId) {
  105. DB::table('menu_item_role')->insert([
  106. 'menu_item_id' => $menuItemId,
  107. 'role_id' => $roleId
  108. ]);
  109. }
  110. session()->flash('success', '权限更新成功');
  111. return redirect()->back();
  112. }
  113. public function getRolePermissions(Request $request)
  114. {
  115. $roleId = $request->input('role_id');
  116. $permissions = DB::table('menu_item_role')
  117. ->where('role_id', $roleId)
  118. ->pluck('menu_item_id')
  119. ->toArray();
  120. return response()->json($permissions);
  121. }
  122. }