get(); return view('admin.menus.index', compact('menus')); } public function create(): View { return view('admin.menus.form', ['menu' => null]); } public function store(Request $request): RedirectResponse { $data = $request->validate([ 'label' => ['required', 'string', 'max:60'], 'url' => ['required', 'string', 'max:255'], 'is_visible' => ['boolean'], 'sort_order' => ['integer'], ]); $data['is_visible'] = $request->boolean('is_visible'); $data['sort_order'] = $data['sort_order'] ?? 0; NavigationMenu::create($data); return redirect()->route('admin.menus.index')->with('success', '菜单项已添加'); } public function edit(NavigationMenu $menu): View { return view('admin.menus.form', compact('menu')); } public function update(Request $request, NavigationMenu $menu): RedirectResponse { $data = $request->validate([ 'label' => ['required', 'string', 'max:60'], 'url' => ['required', 'string', 'max:255'], 'is_visible' => ['boolean'], 'sort_order' => ['integer'], ]); $data['is_visible'] = $request->boolean('is_visible'); $data['sort_order'] = $data['sort_order'] ?? $menu->sort_order; $menu->update($data); return redirect()->route('admin.menus.index')->with('success', '菜单项已更新'); } public function destroy(NavigationMenu $menu): RedirectResponse { $menu->delete(); return redirect()->route('admin.menus.index')->with('success', '菜单项已删除'); } /** * 上移 / 下移排序。 */ public function move(Request $request, NavigationMenu $menu): RedirectResponse { $direction = $request->input('direction'); if ($direction === 'up') { $sibling = NavigationMenu::ordered() ->where('sort_order', '<', $menu->sort_order) ->orderByDesc('sort_order') ->first(); if ($sibling) { [$menu->sort_order, $sibling->sort_order] = [$sibling->sort_order, $menu->sort_order]; $menu->save(); $sibling->save(); } } elseif ($direction === 'down') { $sibling = NavigationMenu::ordered() ->where('sort_order', '>', $menu->sort_order) ->first(); if ($sibling) { [$menu->sort_order, $sibling->sort_order] = [$sibling->sort_order, $menu->sort_order]; $menu->save(); $sibling->save(); } } return redirect()->route('admin.menus.index'); } /** * 一键显示 / 隐藏。 */ public function toggle(NavigationMenu $menu): RedirectResponse { $menu->update(['is_visible' => ! $menu->is_visible]); return redirect()->route('admin.menus.index'); } }