edit.blade.php 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350
  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" 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: 190px; 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 rolesFilter" :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: 190px; 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="logistic" 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="seekLogistic($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="logistic" hidden v-model="logistics" >
  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="logistic.style ? '双击删除承运商' :'双击添加承运商'" v-for="logistic in logisticsFilter" :id="logistic.name" class="list-group-item list-group-item-action pt-0 pb-0"
  95. @dblclick="selectedLogistic(logistic)" :class="logistic.style ? 'active' :''"><span style="cursor: default;" > @{{ logistic.name }} </span></li>
  96. </ul>
  97. </div>
  98. </div>
  99. <div class="col-md-3">
  100. <input name="logistic" hidden v-model="logistics" >
  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="logistic in logisticsList" class="list-group-item list-group-item-action pt-0 pb-0"
  104. @dblclick="selectedLogistic(logistic)" ><span style="cursor: default;" > @{{ logistic.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. rolesFilter:[
  137. @foreach( $rolesAll as $role )
  138. {id:'{{$role->id}}',name:'{{$role->name}}',style:false},
  139. @endforeach
  140. ],
  141. roles:[
  142. @if(old('role'))
  143. {{ old('role') }}
  144. @else
  145. @foreach( $roles as $role )
  146. {{$role->id}},
  147. @endforeach
  148. @endif
  149. ],
  150. rolesList:[],
  151. logisticsAll:[
  152. @foreach($logistics as $logistic)
  153. {id:'{{$logistic->id}}',name:'{{$logistic->name}}',style:false},
  154. @endforeach
  155. ],
  156. logistics:[
  157. @if(old('logistic'))
  158. {{ old('logistic') }}
  159. @else
  160. @foreach( $logisticUser as $logistic )
  161. {{$logistic->id}},
  162. @endforeach
  163. @endif
  164. ],
  165. logisticsFilter:[
  166. @foreach($logistics as $logistic)
  167. {id:'{{$logistic->id}}',name:'{{$logistic->name}}',style:false},
  168. @endforeach
  169. ],
  170. logisticsList:[],
  171. },
  172. mounted:function(){
  173. $(".tooltipTarget").tooltip({'trigger':'hover'});
  174. if (this.roles.length>0){
  175. let rolesAll=this.rolesAll;
  176. let roles=this.roles;
  177. let rolesList=this.rolesList;
  178. for (let i = 0; i < roles.length; i++) {
  179. rolesAll.every(function (roleAll) {
  180. if (roleAll.id == roles[i]) {
  181. roleAll.style = true;
  182. rolesList.push({'id':roleAll.id,'name':roleAll.name});
  183. return false;
  184. }
  185. return true;
  186. });
  187. }
  188. }
  189. if (this.logistics.length>0){
  190. let logisticsAll=this.logisticsAll;
  191. let logistics=this.logistics;
  192. let logisticsList=this.logisticsList;
  193. for (let i = 0; i < logistics.length; i++) {
  194. logisticsAll.every(function (logisticAll) {
  195. if (logisticAll.id == logistics[i]) {
  196. logisticAll.style = true;
  197. logisticsList.push({'id':logisticAll.id,'name':logisticAll.name});
  198. return false;
  199. }
  200. return true;
  201. });
  202. }
  203. }
  204. },
  205. methods:{
  206. selectedLogistic:function (e) {
  207. let logistics=this.logistics;
  208. let logisticsAll=this.logisticsAll;
  209. let logisticsList=this.logisticsList;
  210. let isLogistic=true;
  211. if (logistics&&logisticsAll) {
  212. for (let i = 0; i < logistics.length; i++) {
  213. if (logistics[i] == e.id) {
  214. logistics.splice(i,1);
  215. logisticsAll.every(function (logisticAll) {
  216. if (logisticAll.id == e.id) {
  217. logisticAll.style = false;
  218. return false;
  219. }
  220. return true;
  221. });
  222. logisticsList.every(function (logistic,i) {
  223. if (logistic.id==e.id){
  224. logisticsList.splice(i,1);
  225. return false;
  226. }
  227. return true;
  228. });
  229. isLogistic= false;
  230. break;
  231. }
  232. isLogistic= true;
  233. }
  234. }
  235. if (isLogistic || !logistics){
  236. logistics.push(e.id);
  237. logisticsAll.every(function (logisticAll) {
  238. if (logisticAll.id==e.id){
  239. logisticAll.style=true;
  240. logisticsList.push({'id':logisticAll.id,'name':logisticAll.name});
  241. return false;
  242. }
  243. return true;
  244. });
  245. }
  246. setTimeout(function(){
  247. $(".tooltipTarget").tooltip({'trigger':'hover'});
  248. },10)
  249. },
  250. seekLogistic:function (e) {
  251. let $val=e.target.value;
  252. let logisticsAll=this.logisticsAll;
  253. let bool = false;
  254. logisticsAll.every(function (logisticsAll) {
  255. let name=logisticsAll.name;
  256. if (name.includes($val)){
  257. bool = true;
  258. return false;
  259. }
  260. return true;
  261. });
  262. if($val === '' ){
  263. this.rolesFilter = this.rolesAll;
  264. }else if(bool){
  265. this.logisticsFilter = [];
  266. for (let i = 0; i <logisticsAll.length ; i++) {
  267. let logistic = logisticsAll[i];
  268. if(logistic.name.includes($val)){
  269. this.logisticsFilter.push(logistic);
  270. }
  271. }
  272. }
  273. },
  274. selectedRole:function (e) {
  275. let roles=this.roles;
  276. let rolesAll=this.rolesAll;
  277. let rolesList=this.rolesList;
  278. let isRole=true;
  279. if (roles&&rolesAll) {
  280. for (let i = 0; i < roles.length; i++) {
  281. if (roles[i] == e.id) {
  282. roles.splice(i,1);
  283. rolesAll.every(function (roleAll) {
  284. if (roleAll.id == e.id) {
  285. roleAll.style = false;
  286. return false;
  287. }
  288. return true;
  289. });
  290. rolesList.every(function (role,i) {
  291. if (role.id==e.id){
  292. rolesList.splice(i,1);
  293. return false;
  294. }
  295. return true;
  296. });
  297. isRole= false;
  298. break;
  299. }
  300. isRole= true;
  301. }
  302. }
  303. if (isRole || !roles){
  304. roles.push(e.id);
  305. rolesAll.every(function (roleAll) {
  306. if (roleAll.id==e.id){
  307. roleAll.style=true;
  308. rolesList.push({'id':roleAll.id,'name':roleAll.name});
  309. return false;
  310. }
  311. return true;
  312. });
  313. }
  314. setTimeout(function(){
  315. $(".tooltipTarget").tooltip({'trigger':'hover'});
  316. },10)
  317. },
  318. seekRole:function (e) {
  319. let $val=e.target.value;
  320. let rolesAll=this.rolesAll;
  321. let bool = false;
  322. rolesAll.every(function (roleAll) {
  323. let name=roleAll.name;
  324. if (name.includes($val)){
  325. bool = true;
  326. return false;
  327. }
  328. return true;
  329. });
  330. if($val === '' ){
  331. this.rolesFilter = this.rolesAll;
  332. }else if(bool){
  333. this.rolesFilter = [];
  334. for (let i = 0; i <rolesAll.length ; i++) {
  335. let role = rolesAll[i];
  336. if(role.name.includes($val)){
  337. this.rolesFilter.push(role);
  338. }
  339. }
  340. }
  341. },
  342. },
  343. });
  344. </script>
  345. @endsection