cqpCow 1 سال پیش
والد
کامیت
032622a63b
2فایلهای تغییر یافته به همراه60 افزوده شده و 5 حذف شده
  1. 55 2
      app/Service/EmployeeService.php
  2. 5 3
      app/Service/SysMenuService.php

+ 55 - 2
app/Service/EmployeeService.php

@@ -1104,9 +1104,9 @@ class EmployeeService extends Service
     }
 
     //通过角色获取菜单
-    public function getMenuByRoleInList($role_id,$user){
+    public function getMenuByRoleInList($user){
+        $role_id = $user['role'] ?? [];
         $menu = SysMenu::where('del_time',0)->select('id')->get()->toArray();
-
         if($user['id'] == Employee::SPECIAL_ADMIN) return array_column($menu,'id');
 
         //没绑定角色
@@ -1119,6 +1119,59 @@ class EmployeeService extends Service
         return array_column($role_menu,'menu_id');
     }
 
+    //通过角色获取菜单以及按钮
+    public function getMenuByRole($user){
+        $role_id = $user['role'] ?? [];
+
+        $menu = SysMenu::where('del_time',0)->select('id','uri')->get()->toArray();
+        $button = SysMenuButton::where('del_time',0)->select('id','title','sort','func','menu_id')->get()->toArray();
+        $button_map = [];
+        foreach ($button as $value){
+            $button_map[$value['menu_id']][] = $value;
+        }
+
+        //超级管理员
+        if($user['id'] == Employee::SPECIAL_ADMIN){
+            $object = [];
+            foreach ($menu as $value){
+                $object[] = [
+                    'id' => $value['menu_id'],
+//                    'type' => 0,//所有权限
+                    'uri' => $value['uri'],
+                    'button' => $button_map[$value['id']] ?? [],
+                ];
+            }
+        }else{
+            //没绑定角色
+            if(empty($role_id)) return [];
+
+            $search = RoleMenu::whereIn('role_id',$role_id)
+                ->where('del_time',0)
+                ->select('menu_id','type')
+                ->get()->toArray();
+            $menu_map = array_column($menu,'uri','id');
+            //该角色下 菜单里所有按钮
+            $button_menu = $this->fillRoleButton($role_id);
+            $button_t = array_column($button,null,'id');
+            foreach ($search as $value){
+                $bt = $button_menu[$value['menu_id']] ?? [];
+                $new = [];
+                foreach ($bt as $b){
+                    if(! empty($button_t[$b])) $new[] = $button_t[$b];
+                }
+
+                $object[] = [
+                    'id' => $value['menu_id'],
+                    'uri' => $menu_map[$value['menu_id']] ?? '',
+//                    'type' => $value['type'],
+                    'button' => $new,
+                ];
+            }
+        }
+
+        return $object;
+    }
+
     /**
      * 人员直接绑定部门
      * @param $data

+ 5 - 3
app/Service/SysMenuService.php

@@ -129,19 +129,21 @@ class SysMenuService extends Service
                 ->orderBy('sort','desc')
                 ->get()->toArray();
             $return = $this->fillMenuButton($return);
-        }else{
+        }elseif($type === '2'){
             $list = SysMenu::where('del_time',0)
                 ->where('state',1)
                 ->select('title','icon','uri','parent_id','sort','crt_time','id')
                 ->orderBy('sort','desc');
             //过滤菜单
             $emp = new EmployeeService();
-            $role = $emp->getPersonRole($user['id']);
-            $menu = $emp->getMenuByRoleInList($role,$user);
+            $menu = $emp->getMenuByRoleInList($user);
             $list->whereIn('id',$menu);
             $list = $list->get()->toArray();
             $return = $this->makeTree(0,$list);
             $return = $this->set_sort_circle($return);
+        }else{
+            //菜单的按钮
+            $return = (new EmployeeService())->getMenuByRole($user);
         }
 
         return [200, $return];