edit.blade.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. @extends('layouts.app')
  2. @section('title')编辑-角色@endsection
  3. @section('content')
  4. <div id="nav2">
  5. @component('maintenance.menu')
  6. @endcomponent
  7. @component('maintenance.role.menu')
  8. <li class="nav-item">
  9. <a class="nav-link" href="{{URL::current()}}" :class="{active:isActive('edit',4)}">修改</a>
  10. </li>
  11. @endcomponent
  12. </div>
  13. <div class="container-fluid" id="editPanel">
  14. <div class="card">
  15. <div class="card-body">
  16. @if(Session::has('successTip'))
  17. <div class="alert alert-success h1">{{Session::get('successTip')}}!</div>
  18. @endif
  19. <form method="POST" action='{{url("maintenance/role/{$role->id}")}}'>
  20. @csrf
  21. @method('PUT')
  22. <div class="form-group row">
  23. <label for="name" class="col-2 col-form-label text-right">角色名称</label>
  24. <div class="col-8">
  25. <input type="text" class="form-control @error('name') is-invalid @enderror"
  26. name="name" autocomplete="off" value="@if(old('name')){{old('name')}}@else{{$role->name}}@endif" required>
  27. @error('name')
  28. <span class="invalid-feedback" role="alert">
  29. <strong>{{ $message }}</strong>
  30. </span>
  31. @enderror
  32. </div>
  33. </div>
  34. <div class="form-group row">
  35. <label for="authority" class="col-2 col-form-label text-md-right">允许权限</label>
  36. <div class="col-8">
  37. <input @keydown.enter.prevent="false" type="text" class="form-control tooltipTarget" placeholder="定位权限"
  38. @input="seekAuthority($event)" title="输入关键词快速定位下拉列表"></div>
  39. </div>
  40. <div class="form-group row">
  41. <label class="col-2"></label>
  42. <div class="col-5">
  43. <input name="authority" hidden v-model="authorities" >
  44. <div class="input-group" style="max-height: 245px; overflow-y: scroll;border-radius:5px;opacity:0.5;text-align: center;">
  45. <ul class="list-group" style="width: 100%" onselectstart="return false;">
  46. <li :data-original-title="authority.style ? '双击删除权限' :'双击添加权限'" v-for="authority in authoritiesFilterAll" v-if="authority.permission=='允许'" :id="authority.name" class="list-group-item list-group-item-action pt-0 pb-0"
  47. @dblclick="selectedAuthority(authority)" :class="authority.style ? 'active' :''"><span style="cursor: default;" :id="authority.name"> @{{ authority.name }} </span></li>
  48. </ul>
  49. </div>
  50. @error('authority')
  51. <span class="invalid-feedback">
  52. <strong>{{ $message }}</strong>
  53. </span>
  54. @enderror
  55. </div>
  56. <div class="col-3" v-if="authoritiesList.length>0">
  57. <div class="input-group" style="max-height: 245px; overflow-y: scroll;border-radius:5px;text-align: center;">
  58. <ul class="list-group tooltipTarget" style="width: 100%" onselectstart="return false;">
  59. <li title="双击删除权限" v-for="authority in authoritiesList" v-if="authority.permission=='允许'" class=" list-group-item list-group-item-action pt-0 pb-0"
  60. @dblclick="selectedAuthority(authority)"><span style="cursor: default;"> @{{ authority.name }} </span></li>
  61. </ul>
  62. </div>
  63. </div>
  64. </div>
  65. <div class="form-group row">
  66. <label for="authority" class="col-2 col-form-label text-md-right">禁止权限</label>
  67. <div class="col-8">
  68. <input @keydown.enter.prevent="false" type="text" class="form-control tooltipTarget" placeholder="定位权限"
  69. @input="seekAuthority($event)" title="输入关键词快速定位下拉列表"></div>
  70. </div>
  71. <div class="form-group row">
  72. <label class="col-2"></label>
  73. <div class="col-5">
  74. <input name="authority" hidden v-model="authorities" >
  75. <div class="input-group" style="max-height: 150px; overflow-y: scroll;border-radius:5px;opacity:0.5;text-align: center;">
  76. <ul class="list-group" style="width: 100%" >
  77. <li :data-original-title="authority.style ? '双击删除权限' :'双击添加权限'" v-for="authority in authoritiesAll" v-if="authority.permission=='禁止'" :id="authority.name" class="list-group-item list-group-item-action pt-0 pb-0"
  78. @dblclick="selectedAuthority(authority)" :class="authority.style ? 'active' :''"><span style="cursor: default;" :id="authority.name"> @{{ authority.name }} </span></li>
  79. </ul>
  80. </div>
  81. @error('authority')
  82. <span class="invalid-feedback">
  83. <strong>{{ $message }}</strong>
  84. </span>
  85. @enderror
  86. </div>
  87. <div class="col-3" v-if="authoritiesList.length>0">
  88. <div class="input-group" style="max-height: 150px; overflow-y: scroll;border-radius:5px;text-align: center;">
  89. <ul class="list-group tooltipTarget" style="width: 100%" >
  90. <li title="双击删除权限" v-for="authority in authoritiesList" v-if="authority.permission=='禁止'" class=" list-group-item list-group-item-action pt-0 pb-0"
  91. @dblclick="selectedAuthority(authority)"><span style="cursor: default;"> @{{ authority.name }} </span></li>
  92. </ul>
  93. </div>
  94. </div>
  95. </div>
  96. <div class="form-group row">
  97. <div class="col-8 offset-2">
  98. <input type="submit" class="btn btn-outline-dark form-control">
  99. </div>
  100. </div>
  101. </form>
  102. </div>
  103. </div>
  104. </div>
  105. @endsection
  106. @section('lastScript')
  107. <script>
  108. let vueList=new Vue({
  109. el:"#editPanel",
  110. data:{
  111. authoritiesAll:[
  112. @foreach( $authoritiesAll as $authority )
  113. {id:'{{$authority->id}}',name:'{{$authority->alias_name}}',style:false,permission:'{{$authority->permission}}'},
  114. @endforeach
  115. ],
  116. authoritiesFilterAll:[
  117. @foreach( $authoritiesAll as $authority )
  118. {id:'{{$authority->id}}',name:'{{$authority->alias_name}}',style:false,permission:'{{$authority->permission}}'},
  119. @endforeach
  120. ],
  121. authorities:[
  122. @if(old('authority'))
  123. {{ old('authority') }}
  124. @else
  125. @foreach( $authorities as $authority )
  126. {{$authority->id}},
  127. @endforeach
  128. @endif
  129. ],
  130. authoritiesList:[],
  131. },
  132. mounted:function(){
  133. $(".tooltipTarget").tooltip({'trigger':'hover'});
  134. if (this.authorities.length>0){
  135. let authoritiesList=this.authoritiesList;
  136. let authoritiesAll=this.authoritiesAll;
  137. let authorities=this.authorities;
  138. for (let i = 0; i < authorities.length; i++) {
  139. authoritiesAll.every(function (authorityAll) {
  140. if (authorityAll.id == authorities[i]) {
  141. authorityAll.style = true;
  142. authoritiesList.push({'id':authorityAll.id,'name':authorityAll.name,'permission':authorityAll.permission});
  143. return false;
  144. }
  145. return true;
  146. });
  147. }
  148. }
  149. },
  150. methods:{
  151. selectedAuthority:function (e) {
  152. let authorities=this.authorities;
  153. let authoritiesAll=this.authoritiesAll;
  154. let authoritiesList=this.authoritiesList;
  155. let isAuthorty=true;
  156. if (authorities) {
  157. for (let i = 0; i < authorities.length; i++) {
  158. if (authorities[i] == e.id) {
  159. authorities.splice(i,1);
  160. authoritiesAll.every(function (authorityAll) {
  161. if (authorityAll.id == e.id) {
  162. authorityAll.style = false;
  163. return false;
  164. }
  165. return true;
  166. });
  167. authoritiesList.every(function (authority,i) {
  168. if (authority.id==e.id){
  169. authoritiesList.splice(i,1);
  170. return false;
  171. }
  172. return true;
  173. });
  174. isAuthorty= false;
  175. break;
  176. }
  177. isAuthorty= true;
  178. }
  179. }
  180. if (isAuthorty || !authorities){
  181. authorities.push(e.id);
  182. authoritiesAll.every(function (authorityAll) {
  183. if (authorityAll.id==e.id){
  184. authorityAll.style=true;
  185. authoritiesList.push({'id':authorityAll.id,'name':authorityAll.name,'permission':authorityAll.permission});
  186. return false;
  187. }
  188. return true;
  189. });
  190. }
  191. setTimeout(function(){
  192. $(".tooltipTarget").tooltip({'trigger':'hover'});
  193. },10)
  194. },
  195. seekAuthority:function (e) {
  196. let $val=e.target.value;
  197. let authoritiesAll=this.authoritiesAll;
  198. let authoritiesFilterAll = this.authoritiesFilterAll;
  199. let bool = false;
  200. authoritiesAll.every(function (authorities) {
  201. let name=authorities.name;
  202. if (name.includes($val)){
  203. bool = true;
  204. return false;
  205. }
  206. return true;
  207. });
  208. console.log(bool);
  209. if($val === '' ){
  210. this.authoritiesFilterAll = this.authoritiesAll;
  211. }else if(bool) {
  212. this.authoritiesFilterAll = [];
  213. for (let i = 0; i < authoritiesAll.length; i++) {
  214. let authorities = authoritiesAll[i];
  215. let name = authorities.name;
  216. if (name.includes($val)) {
  217. this.authoritiesFilterAll.push(authorities);
  218. }
  219. }
  220. }
  221. },
  222. },
  223. });
  224. </script>
  225. @endsection