cqpCow 1 年間 前
コミット
cdd96b245a

+ 1 - 1
app/Http/Middleware/CheckLogin.php

@@ -24,7 +24,7 @@ class CheckLogin
 
         //校验token
         $result = TokenService::verifyToken($token);
-        if ($result < 0){
+        if ($result <= 0){
             return response()->json(['code'=>1,'msg'=>TokenService::error[$result],'data'=>null]);
         }
 

+ 0 - 1
app/Model/Employee.php

@@ -33,5 +33,4 @@ class Employee extends Model
         1 => '正常',
         2 => '停用'
     ];
-    const DEFAULT_PASS = '123456';
 }

+ 14 - 0
app/Model/RoleMenuButton.php

@@ -0,0 +1,14 @@
+<?php
+
+namespace App\Model;
+
+use Illuminate\Database\Eloquent\Model;
+
+class RoleMenuButton extends Model
+{
+    protected $table = "role_menu_button"; //指定表
+    const CREATED_AT = 'crt_time';
+    const UPDATED_AT = 'upd_time';
+    protected $dateFormat = 'U';
+
+}

+ 19 - 0
app/Model/SysMenuButton.php

@@ -0,0 +1,19 @@
+<?php
+
+namespace App\Model;
+
+use Illuminate\Database\Eloquent\Model;
+
+/**
+ * 菜单按钮
+ * Class Unit
+ * @package App\Models
+ */
+class SysMenuButton extends Model
+{
+    protected $table = "sys_menu_button"; //指定表
+    const CREATED_AT = 'crt_time';
+    const UPDATED_AT = 'upd_time';
+    protected $dateFormat = 'U';
+
+}

+ 41 - 2
app/Service/EmployeeService.php

@@ -11,7 +11,9 @@ use App\Model\EmployeeRole;
 use App\Model\EmployeeTeamPermission;
 use App\Model\Role;
 use App\Model\RoleMenu;
+use App\Model\RoleMenuButton;
 use App\Model\SysMenu;
+use App\Model\SysMenuButton;
 use App\Model\Team;
 use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Hash;
@@ -244,8 +246,9 @@ class EmployeeService extends Service
         DB::beginTransaction();
         try {
             RoleMenu::where('role_id',$data['role_id'])->update(['del_time' => time()]);
+            RoleMenuButton::where('role_id',$data['role_id'])->update(['del_time' => time()]);
 
-            $insert = [];
+            $insert = $insert2 = [];
             foreach ($data['menu'] as $t){
                 $insert[] = [
                     'role_id' => $data['role_id'],
@@ -253,6 +256,17 @@ class EmployeeService extends Service
                     'type' => $t['type'],
                     'crt_time' => time()
                 ];
+                if(! empty($t['button'])){
+                    foreach ($t['button'] as $b){
+                        $insert2[] = [
+                            'role_id' => $data['role_id'],
+                            'menu_id' => $t['menu_id'],
+                            'button_id' => $b,
+                            'crt_time' => time()
+                        ];
+                    }
+                RoleMenuButton::insert($insert2);
+                }
             }
             RoleMenu::insert($insert);
 
@@ -279,6 +293,10 @@ class EmployeeService extends Service
             ->where('del_time',0)
             ->select('menu_id','type')
             ->get()->toArray();
+        $button = $this->fillRoleButton($data['role_id']);
+        foreach ($menu as $key => $value){
+            $menu[$key]['button'] = $button[$value['menu_id']] ?? [];
+        }
         $role['menu'] = $menu;
 
         return [true, $role];
@@ -616,8 +634,13 @@ class EmployeeService extends Service
     }
 
     //获取登录账号的角色的菜单
