浏览代码

Merge remote-tracking branch 'origin/master'

gogs 1 年之前
父节点
当前提交
81e02ec8b4

+ 3 - 0
app/Http/Middleware/CheckLogin.php

@@ -39,6 +39,9 @@ class CheckLogin
 
         //人员角色
         $data['role'] = EmployeeService::getPersonRole($result);
+        //角色里所有菜单权限
+        $data['role_authority'] = EmployeeService::getPersonRoleQx($data['role']);
+
         $return = EmployeeService::getLoginDepart($result);
         //所属部门
         $data['rule_depart'] = $return[0] ?? [];

+ 2 - 0
app/Http/Middleware/CheckWx.php

@@ -60,6 +60,8 @@ class CheckWx
 
             //人员角色
             $data['role'] = EmployeeService::getPersonRole($employee_id);
+            //角色里所有菜单权限
+            $data['role_authority'] = EmployeeService::getPersonRoleQx($data['role']);
             $return = EmployeeService::getLoginDepart($employee_id);
             //所属部门
             $data['rule_depart'] = $return[0] ?? [];

+ 3 - 0
app/Model/RoleMenu.php

@@ -11,4 +11,7 @@ class RoleMenu extends Model
     const UPDATED_AT = 'upd_time';
     protected $dateFormat = 'U';
 
+    const type_one = 1;//个人
+    const type_two = 2;//部门
+    const type_three = 3;//所有
 }

+ 124 - 6
app/Model/UseScopeBaseModel.php

@@ -82,6 +82,113 @@ class UseScopeBaseModel extends Model
         //可见范围 以及单据里面填写人员
         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('depart_id', $depart_range);
+                    }else{
+                        if($auth_type == 1) { //我创建的 且加上可见
+                            $query->where('crt_id',$user['id'])
+                                ->orWhereIn('id', $id);
+                        }elseif ($auth_type == 2 || $auth_type == 3){
+                            //自己权限范围内的部门 或 所有
+                            $query->whereIn('depart_id', $depart_range);
+                        }
+                    }
+                }else{
+                    //可见
+                    $query->whereIn('id', $id);
+                }
+            }else{
+                if(! $is_see){
+                    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'])
+                                ->orWhereIn('id', $id);
+                        }elseif ($auth_type == 2 || $auth_type == 3){
+                            // (指定公司下的 且 自己权限范围内的部门 或 所有) 且加上可见
+                            $query->where('top_depart_id', $top_depart_id)
+                                ->whereIn('depart_id', $depart_range)
+                                ->orWhereIn('id', $id);
+                        }
+                    }
+                }else{
+                    //查看指定公司 且 我可见
+                    $query->whereIn('id', $id);
+                }
+            }
+        }else{
+            //非所有权限
+            if(! $is_see){
+                if(! $auth_type){
+                    //指定公司下全部  且加上可见
+                    $query->where('top_depart_id', $top_depart_id)
+                        ->whereIn('depart_id', $depart_range)
+                        ->orWhereIn('id', $id);
+                }else{
+                    if($auth_type == 1) {
+                        //指定公司下 且 我创建的 且加上可见
+                        $query->where('top_depart_id', $top_depart_id)
+                            ->where('crt_id',$user['id'])
+                            ->orWhereIn('id', $id);
+                    }elseif ($auth_type == 2) {
+                        //指定公司下 且 自己权限范围内的部门 且加上可见
+                        $query->where('top_depart_id', $top_depart_id)
+                            ->whereIn('depart_id', $depart_range)
+                            ->orWhereIn('id', $id);
+                    }elseif ($auth_type == 3) {
+                        // 指定公司下所有 且加上可见
+                        $query->where('top_depart_id', $top_depart_id)
+                            ->orWhereIn('id', $id);
+                    }
+                }
+            }else{
+                //某个分社可见
+                $query->whereIn('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)){
@@ -115,12 +222,6 @@ class UseScopeBaseModel extends Model
         }
     }
 
-    function hasMethod($class, $methodName)
-    {
-        $reflection = new \ReflectionClass($class);
-        return $reflection->hasMethod($methodName);
-    }
-
     //顶级部门过滤 取别名a
     public function scopeATopClear($query, $user, $search)
     {
@@ -205,4 +306,21 @@ class UseScopeBaseModel extends Model
                 ->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);
+    }
 }

+ 5 - 6
app/Service/ConstructionService.php

@@ -477,6 +477,7 @@ class ConstructionService extends Service
             ->select('title','id','model_type','order_number','customer_id','customer_contact_id','install_method','install_position','sales_order_id','construction_fee','construction_time','handover_time','urgency','crt_id','crt_time','mark','state','address1','address2','introduction','service_price','storehouse_id','start_time','end_time')
             ->orderby('id', 'desc');
 
