roleRepository = $roleRepository; $this->_config = request('_config'); } public function index() { \Log::info('===== MenuController::index 开始 ====='); try { \Log::info('开始查询菜单数据'); $allItems = MenuItem::with('children') ->orderBy('parent_id') ->orderBy('sort_order') ->get(); \Log::info('查询完成,总数: ' . $allItems->count()); $menuItems = $allItems->whereNull('parent_id'); \Log::info('顶级菜单数: ' . $menuItems->count()); \Log::info('准备返回视图'); return view('dynamicmenu::admin.menu.index', compact('menuItems', 'allItems')); } catch (\Exception $e) { \Log::error('MenuController 错误: ' . $e->getMessage()); \Log::error($e->getTraceAsString()); throw $e; } \Log::info('===== MenuController::index 结束 ====='); } public function create() { $menuItems = MenuItem::orderBy('parent_id')->orderBy('sort_order')->get(); return view($this->_config['view'], compact('menuItems')); } public function store(Request $request) { $this->validate($request, [ 'name' => 'required|string|max:255', 'key' => 'required|string|unique:ly_dynamic_menu_items,key', 'route' => 'required|string', 'icon' => 'nullable|string', 'parent_id' => 'nullable|exists:ly_dynamic_menu_items,id', 'sort_order' => 'integer', 'status' => 'boolean' ]); $data = $request->all(); $data['created_by'] = auth()->guard('admin')->user()->id; MenuItem::create($data); session()->flash('success', '菜单项创建成功'); return redirect()->route($this->_config['redirect']); } public function edit($id) { $menuItem = MenuItem::with('parent')->findOrFail($id); $menuItems = MenuItem::orderBy('parent_id')->orderBy('sort_order')->get(); return view($this->_config['view'], compact('menuItem', 'menuItems')); } public function update(Request $request, $id) { $this->validate($request, [ 'name' => 'required|string|max:255', 'key' => 'required|string|unique:ly_dynamic_menu_items,key,' . $id, 'route' => 'required|string', 'icon' => 'nullable|string', 'parent_id' => 'nullable|exists:ly_dynamic_menu_items,id', 'sort_order' => 'integer', 'status' => 'boolean' ]); $menuItem = MenuItem::findOrFail($id); $menuItem->update($request->all()); session()->flash('success', '菜单项更新成功'); return redirect()->route($this->_config['redirect']); } public function destroy($id) { $menuItem = MenuItem::with('children')->findOrFail($id); if ($menuItem->children->count() > 0) { session()->flash('error', '请先删除子菜单项'); return redirect()->back(); } $menuItem->delete(); session()->flash('success', '菜单项删除成功'); return redirect()->route($this->_config['redirect']); } public function permission() { $roles = $this->roleRepository->all(); $menuItems = MenuItem::with('children')->orderBy('parent_id')->orderBy('sort_order')->get(); return view($this->_config['view'], compact('roles', 'menuItems')); } public function updatePermission(Request $request) { $roleId = $request->input('role_id'); $menuItemIds = $request->input('menu_items', []); DB::table('menu_item_role')->where('role_id', $roleId)->delete(); foreach ($menuItemIds as $menuItemId) { DB::table('menu_item_role')->insert([ 'menu_item_id' => $menuItemId, 'role_id' => $roleId ]); } session()->flash('success', '权限更新成功'); return redirect()->back(); } public function getRolePermissions(Request $request) { $roleId = $request->input('role_id'); $permissions = DB::table('menu_item_role') ->where('role_id', $roleId) ->pluck('menu_item_id') ->toArray(); return response()->json($permissions); } }