whereIn('top_depart_id', $depart_range); }else{ //查看某个分社 $query->where('top_depart_id', $top_depart_id); } }else{ //某个分社全部 $query->where('top_depart_id', $top_depart_id); } //获取当前门店下 if(! empty($search['get_my_top_depart_data'])){ $depart = ! empty($user['depart_top'][0]) ? $user['depart_top'][0]: []; $depart_id = $depart['depart_id'] ?? 0; $query->where('top_depart_id', $depart_id); } return $query; } //部门和顶级部门(公司)过滤 public function scopeClear($query, $user, $search) { //是否所有部门 $is_all_depart = $user['is_all_depart'] ?? 0; //权限范围内的部门 $depart_range = $user['depart_range'] ?? []; //我可见的 if(isset($search['is_see'])){ if($search['is_see']){ $is_see = 1; }else{ $is_see = 0; } }else{ $is_see = 0; } //全部 待审 待我审核 if(isset($search['is_check'])){ if($search['is_check']){ $is_check = $search['is_check']; }else{ $is_check = 0; } }else{ $is_check = 0; } $model = $query->getModel(); // 获取模型的实例 $className = get_class($model); // 获取模型类名 //可见范围方法 $range_function = ""; if (defined($className . '::range_function')) $range_function = $className::range_function; $function_range_bool = $this->hasMethod(new RangeService(),$range_function); //全部 待审 已审 $is_check_function = ""; if (defined($className . '::is_check_function')) $is_check_function = $className::is_check_function; $is_check_function_bool = $this->hasMethod(new RangeService(),$is_check_function); //顶级部门 $search_depart_id = $search['top_depart_id'] ?? 0; //顶级公司 if(empty($search_depart_id)){ //默认进来 自身顶级公司 $top_depart_id = $user['depart_top'][0] ?? []; $top_depart_id = $top_depart_id['depart_id'] ?? 0; }else{ //查询 顶级公司 $top_depart_id = $search_depart_id; } $id = []; //可见范围 以及单据里面填写人员 (状态类 是全部时检索) if($function_range_bool) $id = RangeService::$range_function($user,$search); //全部0 待审1 已审2 (状态类 是全部时检索) $check_search = ""; if($is_check_function_bool && $is_check) $check_search = RangeService::$is_check_function($user,$search); //个人部门所有 $auth_type = $this->getQx($search,$user); if($is_all_depart){ //所有权限 if(empty($search_depart_id)){ if($is_see){ //可见 $query->whereIn('id', $id); }elseif ($is_check){ if(! $auth_type){ //全部 $query->whereIn('depart_id', $depart_range) ->when(! empty($check_search), function ($query) use ($check_search) { return $query->whereRaw($check_search); }); }else{ if($auth_type == 1) { //我创建的 且加上可见 $query->where('crt_id',$user['id']) ->when(! empty($check_search), function ($query) use ($check_search) { return $query->whereRaw($check_search); }) ->when(! empty($id), function ($query) use ($id) { return $query->orWhereIn('id', $id); }); }elseif ($auth_type == 2 || $auth_type == 3){ //自己权限范围内的部门 或 所有 $query->whereIn('depart_id', $depart_range) ->when(! empty($check_search), function ($query) use ($check_search) { return $query->whereRaw($check_search); }); } } }else{ if(! $auth_type){ //全部 $query->whereIn('depart_id', $depart_range); }else{ if($auth_type == 1) { //我创建的 且加上可见 $query->where('crt_id',$user['id']) ->when(! empty($id), function ($query) use ($id) { return $query->orWhereIn('id', $id); }); }elseif ($auth_type == 2 || $auth_type == 3){ //自己权限范围内的部门 或 所有 $query->whereIn('depart_id', $depart_range); } } } }else{ if($is_see){ //查看指定公司 且 我可见 $query->whereIn('id', $id); }elseif ($is_check){ if(! $auth_type){ //查看指定公司 $query->where('top_depart_id', $top_depart_id) ->when(! empty($check_search), function ($query) use ($check_search) { return $query->whereRaw($check_search); }); }else{ if($auth_type == 1) { //指定公司下 且 我创建的 且加上可见 $query->where('top_depart_id', $top_depart_id) ->where('crt_id',$user['id']) ->when(! empty($check_search), function ($query) use ($check_search) { return $query->whereRaw($check_search); }) ->when(! empty($id), function ($query) use ($id) { return $query->orWhereIn('id', $id); }); }elseif ($auth_type == 2 || $auth_type == 3){ // (指定公司下的 且 自己权限范围内的部门 或 所有) 且加上可见 $query->where('top_depart_id', $top_depart_id) ->whereIn('depart_id', $depart_range) ->when(! empty($check_search), function ($query) use ($check_search) { return $query->whereRaw($check_search); }) ->when(! empty($id), function ($query) use ($id) { return $query->orWhereIn('id', $id); }); } } }else{ if(! $auth_type){ //查看指定公司 $query->where('top_depart_id', $top_depart_id); }else{ if($auth_type == 1) { //指定公司下 且 我创建的 且加上可见 $query->where('top_depart_id', $top_depart_id) ->where('crt_id',$user['id']) ->when(! empty($id), function ($query) use ($id) { return $query->orWhereIn('id', $id); }); }elseif ($auth_type == 2 || $auth_type == 3){ // (指定公司下的 且 自己权限范围内的部门 或 所有) 且加上可见 $query->where('top_depart_id', $top_depart_id) ->whereIn('depart_id', $depart_range) ->when(! empty($id), function ($query) use ($id) { return $query->orWhereIn('id', $id); }); } } } } }else{ //非所有权限 if($is_see){ //某个分社可见 $query->whereIn('id', $id); }elseif ($is_check){ if(! $auth_type){ //指定公司下全部 且加上可见 $query->where('top_depart_id', $top_depart_id) // ->whereIn('depart_id', $depart_range) ->when(! empty($check_search), function ($query) use ($check_search) { return $query->whereRaw($check_search); }) ->when(! empty($id), function ($query) use ($id) { return $query->orWhereIn('id', $id); }); }else{ if($auth_type == 1) { //指定公司下 且 我创建的 且加上可见 $query->where('top_depart_id', $top_depart_id) ->where('crt_id',$user['id']) ->when(! empty($check_search), function ($query) use ($check_search) { return $query->whereRaw($check_search); }) ->when(! empty($id), function ($query) use ($id) { return $query->orWhereIn('id', $id); }); }elseif ($auth_type == 2) { //指定公司下 且 自己权限范围内的部门 且加上可见 $query->where('top_depart_id', $top_depart_id) ->whereIn('depart_id', $depart_range) ->when(! empty($check_search), function ($query) use ($check_search) { return $query->whereRaw($check_search); }) ->when(! empty($id), function ($query) use ($id) { return $query->orWhereIn('id', $id); }); }elseif ($auth_type == 3) { // 指定公司下所有 且加上可见 $query->where('top_depart_id', $top_depart_id) ->when(! empty($check_search), function ($query) use ($check_search) { return $query->whereRaw($check_search); }) ->when(! empty($id), function ($query) use ($id) { return $query->orWhereIn('id', $id); }); } } }else{ if(! $auth_type){ //指定公司下全部 且加上可见 $query->where('top_depart_id', $top_depart_id) // ->whereIn('depart_id', $depart_range) ->when(! empty($id), function ($query) use ($id) { return $query->orWhereIn('id', $id); }); }else{ if($auth_type == 1) { //指定公司下 且 我创建的 且加上可见 $query->where('top_depart_id', $top_depart_id) ->where('crt_id',$user['id']) ->when(! empty($id), function ($query) use ($id) { return $query->orWhereIn('id', $id); }); }elseif ($auth_type == 2) { //指定公司下 且 自己权限范围内的部门 且加上可见 $query->where('top_depart_id', $top_depart_id) ->whereIn('depart_id', $depart_range) ->when(! empty($id), function ($query) use ($id) { return $query->orWhereIn('id', $id); }); }elseif ($auth_type == 3) { // 指定公司下所有 且加上可见 $query->where('top_depart_id', $top_depart_id) ->when(! empty($id), function ($query) use ($id) { return $query->orWhereIn('id', $id); }); } } } } if(! empty($search['get_my_top_depart_data'])){ $depart = ! empty($user['depart_top'][0]) ? $user['depart_top'][0]: []; $depart_id = $depart['depart_id'] ?? 0; $query->where('top_depart_id', $depart_id); } } //部门和顶级部门(公司)过滤 取别名a public function scopeAClear($query, $user, $search) { //是否所有部门 $is_all_depart = $user['is_all_depart'] ?? 0; //权限范围内的部门 $depart_range = $user['depart_range'] ?? []; //我可见的 $is_see = $search['is_see'] ?? 0; //可见范围方法 $model = $query->getModel(); // 获取模型的实例 $range_function = $model::range_function ?? ""; // 访问静态属性 $is_function_range = $this->hasMethod(new RangeService(),$range_function); //顶级部门 $search_depart_id = $search['top_depart_id'] ?? 0; //顶级公司 if(empty($search_depart_id)){ //默认进来 自身顶级公司 $top_depart_id = $user['depart_top'][0] ?? []; $top_depart_id = $top_depart_id['depart_id'] ?? 0; }else{ //查询 顶级公司 $top_depart_id = $search_depart_id; } $id = []; //可见范围 以及单据里面填写人员 if($is_function_range) $id = RangeService::$range_function($user,$search); //个人部门所有 $auth_type = $this->getQx($search,$user); if($is_all_depart){ //所有权限 if(empty($search_depart_id)){ if(! $is_see){ if(! $auth_type){ //全部 $query->whereIn('a.depart_id', $depart_range); }else{ if($auth_type == 1) { //我创建的 且加上可见 $query->where('a.crt_id',$user['id']) ->orWhereIn('a.id', $id); }elseif ($auth_type == 2 || $auth_type == 3){ //自己权限范围内的部门 或 所有 $query->whereIn('a.depart_id', $depart_range); } } }else{ //可见 $query->whereIn('a.id', $id); } }else{ if(! $is_see){ if(! $auth_type){ //查看指定公司 $query->where('a.top_depart_id', $top_depart_id); }else{ if($auth_type == 1) { //指定公司下 且 我创建的 且加上可见 $query->where('a.top_depart_id', $top_depart_id) ->where('a.crt_id',$user['id']) ->orWhereIn('a.id', $id); }elseif ($auth_type == 2 || $auth_type == 3){ // (指定公司下的 且 自己权限范围内的部门 或 所有) 且加上可见 $query->where('a.top_depart_id', $top_depart_id) ->whereIn('a.depart_id', $depart_range) ->orWhereIn('a.id', $id); } } }else{ //查看指定公司 且 我可见 $query->whereIn('a.id', $id); } } }else{ //非所有权限 if(! $is_see){ if(! $auth_type){ //指定公司下全部 且加上可见 $query->where('a.top_depart_id', $top_depart_id) ->whereIn('a.depart_id', $depart_range) ->orWhereIn('a.id', $id); }else{ if($auth_type == 1) { //指定公司下 且 我创建的 且加上可见 $query->where('a.top_depart_id', $top_depart_id) ->where('a.crt_id',$user['id']) ->orWhereIn('a.id', $id); }elseif ($auth_type == 2) { //指定公司下 且 自己权限范围内的部门 且加上可见 $query->where('a.top_depart_id', $top_depart_id) ->whereIn('a.depart_id', $depart_range) ->orWhereIn('a.id', $id); }elseif ($auth_type == 3) { // 指定公司下所有 且加上可见 $query->where('a.top_depart_id', $top_depart_id) ->orWhereIn('a.id', $id); } } }else{ //某个分社可见 $query->whereIn('a.id', $id); } } } //部门和顶级部门(公司)过滤 Old public function scopeClear1($query, $user, $search) { //是否所有部门 $is_all_depart = $user['is_all_depart'] ?? 0; //权限范围内的部门 $depart_range = $user['depart_range'] ?? []; //我可见的 $is_see = $search['is_see'] ?? 0; //可见范围方法 $model = $query->getModel(); // 获取模型的实例 $range_function = $model::range_function ?? ""; // 访问静态属性 $is_function_range = $this->hasMethod(new RangeService(),$range_function); //顶级部门 $search_depart_id = $search['top_depart_id'] ?? 0; //顶级公司 if(empty($search_depart_id)){ //默认进来 自身顶级公司 $top_depart_id = $user['depart_top'][0] ?? []; $top_depart_id = $top_depart_id['depart_id'] ?? 0; }else{ //查询 顶级公司 $top_depart_id = $search_depart_id; } $id = []; //可见范围 以及单据里面填写人员 if($is_function_range) $id = RangeService::$range_function($user,$search); if($is_all_depart){ //所有部门 if(empty($search_depart_id)){ if(! $is_see){ //全部 $query->whereIn('depart_id', $depart_range); }else{ //可见 $query->whereIn('id', $id); } }else{ if(! $is_see){ //查看某个分社 $query->where('top_depart_id', $top_depart_id); }else{ //查看某个分社可见 $query->whereIn('id', $id); } } }else{ //某个分社 if(! $is_see){ //某个分社全部 $query->where('top_depart_id', $top_depart_id) ->whereIn('depart_id', $depart_range) ->orWhereIn('id', $id); }else{ //某个分社可见 $query->whereIn('id', $id); } } } //顶级部门过滤 取别名a public function scopeATopClear($query, $user, $search) { //是否所有部门 $is_all_depart = $user['is_all_depart'] ?? 0; //权限范围内的部门 $depart_range = $user['depart_range'] ?? []; //顶级部门 $search_depart_id = $search['top_depart_id'] ?? 0; if(empty($search_depart_id)){ //默认进来 自身顶级公司 $top_depart_id = $user['depart_top'][0] ?? []; $top_depart_id = $top_depart_id['depart_id'] ?? 0; }else{ //查询 顶级公司 $top_depart_id = $search_depart_id; } if($is_all_depart){ //所有部门 if(empty($search_depart_id)){ //全部 $query->whereIn('a.top_depart_id', $depart_range); }else{ //查看某个分社 $query->where('a.top_depart_id', $top_depart_id); } }else{ //某个分社全部 $query->where('a.top_depart_id', $top_depart_id); } return $query; } //产品不可见 部门和顶级部门(公司)过滤 public function scopeProductClear($query, $user, $search) { //是否所有部门 $is_all_depart = $user['is_all_depart'] ?? 0; //权限范围内的部门 $depart_range = $user['depart_range'] ?? []; //总社id $top_depart_id = $user['head'] ?? []; $top_depart = $top_depart_id['id'] ?? 0; //可见范围方法 $model = $query->getModel(); // 获取模型的实例 $range_function = $model::range_function ?? ""; // 访问静态属性 $is_function_range = $this->hasMethod(new RangeService(),$range_function); //顶级部门 $search_depart_id = $search['top_depart_id'] ?? 0; //顶级公司 if(empty($search_depart_id)){ //默认进来 自身顶级公司 $top_depart_id = $user['depart_top'][0] ?? []; $top_depart_id = $top_depart_id['depart_id'] ?? 0; }else{ //查询 顶级公司 $top_depart_id = $search_depart_id; } $id = []; //产品 不可见范围 if($is_function_range) $id = RangeService::$range_function($user,$search); if($is_all_depart){ //所有部门 if(empty($search_depart_id)){ //全部 $query->whereIn('depart_id', $depart_range); }else{ //查看某个分社 $query->where('top_depart_id', $top_depart_id); } }else{ //某个分社全部 去掉不可见数 $query->where('top_depart_id', $top_depart_id) ->whereIn('depart_id', $depart_range) ->orWhere('top_depart_id',$top_depart) ->whereNotIn('id', $id); } } //产品不可见 部门和顶级部门(公司)过滤 public function scopeProductClear2($query, $user, $search) { //是否所有部门 $is_all_depart = $user['is_all_depart'] ?? 0; //权限范围内的部门 $depart_range = $user['depart_range'] ?? []; //总社id $top_depart_id = $user['head'] ?? []; $top_depart = $top_depart_id['id'] ?? 0; //可见范围方法 $model = $query->getModel(); // 获取模型的实例 $range_function = $model::range_function ?? ""; // 访问静态属性 $is_function_range = $this->hasMethod(new RangeService(),$range_function); //顶级部门 $search_depart_id = $search['top_depart_id'] ?? 0; //顶级公司 if(empty($search_depart_id)){ //默认进来 自身顶级公司 $top_depart_id = $user['depart_top'][0] ?? []; $top_depart_id = $top_depart_id['depart_id'] ?? 0; }else{ //查询 顶级公司 $top_depart_id = $search_depart_id; } $id = []; //产品 不可见范围 if($is_function_range) $id = RangeService::$range_function($user,$search); if($is_all_depart){ //所有部门 if(empty($search_depart_id)){ //全部 $query->whereIn('depart_id', $depart_range); }else{ //查看某个分社 $query->where('top_depart_id', $top_depart_id) ->orWhere('top_depart_id',$top_depart); } }else{ //某个分社全部 去掉不可见数 $query->where('top_depart_id', $top_depart_id) ->whereIn('depart_id', $depart_range) ->orWhere('top_depart_id',$top_depart) ->whereNotIn('id', $id); } } //活动包 部门和顶级部门(公司)过滤 public function scopeSportsBagClear($query, $user, $search) { //是否所有部门 $is_all_depart = $user['is_all_depart'] ?? 0; //权限范围内的部门 $depart_range = $user['depart_range'] ?? []; //总社id $top_depart_id = $user['head'] ?? []; $top_depart = $top_depart_id['id'] ?? 0; //可见范围方法 $model = $query->getModel(); // 获取模型的实例 $range_function = $model::range_function ?? ""; // 访问静态属性 $is_function_range = $this->hasMethod(new RangeService(),$range_function); $model = $query->getModel(); // 获取模型的实例 $className = get_class($model); // 获取模型类名 //全部 待审 待我审核 if(isset($search['is_check'])){ if($search['is_check']){ $is_check = $search['is_check']; }else{ $is_check = 0; } }else{ $is_check = 0; } //全部 待审 已审 $is_check_function = ""; if (defined($className . '::is_check_function')) $is_check_function = $className::is_check_function; $is_check_function_bool = $this->hasMethod(new RangeService(),$is_check_function); //全部0 待审1 已审2 (状态类 是全部时检索) $check_search = ""; if($is_check_function_bool && $is_check) $check_search = RangeService::$is_check_function($user,$search); //顶级部门 $search_depart_id = $search['top_depart_id'] ?? 0; //顶级公司 if(empty($search_depart_id)){ //默认进来 自身顶级公司 $top_depart_id = $user['depart_top'][0] ?? []; $top_depart_id = $top_depart_id['depart_id'] ?? 0; }else{ //查询 顶级公司 $top_depart_id = $search_depart_id; } $id = []; //不可见范围 if($is_function_range) $id = RangeService::$range_function($user,$search); if($is_all_depart){ //所有部门 if(empty($search_depart_id)){ //全部 $query->whereIn('depart_id', $depart_range) ->when(! empty($check_search), function ($query) use ($check_search) { return $query->whereRaw($check_search); }); }else{ //查看某个分社 $query->where('top_depart_id', $top_depart_id) ->when(! empty($check_search), function ($query) use ($check_search) { return $query->whereRaw($check_search); }); } }else{ if($check_search){ $check_search2 = "(" . $check_search . " And top_depart_id = {$top_depart})"; } else{ $check_search2 = "(top_depart_id = {$top_depart})"; } //某个分社全部 去掉不可见数 $query->where('top_depart_id', $top_depart_id) ->when(! empty($check_search), function ($query) use ($check_search) { return $query->whereRaw($check_search); }) ->whereIn('depart_id', $depart_range) ->whereNotIn('id', $id) ->OrWhereRaw($check_search2); } } public function getQx($data, $user){ if(empty($data['menu_id'])) return 0; if($user['id'] == Employee::SPECIAL_ADMIN) return 0; if(! empty($user['role_authority'][$data['menu_id']])) { //指定菜单 显示对应权限 return $user['role_authority'][$data['menu_id']]; }else{ return 0; } } function hasMethod($class, $methodName) { $reflection = new \ReflectionClass($class); return $reflection->hasMethod($methodName); } }