|
@@ -0,0 +1,718 @@
|
|
|
+<?php
|
|
|
+
|
|
|
+namespace App\Model;
|
|
|
+
|
|
|
+use App\Service\RangeService;
|
|
|
+use Illuminate\Database\Eloquent\Model;
|
|
|
+
|
|
|
+class UseScopeBaseModel extends Model
|
|
|
+{
|
|
|
+ //可见范围
|
|
|
+ const range_function = '';
|
|
|
+ const is_check_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);
|
|
|
+ }
|
|
|
+
|
|
|
+ //获取当前门店下
|
|
|
+ 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{
|
|
|
+ //某个分社全部 去掉不可见数
|
|
|
+ $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)
|
|
|
+ ->orWhere('top_depart_id',$top_depart)
|
|
|
+ ->whereNotIn('id', $id);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+}
|