getIntersectPermitting(); $userDetailQuery = UserDetail::query()->select('user_id')->where('type','临时工'); $query = User::with(['roles','logistics','userWorkgroups','suppliers','userDetail'])->whereNotIn('id',$userDetailQuery); if($request->has('name')){ $user=$request->input('name'); $query->where('name','like',$user.'%'); } if($request->has('role')){ $role = $request->input('role'); $query->whereHas('roles',function($query) use ($role){ if (strpos($role, ',') || strpos($role, ',') || strpos($role, ' ')) { $arr = array_filter(preg_split('/[,, ]+/is', $role)); $query->whereIn('name', $arr); unset($role); } else { $query->where('name','like',$role.'%'); } }); } if($request->input('owners')){ $owner_id= $request->input('owners'); $owner_ids = array_filter(preg_split('/[,, ]+/is',$owner_id)); $ownerIds=[]; foreach ($owner_ids as $id)$ownerIds[]='_'.$id; $query->whereHas('roles',function($query) use ($ownerIds){ $query->whereHas('authorities',function ($query)use($ownerIds){ $query->whereIn('name',$ownerIds); }); }); } $users = $query->orderBy('id','desc')->paginate($request->paginate ?? 50); $users->each(function (User $user){ $user['isSuperAdmin']=$user->isSuperAdmin(); }); return view('maintenance.user.index',compact('users','owners')); } /** * Show the form for creating a new resource. * * @return Response */ public function create() { if(!Gate::allows('用户-录入')){ return redirect(url('/')); } $roles=Role::all(); $logistics=app('LogisticService')->getSelection(["id","name"],null); $userWorkgroups=UserWorkgroup::query()->get(); $suppliers=Supplier::query()->get(); //工作组 项目组 /* @var $user User */ $workGroup = app('WarehouseService')->getTreeData(); $ownerGroup = app('UserOwnerGroupService')->getSelection(); return view('maintenance.user.create',['rolesAll'=>$roles,'logistics'=>$logistics,'userWorkgroups'=>$userWorkgroups,'suppliers'=>$suppliers, 'ownerGroup' => $ownerGroup, 'workGroup'=>$workGroup]); } protected function validatorCreate(array $data) { return Validator::make($data, [ 'name' => ['required', 'string', 'max:50', 'unique:users'], ]); } protected function validatorUpdate(array $data) { return Validator::make($data, [ 'name' => ['required', 'string', 'max:50'], ]); } /** * Show the form for editing the specified resource. * * @param User $user * @return Response */ public function edit(User $user) { if(!Gate::allows('用户-编辑')){ return redirect(url('/')); } $user=$user->loadMissing('userDetail'); $rolesAll=Role::all(); $roles=$user->roles()->get(); $logistics=app('LogisticService')->getSelection(["id","name"],null); $logisticUser=$user->logistics()->get(); $userWorkgroups=UserWorkgroup::query()->get(); $userWorkgroup=$user->userWorkgroups()->first(); $supplierUser=$user->suppliers()->get(); $suppliers=Supplier::query()->get(); //工作组 项目组 /* @var $user User */ $workGroup = app('WarehouseService')->getTreeData(); $group = $user->workGroups()->get(); $groups = []; foreach ($group as $v){ array_push($groups,'g'.$v->id); array_push($groups,'w'.$v->warehouse_id); } $workGroups = $groups; $ownerGroup = app('UserOwnerGroupService')->getSelection(); $ownerGroups = $user->ownerGroups->pluck('id'); return view('maintenance.user.edit',compact('user','rolesAll','roles','logistics','logisticUser','userWorkgroups','userWorkgroup','suppliers','supplierUser','workGroup','workGroups','ownerGroup','ownerGroups')); } /** * Update the specified resource in storage. * * @param Request $request * @param User $user * @return Response */ public function update(Request $request, User $user) { if(!Gate::allows('用户-编辑')){ return redirect(url('/')); } $this->validatorUpdate($request->all())->validate(); $user->fill($request->all()); $user->update(); $rolesIds=$request->input('role')??''; if($rolesIds){ $roleIdArr=explode(',',$rolesIds); $user->roles()->sync($roleIdArr); }else{ $user->roles()->sync([]); } $supplierIds=$request->input('supplier')??''; if($supplierIds){ $supplierIdArr=explode(',',$supplierIds); $user->suppliers()->sync($supplierIdArr); }else{ $user->suppliers()->sync([]); } $carrierIds=$request->input('logistic')??''; if($carrierIds){ $carrierIds=explode(',',$carrierIds); $user->logistics()->sync($carrierIds); }else{ $user->logistics()->sync([]); } $userWorkgroupId=$request->input('userWorkgroupID'); if($userWorkgroupId){ $user->userWorkgroups()->sync([$userWorkgroupId]); }else{ $user->userWorkgroups()->sync([]); } $phone=$request->input('phone'); $user=$user->loadMissing('userDetail'); if ($phone){ if (!$user->userDetail) UserDetail::query()->create(['user_id'=>$user->id,'mobile_phone'=>$phone]); UserDetail::query()->where('user_id',$user->id) ->update(['mobile_phone'=>$phone]); } //工作组 $work_id = []; $treeData = $request->input('treeData')??[]; foreach ($treeData as $v){ if (strrpos($v,'g') === 0) array_push($work_id, mb_substr($v,1)); } if ($work_id)$user->workGroups()->sync($work_id); //项目组 $owners = $request->input('ownerGroup')??''; if ($owners)$user->ownerGroups()->sync($owners); app('LogService')->log(__METHOD__,__FUNCTION__,json_encode($request->toArray()),Auth::user()['id']); app("UserService")->clearUserCache($user); return redirect('maintenance/user/')->with('successTip',"成功修改用户“{$user['name']}”!"); } /** * Remove the specified resource from storage. * * @param User $user * @return array|Response * @throws Exception */ public function destroy(User $user) { if(!Gate::allows('用户-删除')){ return redirect(url('/')); } app('LogService')->log(__METHOD__,__FUNCTION__,$user->toJson(),Auth::user()['id']); $re=$user->delete(); app("UserService")->clearUserCache($user); return ['success'=>$re]; } /** * 重置密码 */ public function resetPassword() { $this->gate("用户-编辑"); $user = User::query()->find(\request("id")); if (!$user)$this->error("用户不存在"); if (array_search($user->name,config("users.superAdmin"))!==false)$this->error("无权操作超管账户"); $user->update(["password" => Hash::make(request("pwd"))]); $this->success(); } //工作组 public function saveWorkGroups(Request $request) { if(!Gate::allows('用户-编辑')){ return redirect(url('/')); } $params = $request->all(); $work_id = []; foreach ($params['workGroups'] as $v){ if (strrpos($v,'g') === 0 ) array_push($work_id, mb_substr($v,1)); } /* @var $user User */ $user = User::query()->find($params['id']); $user->workGroups()->sync($work_id); return ['success'=>true]; } //工作组 public function saveOwnerGroups(Request $request) { if(!Gate::allows('用户-编辑')){ return redirect(url('/')); } $params = $request->all(); /* @var $user User */ $user = User::query()->find($params['id']); $user->ownerGroups()->sync($params['ownerGroups']); return ['success'=>true]; } /** * 获取拥有货主 * * @param Request $request */ public function getOwners(Request $request) { $this->gate("用户-编辑"); $this->success(app("UserService")->getUserUnderOwnerIdArr($request->input("id"))); } /** * 绑定货主 * * @param Request $request */ public function bindOwner(Request $request) { $this->gate("用户-编辑"); $user = new User(); $user->id = $request->input("id"); $user->owners()->sync($request->input("owners",[])); Cache::pull("USER.{$user->id}.OWNER.ID"); $this->success(); } /** * 克隆目标用户 * * @param Request $request */ public function cloneBindOwner(Request $request) { $this->gate("用户-编辑"); $name = $request->input("target",""); $user = User::query()->where("name",$name)->first(); if (!$user)$this->error("目标用户不存在"); $owners = app("UserService")->getUserUnderOwnerIdArr($user->id); $user = new User(); $user->id = $request->input("id"); $user->owners()->sync($owners); Cache::pull("USER.{$user->id}.OWNER.ID"); $this->success(); } }