edit.blade.php 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499
  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="email" class="col-2 col-form-label text-right">手机号</label>
  48. <div class="col-8">
  49. <input type="text" class="form-control @error('phone') is-invalid @enderror"
  50. name="phone" autocomplete="off" value="@if(old('phone')){{old('phone')}}@else{{$user->userDetail ? $user->userDetail->mobile_phone : ''}}@endif">
  51. @error('phone')
  52. <span class="invalid-feedback" role="alert">
  53. <strong>{{ $message }}</strong>
  54. </span>
  55. @enderror
  56. </div>
  57. </div>
  58. <div class="form-group row">
  59. <label for="userWorkgroup" class="col-2 col-form-label text-right">工作组</label>
  60. <div class="col-8">
  61. <select class="form-control" name="userWorkgroupID" id="userWorkgroupID" v-model="userWorkgroupID">
  62. <option v-for="userWorkgroup in userWorkgroups" :value="userWorkgroup.id">@{{ userWorkgroup.name }}</option>
  63. </select>
  64. </div>
  65. </div>
  66. <div class="form-group row">
  67. <label for="role" class="col-md-3 col-form-label text-md-right">角色</label>
  68. <div class="col-md-7">
  69. <input type="text" class="form-control tooltipTarget" placeholder="定位角色"
  70. @input="seekRole($event)" title="输入关键词快速定位"></div>
  71. </div>
  72. <div class="form-group row">
  73. <label class="col-md-3"></label>
  74. <div class="col-md-4">
  75. <input name="role" hidden v-model="roles" >
  76. <div class="input-group" style="max-height: 190px; overflow-y: scroll;border-radius:5px;opacity:0.5;text-align: center;">
  77. <ul class="list-group tooltipTarget" style="width: 100%" onselectstart="return false;">
  78. <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"
  79. @dblclick="selectedRole(role)" :class="role.style ? 'active' :''"><span style="cursor: default;" :id="role.name"> @{{ role.name }} </span></li>
  80. </ul>
  81. </div>
  82. </div>
  83. <div class="col-md-3">
  84. <div class="input-group" style="max-height: 190px; overflow-y: scroll;border-radius:5px;text-align: center;">
  85. <ul class="list-group" style="width: 100%" onselectstart="return false;">
  86. <li title="双击删除角色" v-for="role in rolesList" :id="role.name" class="list-group-item list-group-item-action pt-0 pb-0"
  87. @dblclick="selectedRole(role)" ><span style="cursor: default;" > @{{ role.name }} </span></li>
  88. </ul>
  89. </div>
  90. </div>
  91. </div>
  92. <hr class="col-8 offset-2 border-info">
  93. {{--承运商--}}
  94. <div class="form-group row">
  95. <label for="logistic" class="col-md-3 col-form-label text-md-right">可见承运商</label>
  96. <div class="col-md-7">
  97. <input type="text" class="form-control tooltipTarget" placeholder="定位承运商"
  98. @input="seekLogistic($event)" title="输入关键词快速定位"></div>
  99. </div>
  100. <div class="form-group row">
  101. <label class="col-md-3"></label>
  102. <div class="col-md-4">
  103. <input name="logistic" hidden v-model="logistics" >
  104. <div class="input-group" style="max-height: 150px; overflow-y: scroll;border-radius:5px;opacity:0.5;text-align: center;">
  105. <ul class="list-group tooltipTarget" style="width: 100%" onselectstart="return false;">
  106. <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"
  107. @dblclick="selectedLogistic(logistic)" :class="logistic.style ? 'active' :''"><span style="cursor: default;" > @{{ logistic.name }} </span></li>
  108. </ul>
  109. </div>
  110. </div>
  111. <div class="col-md-3">
  112. <input name="logistic" hidden v-model="logistics" >
  113. <div class="input-group" style="max-height: 150px; overflow-y: scroll;border-radius:5px;text-align: center;">
  114. <ul class="list-group" style="width: 100%" onselectstart="return false;">
  115. <li title="双击删除承运商" v-for="logistic in logisticsList" class="list-group-item list-group-item-action pt-0 pb-0"
  116. @dblclick="selectedLogistic(logistic)" ><span style="cursor: default;" > @{{ logistic.name }} </span></li>
  117. </ul>
  118. </div>
  119. </div>
  120. </div>
  121. <hr class="col-8 offset-2 border-info">
  122. <div class="form-group row">
  123. <label for="supplier" class="col-md-3 col-form-label text-md-right">供应商</label>
  124. <div class="col-md-7">
  125. <input type="text" class="form-control tooltipTarget" placeholder="定位供应商"
  126. @input="seekSupplier($event)" title="输入关键词快速定位"></div>
  127. </div>
  128. <div class="form-group row">
  129. <label class="col-md-3"></label>
  130. <div class="col-md-4">
  131. <input name="supplier" hidden v-model="suppliers" >
  132. <div class="input-group" style="max-height: 190px; overflow-y: scroll;border-radius:5px;opacity:0.5;text-align: center;">
  133. <ul class="list-group tooltipTarget" style="width: 100%" onselectstart="return false;">
  134. <li :data-original-title="supplier.style ? '双击删除供应商' :'双击添加供应商'" v-for="supplier in suppliersFilter" :id="supplier.name" class="list-group-item list-group-item-action pt-0 pb-0"
  135. @dblclick="selectedSupplier(supplier)" :class="supplier.style ? 'active' :''"><span style="cursor: default;" :id="supplier.name"> @{{ supplier.name }} </span></li>
  136. </ul>
  137. </div>
  138. </div>
  139. <div class="col-md-3">
  140. <div class="input-group" style="max-height: 190px; overflow-y: scroll;border-radius:5px;text-align: center;">
  141. <ul class="list-group" style="width: 100%" onselectstart="return false;">
  142. <li title="双击删除供应商" v-for="supplier in suppliersList" :id="supplier.name" class="list-group-item list-group-item-action pt-0 pb-0"
  143. @dblclick="selectedSupplier(supplier)" ><span style="cursor: default;" > @{{ supplier.name }} </span></li>
  144. </ul>
  145. </div>
  146. </div>
  147. </div>
  148. <hr class="col-8 offset-2 border-info">
  149. <div class="form-group row">
  150. <div class="col-8 offset-2">
  151. <input type="submit" class="btn btn-outline-dark form-control">
  152. </div>
  153. </div>
  154. </form>
  155. </div>
  156. </div>
  157. </div>
  158. @endsection
  159. @section('lastScript')
  160. <script>
  161. let vueList=new Vue({
  162. el:"#editPanel",
  163. data:{
  164. userWorkgroupID:'{{old('userWorkgroupID')??($userWorkgroup?$userWorkgroup->id:'')}}',
  165. userWorkgroups:[
  166. @foreach($userWorkgroups as $userWorkgroup)
  167. {!! $userWorkgroup !!},
  168. @endforeach
  169. ],
  170. rolesAll:[
  171. @foreach( $rolesAll as $role )
  172. {id:'{{$role->id}}',name:'{{$role->name}}',style:false},
  173. @endforeach
  174. ],
  175. rolesFilter:[
  176. @foreach( $rolesAll as $role )
  177. {id:'{{$role->id}}',name:'{{$role->name}}',style:false},
  178. @endforeach
  179. ],
  180. roles:[
  181. @if(old('role'))
  182. {{ old('role') }}
  183. @else
  184. @foreach( $roles as $role )
  185. {{$role->id}},
  186. @endforeach
  187. @endif
  188. ],
  189. rolesList:[],
  190. logisticsAll:[
  191. @foreach($logistics as $logistic)
  192. {id:'{{$logistic->id}}',name:'{{$logistic->name}}',style:false},
  193. @endforeach
  194. ],
  195. logistics:[
  196. @if(old('logistic'))
  197. {{ old('logistic') }}
  198. @else
  199. @foreach( $logisticUser as $logistic )
  200. {{$logistic->id}},
  201. @endforeach
  202. @endif
  203. ],
  204. logisticsFilter:[
  205. @foreach($logistics as $logistic)
  206. {id:'{{$logistic->id}}',name:'{{$logistic->name}}',style:false},
  207. @endforeach
  208. ],
  209. logisticsList:[],
  210. suppliersAll: [
  211. @foreach($suppliers as $supplier)
  212. {id: '{{$supplier->id}}', name: '{{$supplier->name}}', style: false},
  213. @endforeach
  214. ],
  215. suppliersFilter: [
  216. @foreach($suppliers as $supplier)
  217. {id: '{{$supplier->id}}', name: '{{$supplier->name}}', style: false},
  218. @endforeach
  219. ],
  220. suppliers: [
  221. @if(old('supplier'))
  222. {{ old('supplier') }}
  223. @else
  224. @foreach( $supplierUser as $supplier )
  225. {{$supplier->id}},
  226. @endforeach
  227. @endif
  228. ],
  229. suppliersList: [],
  230. },
  231. mounted:function(){
  232. $(".tooltipTarget").tooltip({'trigger':'hover'});
  233. if (this.roles.length>0){
  234. let rolesAll=this.rolesAll;
  235. let roles=this.roles;
  236. let rolesList=this.rolesList;
  237. for (let i = 0; i < roles.length; i++) {
  238. rolesAll.every(function (roleAll) {
  239. if (roleAll.id == roles[i]) {
  240. roleAll.style = true;
  241. rolesList.push({'id':roleAll.id,'name':roleAll.name});
  242. return false;
  243. }
  244. return true;
  245. });
  246. }
  247. }
  248. if (this.logistics.length>0){
  249. let logisticsAll=this.logisticsAll;
  250. let logistics=this.logistics;
  251. let logisticsList=this.logisticsList;
  252. for (let i = 0; i < logistics.length; i++) {
  253. logisticsAll.every(function (logisticAll) {
  254. if (logisticAll.id == logistics[i]) {
  255. logisticAll.style = true;
  256. logisticsList.push({'id':logisticAll.id,'name':logisticAll.name});
  257. return false;
  258. }
  259. return true;
  260. });
  261. }
  262. }
  263. if (this.suppliers.length>0){
  264. let suppliersAll=this.suppliersAll;
  265. let suppliers=this.suppliers;
  266. let suppliersList=this.suppliersList;
  267. for (let i = 0; i < suppliers.length; i++) {
  268. suppliersAll.every(function (supplierAll) {
  269. if (supplierAll.id == suppliers[i]) {
  270. supplierAll.style = true;
  271. suppliersList.push({'id':supplierAll.id,'name':supplierAll.name});
  272. return false;
  273. }
  274. return true;
  275. });
  276. }
  277. }
  278. },
  279. methods:{
  280. selectedLogistic:function (e) {
  281. let logistics=this.logistics;
  282. let logisticsAll=this.logisticsAll;
  283. let logisticsList=this.logisticsList;
  284. let isLogistic=true;
  285. if (logistics&&logisticsAll) {
  286. for (let i = 0; i < logistics.length; i++) {
  287. if (logistics[i] == e.id) {
  288. logistics.splice(i,1);
  289. logisticsAll.every(function (logisticAll) {
  290. if (logisticAll.id == e.id) {
  291. logisticAll.style = false;
  292. return false;
  293. }
  294. return true;
  295. });
  296. logisticsList.every(function (logistic,i) {
  297. if (logistic.id==e.id){
  298. logisticsList.splice(i,1);
  299. return false;
  300. }
  301. return true;
  302. });
  303. isLogistic= false;
  304. break;
  305. }
  306. isLogistic= true;
  307. }
  308. }
  309. if (isLogistic || !logistics){
  310. logistics.push(e.id);
  311. logisticsAll.every(function (logisticAll) {
  312. if (logisticAll.id==e.id){
  313. logisticAll.style=true;
  314. logisticsList.push({'id':logisticAll.id,'name':logisticAll.name});
  315. return false;
  316. }
  317. return true;
  318. });
  319. }
  320. setTimeout(function(){
  321. $(".tooltipTarget").tooltip({'trigger':'hover'});
  322. },10)
  323. },
  324. selectedSupplier:function (e) {
  325. let suppliers=this.suppliers;
  326. let suppliersAll=this.suppliersAll;
  327. let suppliersList=this.suppliersList;
  328. let isSupplier=true;
  329. if (suppliers&&suppliersAll) {
  330. for (let i = 0; i < suppliers.length; i++) {
  331. if (suppliers[i] == e.id) {
  332. suppliers.splice(i,1);
  333. suppliersAll.every(function (supplierAll) {
  334. if (supplierAll.id == e.id) {
  335. supplierAll.style = false;
  336. return false;
  337. }
  338. return true;
  339. });
  340. suppliersList.every(function (supplier,i) {
  341. if (supplier.id==e.id){
  342. suppliersList.splice(i,1);
  343. return false;
  344. }
  345. return true;
  346. });
  347. isSupplier= false;
  348. break;
  349. }
  350. isSupplier= true;
  351. }
  352. }
  353. if (isSupplier || !suppliers){
  354. suppliers.push(e.id);
  355. suppliersAll.every(function (supplierAll) {
  356. if (supplierAll.id==e.id){
  357. supplierAll.style=true;
  358. suppliersList.push({'id':supplierAll.id,'name':supplierAll.name});
  359. return false;
  360. }
  361. return true;
  362. });
  363. }
  364. setTimeout(function(){
  365. $(".tooltipTarget").tooltip({'trigger':'hover'});
  366. },10)
  367. },
  368. seekLogistic:function (e) {
  369. let $val=e.target.value;
  370. let logisticsAll=this.logisticsAll;
  371. let bool = false;
  372. logisticsAll.every(function (logisticsAll) {
  373. let name=logisticsAll.name;
  374. if (name.includes($val)){
  375. bool = true;
  376. return false;
  377. }
  378. return true;
  379. });
  380. if($val === '' ){
  381. this.rolesFilter = this.rolesAll;
  382. }else if(bool){
  383. this.logisticsFilter = [];
  384. for (let i = 0; i <logisticsAll.length ; i++) {
  385. let logistic = logisticsAll[i];
  386. if(logistic.name.includes($val)){
  387. this.logisticsFilter.push(logistic);
  388. }
  389. }
  390. }
  391. },
  392. selectedRole:function (e) {
  393. let roles=this.roles;
  394. let rolesAll=this.rolesAll;
  395. let rolesList=this.rolesList;
  396. let isRole=true;
  397. if (roles && rolesAll) {
  398. for (let i = 0; i < roles.length; i++) {
  399. if (roles[i] == e.id) {
  400. roles.splice(i,1);
  401. rolesAll.every(function (roleAll) {
  402. if (roleAll.id == e.id) {
  403. roleAll.style = false;
  404. return false;
  405. }
  406. return true;
  407. });
  408. rolesList.every(function (role,i) {
  409. if (role.id==e.id){
  410. rolesList.splice(i,1);
  411. return false;
  412. }
  413. return true;
  414. });
  415. isRole= false;
  416. break;
  417. }
  418. isRole= true;
  419. }
  420. }
  421. if (isRole || !roles){
  422. roles.push(Number(e.id));
  423. rolesAll.every(function (roleAll) {
  424. if (roleAll.id==e.id){
  425. roleAll.style=true;
  426. rolesList.push({'id':roleAll.id,'name':roleAll.name});
  427. return false;
  428. }
  429. return true;
  430. });
  431. }
  432. setTimeout(function(){
  433. $(".tooltipTarget").tooltip({'trigger':'hover'});
  434. },10)
  435. },
  436. seekRole:function (e) {
  437. let $val=e.target.value;
  438. let rolesAll=this.rolesAll;
  439. let bool = false;
  440. rolesAll.every(function (roleAll) {
  441. let name=roleAll.name;
  442. if (name.includes($val)){
  443. bool = true;
  444. return false;
  445. }
  446. return true;
  447. });
  448. if($val === '' ){
  449. this.rolesFilter = this.rolesAll;
  450. }else if(bool){
  451. this.rolesFilter = [];
  452. for (let i = 0; i <rolesAll.length ; i++) {
  453. let role = rolesAll[i];
  454. if(role.name.includes($val)){
  455. this.rolesFilter.push(role);
  456. }
  457. }
  458. }
  459. },
  460. seekSupplier:function (e) {
  461. let $val=e.target.value;
  462. let suppliersAll=this.suppliersAll;
  463. let bool = false;
  464. suppliersAll.every(function (supplierAll) {
  465. let name=supplierAll.name;
  466. if (name.includes($val)){
  467. bool = true;
  468. return false;
  469. }
  470. return true;
  471. });
  472. if($val === '' ){
  473. this.suppliersFilter = this.suppliersAll;
  474. }else if(bool){
  475. this.suppliersFilter = [];
  476. for (let i = 0; i <suppliersAll.length ; i++) {
  477. let supplier = suppliersAll[i];
  478. if(supplier.name.includes($val)){
  479. this.suppliersFilter.push(supplier);
  480. }
  481. }
  482. }
  483. },
  484. },
  485. });
  486. </script>
  487. @endsection