cqpCow 1 year ago
parent
commit
d4352a4883

+ 17 - 0
app/Http/Controllers/Api/SysMenuController.php

@@ -69,4 +69,21 @@ class SysMenuController extends BaseController
             return $this->json_return(201,$data);
         }
     }
+
+    public function menuExport(Request $request){
+        $service = new SysMenuService();
+        list($status,$data) = $service->export($request->all());
+
+        if($status){
+            return $this->json_return(200,'',['file'=>$data]);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
+
+    //获取文件的位置
+    public function getExport($file_name){
+        $path = storage_path() . "/app/public/export/".$file_name;
+        return response()->file($path)->deleteFileAfterSend(true);
+    }
 }

+ 5 - 0
app/Model/RoleMenu.php

@@ -14,4 +14,9 @@ class RoleMenu extends Model
     const type_one = 1;//个人
     const type_two = 2;//部门
     const type_three = 3;//所有
+    public static $type_name = [
+        self::type_one => '我创建的',
+        self::type_two => '我的部门权限范围内',
+        self::type_three => '所有',
+    ];
 }

+ 89 - 0
app/Service/SysMenuService.php

@@ -2,12 +2,19 @@
 
 namespace App\Service;
 
+use App\Exports\ExportRule;
+use App\Exports\MultiSheetExport;
+use App\Exports\MyExport;
 use App\Model\Employee;
+use App\Model\Role;
 use App\Model\RoleMenu;
 use App\Model\RoleMenuButton;
 use App\Model\SysMenu;
 use App\Model\SysMenuButton;
 use Illuminate\Support\Facades\DB;
+use Maatwebsite\Excel\Excel;
+use Maatwebsite\Excel\Files\TemporaryFileFactory;
+use Maatwebsite\Excel\Writer;
 
 class SysMenuService extends Service
 {
@@ -257,4 +264,86 @@ class SysMenuService extends Service
         }
         return $data;
     }
+
+    public function export($data){
+        //(共有的)  菜单 =》 按钮
+        $sys_menu = SysMenu::where('del_time',0)
+            ->select('title','uri','parent_id','sort','id','is_authority')
+            ->orderBy('sort','desc')
+            ->get()->toArray();
+        $sys_menu_button = $this->fillMenuButton($sys_menu);
+
+        $role = Role::where('del_time',0)
+            ->select('id','title')
+            ->orderBy('id','desc')
+            ->get()->toArray();
+        $role_menu = RoleMenu::where('del_time',0)
+            ->whereIn('role_id',array_column($role,'id'))
+            ->select('menu_id','role_id','type')
+            ->get()->toArray();
+        $role_menu_map = [];
+        foreach ($role_menu as $value){
+            $role_menu_map[$value['role_id']][] = $value;
+        }
+
+        $role_menu_button = RoleMenuButton::where('del_time',0)
+            ->whereIn('role_id',array_column($role,'id'))
+            ->select('menu_id','role_id','button_id')
+            ->get()->toArray();
+        $role_menu_button_map = [];
+        foreach ($role_menu_button as $value){
+            $role_menu_button_map[$value['role_id']][] = $value;
+        }
+
+        $result = [];
+        foreach ($role as $value){
+            $tmp = $sys_menu_button;
+            $role_menu_tmp = $role_menu_map[$value['id']] ?? [];
+            $role_menu_button_tmp = $role_menu_button_map[$value['id']] ?? [];
+            $menu_button = [];
+            $data_array = [];
+            $data_array[] = ['菜单名称','是否勾选菜单','菜单按钮','数据范围'];
+            foreach ($role_menu_button_tmp as $v){
+                $menu_button[$v['menu_id']][] = $v['button_id'];
+            }
+            foreach ($tmp as $k => $v){
+                $v['has_menu'] = 0;
+                $v['type'] = 0;
+                foreach ($role_menu_tmp as $v2){
+                    //菜单
+                    if($v2['menu_id'] == $v['id']) {
+                        $v['has_menu'] = 1;
+                        $v['type'] = $v2['type'];
+                    }
+
+                    //菜单下的按钮
+                    if(! empty($tmp[$k]['button'])){
+                        $button_tmp = $menu_button[$v['id']] ?? [];
+                        $str = "";
+                        foreach ($tmp[$k]['button'] as $v_b){
+                            if(in_array($v_b['id'],$button_tmp)){
+                                $str .= $v_b['title'] . ",";
+                            }
+                        }
+                        $v['button'] = rtrim($str,',');
+                    }else{
+                        $v['button'] = "";
+                    }
+                }
+
+                $rule = RoleMenu::$type_name[$v['type']] ?? "";
+                $data_array[] = [
+                    $v['title'],
+                    $v['has_menu'] ? "√" : "×",
+                    $v['button'],
+                    $rule
+                ];
+            }
+            $result[$value['title']] = $data_array;
+        }
+
+        $filename = date("Ymd").time().rand(1000,9999) . ".xlsx";
+        \Maatwebsite\Excel\Facades\Excel::store(new MultiSheetExport($result),"/public/export/{$filename}", null, 'Xlsx', []);
+        return [true,$filename];
+    }
 }

+ 4 - 0
routes/api.php

@@ -22,6 +22,8 @@ Route::any('test', 'Api\TestController@aa');
 Route::any('getHeaderWord', 'Api\HeaderWordController@getHeaderWord');
 //文件获取
 Route::any('uploadFiles/{file_name}', 'Api\FileUploadController@getFile');
+//获取导出规则
+Route::any('getExport','Api\SysMenuController@getExport');
 
 Route::group(['middleware'=> ['checkLogin']],function ($route){
     //oa
@@ -262,6 +264,8 @@ Route::group(['middleware'=> ['checkLogin']],function ($route){
 
     //导入
     $route->any('import','Api\ImportController@import');
+    //保存规则
+    $route->any('menuExport','Api\SysMenuController@menuExport');
 
     //获取默认表头
     $route->any('getTableHead','Api\TableHeadController@tableHeadGet');