edit.blade.php 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318
  1. @extends('layouts.app')
  2. @section('title')编辑用户@endsection
  3. @section('content')
  4. <div id="nav2">
  5. @component('maintenance.menu')
  6. @endcomponent
  7. @component('maintenance.user.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 mt-3" 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/user/{$user->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{{$user->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="email" class="col-2 col-form-label text-right">邮箱</label>
  36. <div class="col-8">
  37. <input type="text" class="form-control @error('email') is-invalid @enderror"
  38. name="email" autocomplete="off" value="@if(old('email')){{old('email')}}@else{{$user->email}}@endif" required>
  39. @error('email')
  40. <span class="invalid-feedback" role="alert">
  41. <strong>{{ $message }}</strong>
  42. </span>
  43. @enderror
  44. </div>
  45. </div>
  46. <div class="form-group row">
  47. <label for="userWorkGroup" class="col-2 col-form-label text-right">工作组</label>
  48. <div class="col-8">
  49. <select class="form-control" name="userWorkGroupID" id="userWorkGroupID" v-model="userWorkGroupID">
  50. <option v-for="userWorkGroup in userWorkGroups" :value="userWorkGroup.id">@{{ userWorkGroup.name }}</option>
  51. </select>
  52. </div>
  53. </div>
  54. <div class="form-group row">
  55. <label for="role" class="col-md-3 col-form-label text-md-right">角色</label>
  56. <div class="col-md-7">
  57. <input type="text" class="form-control tooltipTarget" placeholder="定位角色"
  58. @input="seekRole($event)" title="输入关键词快速定位"></div>
  59. </div>
  60. <div class="form-group row">
  61. <label class="col-md-3"></label>
  62. <div class="col-md-4">
  63. <input name="role" hidden v-model="roles" >
  64. <div class="input-group" style="max-height: 150px; overflow-y: scroll;border-radius:5px;opacity:0.5;text-align: center;">
  65. <ul class="list-group tooltipTarget" style="width: 100%" onselectstart="return false;">
  66. <li :data-original-title="role.style ? '双击删除角色' :'双击添加角色'" v-for="role in rolesAll" :id="role.name" class="list-group-item list-group-item-action pt-0 pb-0"
  67. @dblclick="selectedRole(role)" :class="role.style ? 'active' :''"><span style="cursor: default;" :id="role.name"> @{{ role.name }} </span></li>
  68. </ul>
  69. </div>
  70. </div>
  71. <div class="col-md-3">
  72. <div class="input-group" style="max-height: 150px; overflow-y: scroll;border-radius:5px;text-align: center;">
  73. <ul class="list-group" style="width: 100%" onselectstart="return false;">
  74. <li title="双击删除角色" v-for="role in rolesList" :id="role.name" class="list-group-item list-group-item-action pt-0 pb-0"
  75. @dblclick="selectedRole(role)" ><span style="cursor: default;" > @{{ role.name }} </span></li>
  76. </ul>
  77. </div>
  78. </div>
  79. </div>
  80. <hr class="col-8 offset-2 border-info">
  81. {{--承运商--}}
  82. <div class="form-group row">
  83. <label for="carrier" class="col-md-3 col-form-label text-md-right">可见承运商</label>
  84. <div class="col-md-7">
  85. <input type="text" class="form-control tooltipTarget" placeholder="定位承运商"
  86. @input="seekCarrier($event)" title="输入关键词快速定位"></div>
  87. </div>
  88. <div class="form-group row">
  89. <label class="col-md-3"></label>
  90. <div class="col-md-4">
  91. <input name="carrier" hidden v-model="carriers" >
  92. <div class="input-group" style="max-height: 150px; overflow-y: scroll;border-radius:5px;opacity:0.5;text-align: center;">
  93. <ul class="list-group tooltipTarget" style="width: 100%" onselectstart="return false;">
  94. <li :data-original-title="carrier.style ? '双击删除承运商' :'双击添加承运商'" v-for="carrier in carriersAll" :id="carrier.name" class="list-group-item list-group-item-action pt-0 pb-0"
  95. @dblclick="selectedCarrier(carrier)" :class="carrier.style ? 'active' :''"><span style="cursor: default;" > @{{ carrier.name }} </span></li>
  96. </ul>
  97. </div>
  98. </div>
  99. <div class="col-md-3">
  100. <input name="carrier" hidden v-model="carriers" >
  101. <div class="input-group" style="max-height: 150px; overflow-y: scroll;border-radius:5px;text-align: center;">
  102. <ul class="list-group" style="width: 100%" onselectstart="return false;">
  103. <li title="双击删除承运商" v-for="carrier in carriersList" class="list-group-item list-group-item-action pt-0 pb-0"
  104. @dblclick="selectedCarrier(carrier)" ><span style="cursor: default;" > @{{ carrier.name }} </span></li>
  105. </ul>
  106. </div>
  107. </div>
  108. </div>
  109. <hr class="col-8 offset-2 border-info">
  110. <div class="form-group row">
  111. <div class="col-8 offset-2">
  112. <input type="submit" class="btn btn-outline-dark form-control">
  113. </div>
  114. </div>
  115. </form>
  116. </div>
  117. </div>
  118. </div>
  119. @endsection
  120. @section('lastScript')
  121. <script>
  122. let vueList=new Vue({
  123. el:"#editPanel",
  124. data:{
  125. userWorkGroupID:'{{old('userWorkGroupID')??($userWorkGroup?$userWorkGroup->id:'')}}',
  126. userWorkGroups:[
  127. @foreach($userWorkGroups as $userWorkGroup)
  128. {!! $userWorkGroup !!},
  129. @endforeach
  130. ],
  131. rolesAll:[
  132. @foreach( $rolesAll as $role )
  133. {id:'{{$role->id}}',name:'{{$role->name}}',style:false},
  134. @endforeach
  135. ],
  136. roles:[
  137. @if(old('role'))
  138. {{ old('role') }}
  139. @else
  140. @foreach( $roles as $role )
  141. {{$role->id}},
  142. @endforeach
  143. @endif
  144. ],
  145. rolesList:[],
  146. carriersAll:[
  147. @foreach($carriers as $carrier)
  148. {id:'{{$carrier->id}}',name:'{{$carrier->name}}',style:false},
  149. @endforeach
  150. ],
  151. carriers:[
  152. @if(old('carrier'))
  153. {{ old('carrier') }}
  154. @else
  155. @foreach( $carrierUser as $carrier )
  156. {{$carrier->id}},
  157. @endforeach
  158. @endif
  159. ],
  160. carriersList:[],
  161. },
  162. mounted:function(){
  163. $(".tooltipTarget").tooltip({'trigger':'hover'});
  164. if (this.roles.length>0){
  165. let rolesAll=this.rolesAll;
  166. let roles=this.roles;
  167. let rolesList=this.rolesList;
  168. for (let i = 0; i < roles.length; i++) {
  169. rolesAll.every(function (roleAll) {
  170. if (roleAll.id == roles[i]) {
  171. roleAll.style = true;
  172. rolesList.push({'id':roleAll.id,'name':roleAll.name});
  173. return false;
  174. }
  175. return true;
  176. });
  177. }
  178. }
  179. if (this.carriers.length>0){
  180. let carriersAll=this.carriersAll;
  181. let carriers=this.carriers;
  182. let carriersList=this.carriersList;
  183. for (let i = 0; i < carriers.length; i++) {
  184. carriersAll.every(function (carrierAll) {
  185. if (carrierAll.id == carriers[i]) {
  186. carrierAll.style = true;
  187. carriersList.push({'id':carrierAll.id,'name':carrierAll.name});
  188. return false;
  189. }
  190. return true;
  191. });
  192. }
  193. }
  194. },
  195. methods:{
  196. selectedCarrier:function (e) {
  197. let carriers=this.carriers;
  198. let carriersAll=this.carriersAll;
  199. let carriersList=this.carriersList;
  200. let isCarrier=true;
  201. if (carriers&&carriersAll) {
  202. for (let i = 0; i < carriers.length; i++) {
  203. if (carriers[i] == e.id) {
  204. carriers.splice(i,1);
  205. carriersAll.every(function (carrierAll) {
  206. if (carrierAll.id == e.id) {
  207. carrierAll.style = false;
  208. return false;
  209. }
  210. return true;
  211. });
  212. carriersList.every(function (carrier,i) {
  213. if (carrier.id==e.id){
  214. carriersList.splice(i,1);
  215. return false;
  216. }
  217. return true;
  218. });
  219. isCarrier= false;
  220. break;
  221. }
  222. isCarrier= true;
  223. }
  224. }
  225. if (isCarrier || !carriers){
  226. carriers.push(e.id);
  227. carriersAll.every(function (carrierAll) {
  228. if (carrierAll.id==e.id){
  229. carrierAll.style=true;
  230. carriersList.push({'id':carrierAll.id,'name':carrierAll.name});
  231. return false;
  232. }
  233. return true;
  234. });
  235. }
  236. setTimeout(function(){
  237. $(".tooltipTarget").tooltip({'trigger':'hover'});
  238. },10)
  239. },
  240. seekCarrier:function (e) {
  241. let $val=e.target.value;
  242. let carriersAll=this.carriersAll;
  243. carriersAll.every(function (carrierAll) {
  244. let name=carrierAll.name;
  245. if (name.includes($val)){
  246. location.href="#"+carrierAll.name;
  247. return false;
  248. }
  249. return true;
  250. });
  251. $(e.target).focus();
  252. },
  253. selectedRole:function (e) {
  254. let roles=this.roles;
  255. let rolesAll=this.rolesAll;
  256. let rolesList=this.rolesList;
  257. let isRole=true;
  258. if (roles&&rolesAll) {
  259. for (let i = 0; i < roles.length; i++) {
  260. if (roles[i] == e.id) {
  261. roles.splice(i,1);
  262. rolesAll.every(function (roleAll) {
  263. if (roleAll.id == e.id) {
  264. roleAll.style = false;
  265. return false;
  266. }
  267. return true;
  268. });
  269. rolesList.every(function (role,i) {
  270. if (role.id==e.id){
  271. rolesList.splice(i,1);
  272. return false;
  273. }
  274. return true;
  275. });
  276. isRole= false;
  277. break;
  278. }
  279. isRole= true;
  280. }
  281. }
  282. if (isRole || !roles){
  283. roles.push(e.id);
  284. rolesAll.every(function (roleAll) {
  285. if (roleAll.id==e.id){
  286. roleAll.style=true;
  287. rolesList.push({'id':roleAll.id,'name':roleAll.name});
  288. return false;
  289. }
  290. return true;
  291. });
  292. }
  293. setTimeout(function(){
  294. $(".tooltipTarget").tooltip({'trigger':'hover'});
  295. },10)
  296. },
  297. seekRole:function (e) {
  298. let $val=e.target.value;
  299. let rolesAll=this.rolesAll;
  300. rolesAll.every(function (roleAll) {
  301. let name=roleAll.name;
  302. if (name.includes($val)){
  303. location.href="#"+roleAll.name;
  304. return false;
  305. }
  306. return true;
  307. });
  308. $(e.target).focus();
  309. },
  310. },
  311. });
  312. </script>
  313. @endsection