Zhouzhendong 5 سال پیش
والد
کامیت
b4b13348b8

+ 12 - 0
app/Http/Controllers/MenuController.php

@@ -59,9 +59,11 @@ class MenuController extends Controller
         $this->success();
     }
 
+    //菜单更新时 刷掉全部菜单权限缓存 录入时刷掉超管权限 与 附加菜单缓存
     public function save()
     {
         $id = request("id");
+        $mapping = app("MenuService")->getMenuAndAuthorityMapping();
         if ($id){
             Menu::query()->where("id",$id)->update([
                 "name" => request("name"),
@@ -69,6 +71,9 @@ class MenuController extends Controller
                 "font" => request("font"),
                 "font_style" => request("font_style"),
             ]);
+            $authority = Authority::query()->where("id",$mapping[$id])->first();
+            if ($authority->name != request("name"))$authority->update(["name"=>request("name")]);
+            app("AuthorityService")->removeAllAuth();
             app("MenuService")->setMenu();//重建菜单缓存
             $this->success();
         }
@@ -80,6 +85,13 @@ class MenuController extends Controller
             "parent_id" => request("parent_id"),
             "level" => request("level"),
         ]);
+        Authority::query()->create([
+            'name' => $menu->name,
+            'id_parent' => $mapping[$menu->parent_id] ?? null,
+            'alias_name' => $menu->name.$menu->id,
+        ]);
+        app("AuthorityService")->removeAdminAuth();//刷掉超管权限缓存
+        app("MenuService")->appendMenu($menu);//为菜单总缓存附加
         $this->success($menu);
     }
     public function delete()

+ 15 - 1
app/Http/Controllers/TestController.php