+        if(isset($data['state'])) $model->where('state', $data['state']);
         if(! empty($data['title'])) $model->where('title', 'LIKE', '%'.$data['title'].'%');
         if(! empty($data['model_type'])) $model->where('model_type',$data['model_type']);
         if(! empty($data['time_type'])) {
@@ -877,17 +878,15 @@ class ConstructionService extends Service
         if(isset($data['construction_order_number'])) $model = DeliveryNote::where('id',$data['construction_order_number'])->where('del_time',0)->first();
         if(empty($model)) return [false,'数据不存在!'];
         $employee_key_list = Employee::pluck('emp_name','id')->toArray();
-        $detail = $model;
-        foreach ($detail as &$v){
-            $v['install_man_title'] = $employee_key_list[$v['install_man']];
-            $v['sale_man_title'] = $employee_key_list[$v['sale_man']];
-        }
+        $detail = $model->toArray();
+        $detail['install_man_title'] = $employee_key_list[$detail['install_man']] ?? "";
+        $detail['sale_man_title'] = $employee_key_list[$detail['sale_man']] ?? "";
 
         return [true,$detail];
     }
 
     public function deliveryNoteDel($data,$user){
-        DeliveryNote::where('img4',$data['id'])->update(
+        DeliveryNote::where('id',$data['id'])->update(
             [
                 'del_time' => time(),
                 'upd_id' => $user['id'],

+ 25 - 0
app/Service/EmployeeService.php

@@ -1102,6 +1102,31 @@ class EmployeeService extends Service
         return $role_id;
     }
 
+    public static function getPersonRoleQx($role_id){
+        if(empty($role_id)) return [];
+        $role = RoleMenu::where('del_time',0)
+            ->whereIn('role_id',$role_id)
+            ->select('menu_id','type')
+            ->get()->toArray();
+        $sysmenu = SysMenu::where('del_time',0)
+            ->where('is_authority','>',0)
+            ->select('id')
+            ->get()->toArray();
+        $sysmenu = array_column($sysmenu,'id');
+
+        $return = [];
+        foreach ($role as $value){
+            if(! in_array($value['menu_id'],$sysmenu)) continue;
+            if(isset($return[$value['menu_id']]) && $return[$value['menu_id']] < $value['type']){
+                $return[$value['menu_id']] = $value['type'];
+            }else{
+                $return[$value['menu_id']] = $value['type'];
+            }
+        }
+
+        return $return;
+    }
+
     //通过角色获取菜单
     public function getMenuByRoleInList($user){
         $role_id = $user['role'] ?? [];

+ 3 - 3
app/Service/SalesOrderService.php

@@ -600,12 +600,12 @@ class SalesOrderService extends Service
         if(! empty($data['order_type'])) $model->where('order_type',$data['order_type']);
         if(! empty($data['business_type'])) $model->where('business_type',$data['business_type']);
         if(! empty($data['sale_type'])) $model->where('sale_type',$data['sale_type']);
-        if(! empty($data['plat_type'])) $model->where('order_type',$data['plat_type']);
+        if(! empty($data['plat_type'])) $model->where('plat_type',$data['plat_type']);
         if(! empty($data['plat_order'])) $model->where('plat_order','LIKE', '%'.$data['plat_order'].'%');
         if(! empty($data['customer'])) {
             $model2 = Customer::Clear($user,$data);
-            $customer = $model->where('del_time',0)
-                ->where('title', 'LIKE', '%'.$data['title'].'%')
+            $customer = $model2->where('del_time',0)
+                ->where('title', 'LIKE', '%'.$data['customer'].'%')
                 ->select('id')
                 ->get()->toArray();
             $model->whereIn('customer_id',array_unique(array_column($customer,'id')));

+ 2 - 2
app/Service/SysMenuService.php

@@ -130,14 +130,14 @@ class SysMenuService extends Service
         else $type = '1';
         if($type === '1'){
             $return  = SysMenu::where('del_time',0)
-                ->select('title','icon','uri','parent_id','sort','crt_time','id')
+                ->select('title','icon','uri','parent_id','sort','crt_time','id','is_authority')
                 ->orderBy('sort','desc')
                 ->get()->toArray();
             $return = $this->fillMenuButton($return);
         }elseif($type === '2'){
             $list = SysMenu::where('del_time',0)
                 ->where('state',1)
-                ->select('title','icon','uri','parent_id','sort','crt_time','id')
+                ->select('title','icon','uri','parent_id','sort','crt_time','id','is_authority')
                 ->orderBy('sort','desc');
             //过滤菜单
             $emp = new EmployeeService();