create.blade.php 28 KB

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