|
@@ -0,0 +1,160 @@
|
|
|
|
|
+<?php
|
|
|
|
|
+
|
|
|
|
|
+namespace Longyi\DynamicMenu\Http\Controllers;
|
|
|
|
|
+
|
|
|
|
|
+use Illuminate\Http\Request;
|
|
|
|
|
+use Illuminate\Routing\Controller;
|
|
|
|
|
+use Longyi\DynamicMenu\Models\MenuItem;
|
|
|
|
|
+use Webkul\User\Repositories\RoleRepository;
|
|
|
|
|
+use Illuminate\Support\Facades\DB;
|
|
|
|
|
+use Illuminate\Support\Facades\View;
|
|
|
|
|
+
|
|
|
|
|
+class MenuController extends Controller
|
|
|
|
|
+{
|
|
|
|
|
+ protected $roleRepository;
|
|
|
|
|
+
|
|
|
|
|
+ public function __construct(RoleRepository $roleRepository)
|
|
|
|
|
+ {
|
|
|
|
|
+ $this->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);
|
|
|
|
|
+ }
|
|
|
|
|
+}
|