-    public static function getMenuByRole($role_id,$user_id){
+    public function getMenuByRole($role_id,$user_id){
         $menu = SysMenu::where('del_time',0)->select('id')->get()->toArray();
+        $button = SysMenuButton::where('del_time',0)->select('id','menu_id')->get()->toArray();
+        $button_map = [];
+        foreach ($button as $value){
+            $button_map[$value['menu_id']][] = $value['id'];
+        }
         $object = [];//返回的模型
         if($user_id == Employee::SPECIAL_ADMIN){
             //超级管理员
@@ -625,6 +648,7 @@ class EmployeeService extends Service
                 $object[] = [
                     'type' => 0,//所有权限
                     'menu_id' => $value['id'],
+                    'button' => $button_map[$value['id']] ?? [],
                 ];
             }
             return $object;
@@ -637,10 +661,12 @@ class EmployeeService extends Service
             ->where('del_time',0)
             ->select('menu_id','type')
             ->get()->toArray();
+        $button = $this->fillRoleButton($role_id);
         foreach ($search as $value){
             $object[] = [
                 'menu_id' => $value['menu_id'],
                 'type' => $value['type'],
+                'button' => $button[$value['menu_id']] ?? [],
             ];
         }
 
@@ -696,4 +722,17 @@ class EmployeeService extends Service
 
         return [true,''];
     }
+
+    public function fillRoleButton($role_id){
+        $button = RoleMenuButton::where('role_id',$role_id)
+            ->where('del_time',0)
+            ->select('menu_id','button_id')
+            ->get()->toArray();
+        $button_map = [];
+        foreach ($button as $value){
+            $button_map[$value['menu_id']][] = $value['button_id'];
+        }
+
+        return $button_map;
+    }
 }

+ 122 - 22
app/Service/SysMenuService.php

@@ -3,39 +3,92 @@
 namespace App\Service;
 
 use App\Model\Employee;
+use App\Model\RoleMenu;
 use App\Model\SysMenu;