@@ -162,7 +162,21 @@ class TestController extends Controller
 
     public function test()
     {
-        return view("test");
+        $authorities = app("AuthorityService")->getUserAuthority();
+        $authMap = [];
+        foreach ($authorities as $authority){
+            $item = $authority->toArray();
+            $item["child"] = [];
+            $authMap[$authority->id] = $item;
+        }
+        foreach ($authorities as $authority){
+            if ($authority->id_parent){
+                if (isset($authMap[$authority->id_parent]))$authMap[$authority->id_parent]["child"][] = $authMap[$authority->id];
+                else $authMap = app("MenuService")->formatAuthority($authMap,$authMap[$authority->id]);
+                unset($authMap[$authority->id]);
+            }
+        }
+        dd($authMap);
     }
 
     public function assignBatch(){

+ 25 - 5
resources/views/maintenance/menu/index.blade.php

@@ -2,37 +2,44 @@
 @section('title')菜单@endsection
 
 @section('content')
-    <div class="container-fluid" id="container" @drop="drop($event)" @dragover="dragover($event, false)">
+    <div class="container-fluid d-none" id="container" @drop="drop($event)" @dragover="dragover($event, false)">
         @include("maintenance.menu._modal")
         <div class="card" id="content">
             <div class="card-body">
                 @can("计量单位-录入")<button class="btn btn-outline-info mb-1 mr-3" @click="openModal()"><span class="fa fa-plus"></span>&nbsp;新&nbsp;&nbsp;增</button>@endcan
                 @can("计量单位-录入")<button class="btn border border-2 mb-1 mr-3" :class="isSaveSort ? 'btn-success' : 'text-secondary'" :disabled="!isSaveSort" @click="sort()"> 保 存 </button>@endcan
+                <div class="btn-group pull-right">
+                    <button class="btn border btn-primary" @click="expand(true)">展开全部</button>
+                    <button class="btn border btn-primary" @click="expand(false)">收起全部</button>
+                </div>
                 <div class="row text-nowrap">
                     <ul class="list-group col-9 offset-1" style="cursor: move;">
                         <li class="list-group-item" v-for="menu in menus" draggable="true" :id="'menu-'+menu.id"
                             :data-order="menu.sequence" :data-id="menu.id" :data-parent="menu.parent_id" :data-level="menu.level"
                             @drop="drop($event)" @dragover="dragover($event)" @dragstart.stop="dragstart(menu.id)">
+                            <span class="fa fa-angle-right pull-left cursor-pointer font-weight-bold" @click="slide(menu.id,$event)"></span>&nbsp;
                             <i v-show="menu.font" :class="'fa '+menu.font" :style="menu.font_style"></i>&nbsp;@{{ menu.name }}
                             <span class="fa fa-close pull-right text-danger" style="cursor: pointer" @click="delMenu(menu.id)"></span>
                             <span class="fa fa-edit pull-right text-primary mr-2" style="cursor: pointer" @click="openModal(menu)"></span>
-                            <div class="row" v-if="menu.child.length>0">
+                            <div class="row up" v-if="menu.child.length>0" :id="'slide-'+menu.id">
                                 <ul class="list-group col-9 offset-1">
                                     <li class="list-group-item" v-for="menu2 in menu.child" draggable="true" :id="'menu-'+menu2.id"
                                         :data-order="menu2.sequence" :data-id="menu2.id" :data-parent="menu2.parent_id" :data-level="menu2.level"
                                         @drop="drop($event)" @dragover="dragover($event,dragoverId!=menu.id)" @dragstart.stop="dragstart(menu2.id)">
+                                        <span class="fa fa-angle-right pull-left cursor-pointer font-weight-bold" @click="slide(menu2.id,$event)"></span>&nbsp;
                                         @{{ menu2.name }}
                                         <span class="fa fa-close pull-right text-danger" style="cursor: pointer" @click="delMenu(menu2.id)"></span>
                                         <span class="fa fa-edit pull-right text-primary mr-2" style="cursor: pointer" @click="openModal(menu2)"></span>
-                                        <div class="row" v-if="menu2.child.length>0">
+                                        <div class="row up" v-if="menu2.child.length>0" :id="'slide-'+menu2.id">
                                             <ul class="list-group col-9 offset-1">
                                                 <li class="list-group-item" v-for="menu3 in menu2.child" draggable="true" :id="'menu-'+menu3.id"
                                                     :data-order="menu3.sequence" :data-id="menu3.id" :data-parent="menu3.parent_id" :data-level="menu3.level"
                                                     @drop="drop($event)" @dragover="dragover($event,dragoverId!=menu2.id && dragoverId!=menu.id)" @dragstart.stop="dragstart(menu3.id)">
+                                                    <span class="fa fa-angle-right pull-left cursor-pointer font-weight-bold" @click="slide(menu3.id,$event)"></span>&nbsp;
                                                     @{{ menu3.name }}
                                                     <span class="fa fa-close pull-right text-danger" style="cursor: pointer" @click="delMenu(menu3.id)"></span>
                                                     <span class="fa fa-edit pull-right text-primary mr-2" style="cursor: pointer" @click="openModal(menu3)"></span>
-                                                    <div class="row" v-if="menu3.child.length>0">
+                                                    <div class="row up" v-if="menu3.child.length>0" :id="'slide-'+menu3.id">
                                                         <ul class="list-group col-9 offset-1">
                                                             <li class="list-group-item" v-for="menu4 in menu3.child" draggable="true" :id="'menu-'+menu4.id"
                                                                 :data-order="menu4.sequence" :data-id="menu4.id" :data-parent="menu4.parent_id" :data-level="menu4.level"
@@ -91,8 +98,21 @@
                 });
                 this.menus = menuMap;
                 this._formatSelected();
+                setTimeout(function(){
+                    $(".up").slideUp();
+                    $("#container").removeClass("d-none");
+                },0);
             },
             methods:{
+                expand(isExpand){
+                    if (isExpand) $(".up").slideDown();
+                    else $(".up").slideUp();
+                },
+                slide(id,e){
+                    $("#slide-"+id).slideToggle();
+                    if (e.target.className.indexOf('right')===-1)e.target.className = "fa fa-angle-right pull-left cursor-pointer font-weight-bold";
+                    else e.target.className = "fa fa-angle-down pull-left cursor-pointer font-weight-bold";
+                },
                 delMenu(id){
                     window.tempTip.confirm("确认要删除此菜单及其子级吗?",()=>{
                         let url = "{{url('maintenance/menu/delete')}}";
@@ -119,7 +139,7 @@
                     this.filterIcons = arr;
                 },
                 selectedIcon(icon){
-                    this.menu.font = icon;
+                    this.$set(this.menu,"font",icon);
                 },
                 _formatSelected(){
                     new Promise(()=>{