cqp 1 mesiac pred
rodič
commit
0b0f593822
1 zmenil súbory, kde vykonal 150 pridanie a 257 odobranie
  1. 150 257
      app/Model/UseScopeBaseModel.php

+ 150 - 257
app/Model/UseScopeBaseModel.php

@@ -67,29 +67,15 @@ class UseScopeBaseModel extends Model
         //权限范围内的部门
         $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;
-        }
-
+        $is_see = ! empty($search['is_see']);
         //全部 待审 待我审核
-        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); // 获取模型类名
+        $is_check = ! empty($search['is_check']);
+        //个人 部门 所有
+        $auth_type = $this->getQx($search,$user);
+        // 获取模型的实例
+        $model = $query->getModel();
+        // 获取模型类名
+        $className = get_class($model);
 
         //可见范围方法
         $range_function = "";
@@ -101,15 +87,20 @@ class UseScopeBaseModel extends Model
         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; //顶级公司
+        //外部传入的
+        $search_depart_id = $search['top_depart_id'] ?? 0;
+        //自身的
+        $my_top_depart_id = $user['depart_top'][0] ?? [];
+        $my_top_depart_id = $my_top_depart_id['depart_id'] ?? 0;
         if(empty($search_depart_id)){
-            //默认进来 自身顶级公司
-            $top_depart_id = $user['depart_top'][0] ?? [];
-            $top_depart_id = $top_depart_id['depart_id'] ?? 0;
+           $top_depart_id = $my_top_depart_id;
         }else{
-            //查询 顶级公司
-            $top_depart_id = $search_depart_id;
+            if($is_all_depart){
+                //顶级公司
+                $top_depart_id = $search_depart_id;
+            }else{
+                $top_depart_id = $my_top_depart_id;
+            }
         }
 
         $id = [];
@@ -120,196 +111,161 @@ class UseScopeBaseModel extends Model
         $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($is_see){
+            //我可见的
+            $query->whereIn('id', $id);
+        }elseif($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);
-                        }
-                    }
+            $this->allDepart($query, $is_check, $auth_type, $user, $depart_range, $search_depart_id, $top_depart_id, $id, $check_search);
+        }else{
+            //非所有权限
+            $this->notAllDepart($query, $is_check, $auth_type, $user, $depart_range, $top_depart_id, $id, $check_search);
+        }
+
+        if(! empty($search['get_my_top_depart_data'])) $query->where('top_depart_id', $my_top_depart_id);
+    }
+
+    //最高权限
+    private function allDepart(&$query, $is_check, $auth_type, $user, $depart_range, $search_depart_id, $top_depart_id, $id, $check_search){
+        if(empty($search_depart_id)){
+            if ($is_check){
+                if(! $auth_type){
+                    //全部
+                    $query->when(! empty($check_search), function ($query) use ($check_search) {
+                        return $query->whereRaw($check_search);
+                    });
+                }elseif($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($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);
-                                });
-                        }
-                    }
+                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 ($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);
+                        });
+                }elseif($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 == 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);
+                }elseif($auth_type == 1) { //指定公司下 且 我创建的  且加上可见
                     $query->where('top_depart_id', $top_depart_id)
-//                        ->whereIn('depart_id', $depart_range)
+                        ->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($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);
+    //非所有权限
+    private function notAllDepart(&$query, $is_check, $auth_type, $user, $depart_range, $top_depart_id, $id, $check_search){
+        if ($is_check){
+            if(! $auth_type || $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 == 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);
+                    });
+            }
+        }else{
+            if(! $auth_type || $auth_type == 3){
+                //指定公司下全部|所有  且加上可见
+                $query->where('top_depart_id', $top_depart_id)
+                    ->when(! empty($id), function ($query) use ($id) {
+                        return $query->orWhereIn('id', $id);
+                    });
+            }elseif($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);
+                    });
+            }
         }
     }
 
@@ -420,69 +376,6 @@ class UseScopeBaseModel extends Model
         }
     }
 
-    //部门和顶级部门(公司)过滤 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)
     {