cqpCow 1 rok temu
rodzic
commit
8296f2af85

+ 7 - 5
app/Http/Middleware/CheckLogin.php

@@ -39,15 +39,17 @@ class CheckLogin
 
         //人员角色
         $data['role'] = EmployeeService::getPersonRole($result);
-        list($depart, $top, $map, $rule) = EmployeeService::getLoginDepart($result);
+        $return = EmployeeService::getLoginDepart($result);
         //所属部门
-        $data['rule_depart'] = $depart;
+        $data['rule_depart'] = $return[0] ?? [];
         //顶级部门
-        $data['depart_top'] = $top;
+        $data['depart_top'] = $return[1] ?? [];
         //部门对应的顶级部门
-        $data['depart_map'] = $map;
+        $data['depart_map'] = $return[2] ?? [];
         //权限范围内的部门
-        $data['depart_range'] = $rule;
+        $data['depart_range'] = $return[3] ?? [];
+        //是否有所有的部门 (为了拉 部门列表和人员列表数据)
+        $data['is_all_depart'] = $return[4] ?? 0;
 
         //写入user信息
         $request->userData = $data;

+ 36 - 3
app/Service/EmployeeService.php

@@ -181,6 +181,14 @@ class EmployeeService extends Service
             ->select('number','mobile','emp_name','id','entry_time','leave_time','is_admin','state')
             ->orderBy('id','desc');
 
+        if($user['id'] != Employee::SPECIAL_ADMIN && ! $user['is_all_depart']){
+            $depart_id = $this->getDepartIdList($user);
+            $employee_id = EmployeeDepartPermission::whereIn('depart_id',$depart_id)
+                ->select("employee_id")
+                ->get()->toArray();
+            $model->whereIn('id',array_unique(array_column($employee_id,'employee_id')));
+        }
+
         if(! empty($data['depart'])) {
             $employee_id = DB::table('employee_depart_permission')
                 ->where("depart_id", $data['depart'])
@@ -551,6 +559,11 @@ class EmployeeService extends Service
         $model = Depart::where('del_time',0)
             ->select('title','id','code','parent_id','is_main','grade')
             ->orderby('code', 'asc');
+
+        if($user['id'] != Employee::SPECIAL_ADMIN && ! $user['is_all_depart']){
+            $depart_id = $this->getDepartIdList($user);
+            $model->whereIn('id',$depart_id);
+        }
         if(! empty($data['title'])) $model->where('title', 'LIKE', '%'.$data['title'].'%');
         if(! empty($data['code'])) $model->where('code', 'LIKE', '%'.$data['code'].'%');
 
@@ -582,6 +595,23 @@ class EmployeeService extends Service
         return $list;
     }
 
+    //获取可见的部门范围
+    public function getDepartIdList($user){
+        $list = Depart::where('del_time',0)->select('id','parent_id')->get()->toArray();
+        $result = [];
+        foreach ($user['depart_range'] as $v){
+            // 查找所有父级id
+            $parentIds = $this->findParentIds($v, $list);
+            // 查找所有子级id
+            $childIds = $this->findChildIds($v, $list);
+            // 合并父级和子级id
+            $tmp = array_merge($parentIds, $childIds, [$v]);
+            $result = array_merge($result,$tmp);
+        }
+
+        return array_unique($result);
+    }
+
     /**
      * 部门参数规则
      * @param $data
@@ -1083,10 +1113,10 @@ class EmployeeService extends Service
      * @return array|string[]
      */
     public static function getLoginDepart($employee_id){
-        if(empty($employee_id)) return ['', '','',''];
+        if(empty($employee_id)) return [];
 
         //admin账号
-        if($employee_id == Employee::SPECIAL_ADMIN) return [Depart::RULE_DEPART, '','',''];
+        if($employee_id == Employee::SPECIAL_ADMIN) return [];
 
         //自己绑定的部门 启用的部门
         $depart = EmployeeDepartPermission::from('employee_depart_permission as a')
@@ -1098,6 +1128,7 @@ class EmployeeService extends Service
             ->get()->toArray();
 
         $top = $map = $rule = [];
+        $is_all_depart = 0;
         if(! empty($depart)){
             $list = Depart::where('del_time',0)->get()->toArray();
             $depart_map = array_column($list,null,'id');
@@ -1107,6 +1138,7 @@ class EmployeeService extends Service
                     $tmp['is_main'] = $value['is_main'];
                     $top[] = $tmp;
                     $map[$value['depart_id']] = $value['depart_id'];
+                    if(! empty($tmp['is_main']) && ! $is_all_depart) $is_all_depart = 1;
                 }else{
                     $t = self::getTopParentId($value['depart_id'],$list);
                     if($t && isset($depart_map[$t])) {
@@ -1114,6 +1146,7 @@ class EmployeeService extends Service
                         $tmp['is_main'] = $depart_map[$t]['is_main'];
                         $top[] = $tmp;
                         $map[$value['depart_id']] = $t;
+                        if(! empty($tmp['is_main']) && $value['is_main'] &&! $is_all_depart) $is_all_depart = 1;
                     }
                 }
             }
@@ -1148,7 +1181,7 @@ class EmployeeService extends Service
             }
         }
 
-        return [$depart, $top, $map, array_unique($rule)];
+        return [$depart, $top, $map, array_unique($rule), $is_all_depart];
     }
 
     //判断是否总公司

+ 33 - 0
app/Service/Service.php

@@ -371,4 +371,37 @@ class Service
         // 如果没有找到匹配的id,则返回null或者其他你希望的默认值
         return 0;
     }
+
+    // 递归查找所有父级id
+    public function findParentIds($id, $data) {
+        $parentIds = [];
+
+        foreach ($data as $item) {
+            if ($item['id'] == $id) {
+                $parentId = $item['parent_id'];
+                if ($parentId) {
+                    $parentIds[] = $parentId;
+                    $parentIds = array_merge($parentIds, $this->findParentIds($parentId, $data));
+                }
+                break;
+            }
+        }
+
+        return $parentIds;
+    }
+
+    // 递归查找所有子级id
+    public function findChildIds($id, $data) {
+        $childIds = [];
+
+        foreach ($data as $item) {
+            if ($item['parent_id'] == $id) {
+                $childId = $item['id'];
+                $childIds[] = $childId;
+                $childIds = array_merge($childIds, $this->findChildIds($childId, $data));
+            }
+        }
+
+        return $childIds;
+    }
 }