+use App\Model\SysMenuButton;
+use Illuminate\Support\Facades\DB;
 
 class SysMenuService extends Service
 {
     public function edit($data){
         list($status,$msg) = $this->menuRule($data,false);
-        if(!$status) return [$status,$msg];
+        if(! $status) return [$status,$msg];
+
+        DB::beginTransaction();
+        try{
+            $model = SysMenu::where('id',$data['id'])->first();
+            $model->title = $data['title'];
+            $model->icon = $data['icon'] ??  '';
+            $model->uri = $data['uri'];
+            $model->parent_id = $data['parent_id'];
+            $model->sort = $data['sort'] ?? 0;
+            $model->save();
+
+            $time = time();
+            //按钮
+            SysMenuButton::where('del_time',0)->where('menu_id',$data['id'])
+                ->update(['del_time' => $time]);
+            if(! empty($data['button'])){
+                $insert = [];
+                foreach ($data['button'] as $key => $value){
+                    $tmp = [];
+                    $tmp['menu_id'] = $model->id;
+                    $tmp['title'] = $value['title'];
+                    $tmp['sort'] = $key;
+                    $tmp['func'] = $value['func'];
+                    $tmp['crt_time'] = $time;
+                    $insert[] = $tmp;
+                }
+                SysMenuButton::insert($insert);
+            }
 
-        $model = SysMenu::where('id',$data['id'])->first();
-        $model->title = $data['title'];
-        $model->icon = $data['icon'] ??  '';
-        $model->uri = $data['uri'];
-        $model->parent_id = $data['parent_id'];
-        $model->sort = $data['sort'] ?? 0;
-        $model->save();
+            DB::commit();
+        }catch (\Exception $exception){
+            DB::rollBack();
+            return [false,$exception->getMessage()];
+        }
 
         return [true,'保存成功!'];
     }
 
     public function add($data,$user){
         list($status,$msg) = $this->menuRule($data);
-        if(!$status) return [$status,$msg];
-
-        $model = new SysMenu();
-        $sort = $model->where('parent_id',$data['parent_id'])->max('sort');
+        if(! $status) return [$status,$msg];
+
+        DB::beginTransaction();
+        try{
+            $model = new SysMenu();
+            $sort = $model->where('parent_id',$data['parent_id'])->max('sort');
+
+            $model->title = $data['title'];
+            $model->icon = $data['icon'] ??  '';
+            $model->uri = $data['uri'];
+            $model->parent_id = $data['parent_id'];
+            $model->sort = $sort ? $sort + 1 : 1;
+            $model->crt_id = $user['id'];
+            $model->save();
+
+            //按钮
+            if(! empty($data['button'])){
+                $time = time();
+                $insert = [];
+                foreach ($data['button'] as $key => $value){
+                    $tmp = [];
+                    $tmp['menu_id'] = $model->id;
+                    $tmp['title'] = $value['title'];
+                    $tmp['sort'] = $key;
+                    $tmp['func'] = $value['func'] ?? '';
+                    $tmp['crt_time'] = $time;
+                    $insert[] = $tmp;
+                }
+                SysMenuButton::insert($insert);
+            }
 
-        $model->title = $data['title'];
-        $model->icon = $data['icon'] ??  '';
-        $model->uri = $data['uri'];
-        $model->parent_id = $data['parent_id'];
-        $model->sort = $sort ? $sort + 1 : 1;
-        $model->crt_id = $user['id'];
-        $model->save();
+            DB::commit();
+        }catch (\Exception $exception){
+            DB::rollBack();
+            return [false,$exception->getMessage()];
+        }
 
         return [true,'保存成功!'];
     }
@@ -43,9 +96,25 @@ class SysMenuService extends Service
     public function del($data){
         if($this->isEmpty($data,'id')) return [false,'ID必须!'];
 
-        SysMenu::where('id',$data['id'])->update([
-            'del_time' => time()
-        ]);
+        $bool = RoleMenu::where('del_time',0)
+            ->where('menu_id',$data['id'])
+            ->exists();
+        if($bool) return [false,'菜单已绑定角色!'];
+
+        DB::beginTransaction();
+        try {
+            SysMenu::where('id',$data['id'])->update([
+                'del_time' => time()
+            ]);
+            SysMenuButton::where('menu_id',$data['id'])->update([
+                'del_time' => time()
+            ]);
+
+            DB::commit();
+        }catch (\Exception $exception){
+            DB::rollBack();
+            return [false,$exception->getMessage()];
+        }
 
         return [true,'删除成功'];
     }
@@ -58,6 +127,7 @@ class SysMenuService extends Service
                 ->select('title','icon','uri','parent_id','sort','crt_time','id')
                 ->orderBy('sort','desc')
                 ->get()->toArray();
+            $return = $this->fillMenuButton($return);
         }else{
             $list = SysMenu::where('del_time',0)
                 ->where('state',1)
@@ -80,6 +150,7 @@ class SysMenuService extends Service
         if($this->isEmpty($data,'title')) return [false,'名称不能为空!'];
         if($this->isEmpty($data,'parent_id')) return [false,'父级不存在!'];
 
+        //菜单
         if($is_check){
             $bool = SysMenu::where('title',$data['title'])
                 ->where('del_time',0)
@@ -93,6 +164,19 @@ class SysMenuService extends Service
         }
         if($bool) return [false,'菜单名称已经存在!'];
 
+        //按钮
+        if(! empty($data['button'])){
+            $title = array_column($data['button'],'title');
+            $title = array_map(function($val) {
+                return $val !== null ? $val : "";
+            }, $title);
+            $title_count = array_count_values($title);
+            foreach ($title as $value){
+                if(empty($value)) return [false,'按钮名称不能为空!'];
+                if($title_count[$value] > 1) return [false,'按钮名称不能重复'];
+            }
+        }
+
         return [true,''];
     }
 
@@ -138,4 +222,20 @@ class SysMenuService extends Service
 
         return [true,'移动成功'];
     }
+
+    public function fillMenuButton($data){
+        $button = SysMenuButton::where('del_time',0)
+            ->select('id','title','sort','func','menu_id')
+            ->whereIn('menu_id',array_column($data,'id'))
+            ->get()->toArray();
+        $button_map = [];
+        foreach ($button as $value){
+            $button_map[$value['menu_id']][] = $value;
+        }
+
+        foreach ($data as $key => $value){
+            $data[$key]['button'] = $button_map[$value['id']] ?? [];
+        }
+        return $data;
+    }
 }