log = new LogModel([ 'module' => 'menu', 'action' => $request->getMethod(), 'target_type' => 'menu', ]); } public function index(Request $request) { $permissions = $request->user()->getPermissionsViaRoles()->toArray(); $names = array_column($permissions, 'name'); $routes = include(resource_path('lang/zh-CN/permission.php')); $routesIndexWithId = []; foreach ($routes as $code => $route) { $route['code'] = $code; $routesIndexWithId[$route['id']] = $route; } $permissionCodes = $names; foreach ($routes as $code => $route) { if (empty($route['parent_id']) || !in_array($code, $names, true)) { continue; } $parent = $routesIndexWithId[$route['parent_id']]; $permissionCodes[] = $parent['code']; if ($parent['parent_id']) { $permissionCodes[] = $routesIndexWithId[$parent['parent_id']]['code']; } } $permissionCodes = array_unique($permissionCodes); $menus = Menu::query()->orderBy('parent_id')->orderBy('seq')->get()->toArray(); $hasPermissionMenus = []; foreach ($menus as $menu) { if (in_array($menu['code'], $permissionCodes, true)) { $hasPermissionMenus[] = $menu; } } $menus = FormatUtils::formatTreeData($hasPermissionMenus, 0); return MenusResource::collection($menus); } public function store(Request $request) { $validator = Validator::make($request->all(), [ 'name' => 'required|string|max:32', 'code' => 'required|string|max:32|unique:menus,code', 'parent_id' => 'required|integer', 'seq' => 'required|integer', ]); if ($validator->fails()) { $this->setValidatorFailResponse($validator->getMessageBag()->getMessages()); return response($this->res, $this->res['httpCode']); } $menu = new Menu(); $menu->name = $request->name; $menu->code = $request->code; $menu->parent_id = $request->parent_id; $menu->seq = $request->seq; $menu->save(); $this->setAfterUpdate($menu->toArray()); $this->addLog($menu->id, 'add'); return response($this->res, $this->res['httpCode']); } public function show($id) { return new MenusResource(Menu::query()->find($id)); } public function update($id, Request $request) { $validator = Validator::make($request->all(), [ 'name' => ['required', 'string', 'max:32',], 'code' => ['required', 'string', 'max:32', Rule::unique('menus')->ignore($id),], 'parent_id' => ['required', 'integer',], 'seq' => ['required', 'integer',], ]); if ($validator->fails()) { $this->setValidatorFailResponse($validator->getMessageBag()->getMessages()); return response($this->res, $this->res['httpCode']); } $menu = Menu::query()->find($id); $this->setBeforeUpdate($menu->toArray()); $menu->name = $request->name; $menu->code = $request->code; $menu->parent_id = $request->parent_id; $menu->seq = $request->seq; $menu->save(); $this->setAfterUpdate($menu->toArray()); $this->addLog($id, 'update'); return new MenusResource($menu); } public function destroy($id) { $menu = Menu::query()->find($id); try { $menu->delete(); } catch (\Exception $e) { $this->res = [ 'httpCode' => 500, 'errorCode' => 500416, 'errorMessage' => $e->getMessage(), ]; } return response($this->res, $this->res['httpCode']); } }