create.blade.php 12 KB

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