when($request->filled('id'), fn ($q) => $q->where('id', $request->id)); } // 查询列表 public function select(Request $request) { $page = new Pages($request, Permissions::query()); $page->before(function ($query) { $query->select(Permissions::$selectFields) ->where('status', 1) ->whereNull('parent_id') ->orWhere('parent_id', 0) ->orderby('weight', 'desc'); return $query; }); $page->after(function ($result) { $result->each(function ($item) { $item->children = Permissions::descendantsOf($item->id)->toTree(); }); }); $result = $page->paginate(); return $result; } // 导出 public function export(Request $request) { $query = Permissions::select(Permissions::$selectFields); $query = $this->whens($query, $request); $query->orderBy('created_at', 'desc'); $header = []; $getEnValue = $this->getEnValue(); $excel = new SpoutExport($header); $excel->setData($query->get()); $result = $excel->setEnum($getEnValue)->spoutToExcel('excel_out'); return $result ? success($result['url']) : error(); } // 导入 public function import(Request $request) { $header = []; $getEnValue = $this->getEnValue(); $SpoutImport = new SpoutImport($header); $dataList = $SpoutImport->setRequest($request)->getExcelData(); return $dataList; } // 获取枚举值 public function getEnValue() { $data = [ 'open_status' => [ 0 => "待开卡", 1 => "开卡中", ] ]; return $data; } // 查询一条 public function find(Request $request) { $request->validate([ 'id' => 'required|integer', ]); $result = Permissions::where(['id' => $request->id])->select(Permissions::$selectFields)->first(); return success($result); } // 添加 public function insert(Request $request) { $request->validate([ 'name' => 'required', 'route' => 'required', ]); sys_log($request, '添加权限', '权限管理'); $name = $request->name; $route = $request->route; $weight = $request->input('weight', 0); if ($request->filled('parent_id')) { $parentNode = Permissions::find($request->parent_id); $node = new Permissions(['name' => $name, 'menu_level' => ($parentNode->menu_level ?? 0) + 1, 'route' => $route, 'guard_name' => 'web', 'weight' => $weight]); $result = $node->appendToNode($parentNode)->save(); } else { $node = new Permissions(['name' => $name,'menu_level' => 1, 'route' => $route, 'guard_name' => 'web', 'weight' => $weight]); $result = $node->save(); } if ($result) { return success(); } else { return error(); } } // 修改 public function update(Request $request) { $request->validate([ 'id' => 'required|integer', ]); sys_log($request, '修改权限', '权限管理'); $id = $request->input('id'); $category = Permissions::find($id); if ($request->filled('parent_id')) { $parent = Permissions::find($request->parent_id); $category->parent()->associate($parent); } else { $category->parent()->dissociate(); } // 更新其他字段 $result = $category->update($request->all()); if ($result) { return success(); } else { return error(); } } // 删除 public function delete(Request $request) { $request->validate([ 'ids' => 'required', ]); sys_log($request, '删除权限', '权限管理'); $id_arr = explode(",", $request->ids); $count = Permissions::whereIn('parent_id', $id_arr)->count(); if ($count > 0) { return ['code' => 0, 'msg' => "存在子数据,禁止删除"]; } $oplist = []; foreach ($id_arr as $perID) { $res = 0; $node = Permissions::find($perID); if ($node->roles()->count() > 0) { $oplist[] = [ 'id' => $perID, 'msg' => '权限正在被使用', 'status' => $res ]; continue; } $res = $node->delete(); $oplist[] = [ 'id' => $perID, 'status' => $res ]; } return ['code' => 1, 'msg' => 'success', 'data' => $oplist]; } // 获取用户权限列表 public function getUserPermissions(Request $request) { if ($request->filled('user_id')) { $user_id = $request->input('user_id'); } else { $user_id = auth()->id(); } // 获取用户权限 $user = AdminUsers::find($user_id); $permissions = $user->getAllPermissions()->pluck('id')->toArray(); // 树状展示权限 $perlist = Permissions::select(Permissions::$selectFields) ->whereIn('id', $permissions) ->where('status', 1) ->whereNull('parent_id') ->orWhere('parent_id', 0) ->orderby('weight', 'desc') ->get(); $perlist->each(function ($item) use ($permissions) { $item->children = Permissions::descendantsOf($item->id) ->where('status', 1) ->whereIn('id', $permissions) ->toTree(); }); return ['code' => 1, 'msg' => "success", 'data' => $perlist]; } }