| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 | 
							- <?php
 
- namespace App\Model;
 
- use App\Scopes\TopDepartmentScope;
 
- use App\Service\RangeService;
 
- use Illuminate\Database\Eloquent\Model;
 
- class UseScopeBaseModel extends Model
 
- {
 
-     //可见范围
 
-     const range_function = '';
 
-     public function __construct(array $attributes = [])
 
-     {
 
-         parent::__construct($attributes);
 
-     }
 
-     //顶级部门过滤
 
-     public function scopeTopClear($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('top_depart_id', $depart_range);
 
-             }else{
 
-                 //查看某个分社
 
-                 $query->where('top_depart_id', $top_depart_id);
 
-             }
 
-         }else{
 
-             //某个分社全部
 
-             $query->where('top_depart_id', $top_depart_id);
 
-         }
 
-         return $query;
 
-     }
 
-     //部门和顶级部门(公司)过滤
 
-     public function scopeClear($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);
 
-             }
 
-         }
 
-     }
 
-     function hasMethod($class, $methodName)
 
-     {
 
-         $reflection = new \ReflectionClass($class);
 
-         return $reflection->hasMethod($methodName);
 
-     }
 
-     //顶级部门过滤 取别名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;
 
-     }
 
- }
 
 
  |