index.blade.php 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. @extends('layouts.app')
  2. @section('title')权限@endsection
  3. @section('content')
  4. <div class="container-fluid" id="container">
  5. @include('maintenance.authority._add')
  6. @include('maintenance.authority._edit')
  7. <div class="card">
  8. <div class="card-body">
  9. <div class="w-100 mb-5">
  10. <div class="btn-group pull-left">
  11. <button class="btn btn-outline-primary" data-toggle="modal" data-target="#addModal"><span class="fa fa-plus"></span>&nbsp;新&nbsp;&nbsp;增</button>
  12. <button class="btn btn-outline-info" @click="openEditModal()"><span class="fa fa-edit"></span>&nbsp;修&nbsp;&nbsp;改</button>
  13. <button class="btn btn-outline-danger" @click="deleteAuthority()"><span class="fa fa-close"></span>&nbsp;删&nbsp;&nbsp;除</button>
  14. </div>
  15. <div class="btn-group pull-right">
  16. <button class="btn border btn-primary" @click="expand(true)">展开全部</button>
  17. <button class="btn border btn-primary" @click="expand(false)">收起全部</button>
  18. </div>
  19. </div>
  20. <div class="w-100" id="tree">
  21. <tree class="offset-2 h5 font-weight-bold" :list="list" :column="'name'"></tree>
  22. </div>
  23. </div>
  24. </div>
  25. </div>
  26. @stop
  27. @section('lastScript')
  28. <script type="text/javascript">
  29. new Vue({
  30. el:"#container",
  31. data:{
  32. list:[@foreach($authorities as $authority)@json($authority),@endforeach],
  33. parentList:[],
  34. authority:{parent_id:"",name:"",alias_name:"",permission:"允许"},
  35. errors:{},
  36. updateArr:[],
  37. },
  38. components:{
  39. 'tree':"url:{{asset("js/vue/tree.vue")}}"
  40. },
  41. mounted(){
  42. this.parentList = this._mergeArray(this.list);
  43. },
  44. methods:{
  45. expand(isExpand){
  46. if (isExpand) $(".up").slideDown();
  47. else $(".up").slideUp();
  48. },
  49. _mergeArray(arr,result = [],before = '&nbsp;'){
  50. if (!arr)return result;
  51. for (let i=0;i<arr.length;i++){
  52. result.push({id:arr[i].id,name:before+'└─'+arr[i].name});
  53. if (arr[i].child && arr[i].child.length>0)this._mergeArray(arr[i].child,result,before+'&nbsp;&nbsp;&nbsp;')
  54. }
  55. return result;
  56. },
  57. submitAuthority(){
  58. window.tempTip.postBasicRequest("{{url('maintenance/authority/store')}}",this.authority,res=>{
  59. if (res.errors){this.errors = res.errors;return;}
  60. this._pushToParent(this.list,res.parent_id,{id:res.id,parent_id:res.parent_id,name:res.name,alias_name:res.alias_name,child:[]});//推进父级
  61. setTimeout(()=>{
  62. this.parentList = this._mergeArray(this.list);//异步重构元素,先行返回
  63. });
  64. this.authority = {parent_id:"",name:"",alias_name:"",permission:"允许"};//重置列表
  65. //$("#addModal").modal('hide');
  66. return "录入成功";
  67. },true);
  68. },
  69. //推进父级
  70. _pushToParent(arr,id,result){
  71. let target = this._seekTarget(arr,id);
  72. if (!target.child)target.child = [];
  73. target.child.push(result);
  74. },
  75. _seekTarget(arr,id){
  76. if (!arr)return null;
  77. for (let i=0;i<arr.length;i++){
  78. if (arr[i].id==id)return arr[i];
  79. let result = this._seekTarget(arr[i].child,id);
  80. if (result)return result;
  81. }
  82. return null;
  83. },
  84. openEditModal(){
  85. let inputs = document.getElementById("tree").getElementsByTagName("INPUT");
  86. this.updateArr = [];
  87. for (let i=0;i<inputs.length;i++){
  88. if (inputs[i].checked)this.updateArr.push(this._seekTarget(this.list,inputs[i].value));
  89. }
  90. $("#editModal").modal('show');
  91. },
  92. updateAuthority(){
  93. let nodes = document.getElementsByName("authorityName");
  94. let updateList = [];
  95. let params=[];
  96. for(let i=0;i<nodes.length;i++){
  97. if (nodes[i].value!==this.updateArr[i].name){
  98. params.push({id:this.updateArr[i].id,name:nodes[i].value});
  99. updateList.push(i);
  100. }
  101. }
  102. if (params.length<1)return;
  103. window.tempTip.postBasicRequest("{{url('maintenance/authority/update')}}",{list:params},()=>{
  104. for (let i=0;i<updateList.length;i++){
  105. this.updateArr[updateList[i]].name = nodes[updateList[i]].value;
  106. }
  107. setTimeout(()=>{
  108. this.parentList = this._mergeArray(this.list);//异步重构元素,先行返回
  109. });
  110. $("#editModal").modal('hide');
  111. return "修改成功";
  112. },true);
  113. },
  114. deleteAuthority(){
  115. window.tempTip.confirm("确定要删除选中的权限吗?存在子级时无论是否被选中均会跟随父级被删除",()=>{
  116. let inputs = document.getElementById("tree").getElementsByTagName("INPUT");
  117. let destroy = [];
  118. for (let i=0;i<inputs.length;i++){
  119. if (!inputs[i].checked)continue;
  120. let id = inputs[i].value;
  121. destroy.push(id);
  122. let dom = document.getElementById('item-'+id);
  123. if (dom){
  124. let nodes = dom.getElementsByClassName("custom-control-input");
  125. for(let j=0;j<nodes.length;j++)destroy.push(nodes[j].value);
  126. }
  127. }
  128. window.tempTip.postBasicRequest("{{url('maintenance/authority/destroy')}}",{ids:destroy},()=>{
  129. for (let i=0;i<destroy.length;i++){
  130. let dom = document.getElementById("li-"+destroy[i]);
  131. if (dom)dom.remove();
  132. }
  133. return "删除成功";
  134. })
  135. });
  136. },
  137. },
  138. })
  139. </script>
  140. @stop