create.blade.php 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540
  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') }}" required 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"
  100. style="max-height: 190px; overflow-y: scroll;border-radius:5px;opacity:0.5;text-align: center;">
  101. <ul class="list-group tooltipTarget" style="width: 100%"
  102. onselectstart="return false;">
  103. <li :data-original-title="role.style ? '双击删除角色' : '双击添加角色'"
  104. v-for="role in rolesFilter" :id="role.name"
  105. class="tooltipTarget list-group-item list-group-item-action pt-0 pb-0"
  106. @dblclick="selectedRole(role)" :class="role.style ? 'active' :''"><span
  107. style="cursor: default;"> @{{ role.name }} </span></li>
  108. </ul>
  109. </div>
  110. </div>
  111. <div class="col-md-3">
  112. <div class="input-group"
  113. style="max-height: 190px; 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="role in rolesList" :id="role.name"
  116. class="list-group-item list-group-item-action pt-0 pb-0"
  117. @dblclick="selectedRole(role)"><span style="cursor: default;"> @{{ role.name }} </span>
  118. </li>
  119. </ul>
  120. </div>
  121. </div>
  122. </div>
  123. <div class="form-group row">
  124. <label for="logistic" class="col-md-3 col-form-label text-md-right">可见承运商</label>
  125. <div class="col-md-7">
  126. <input type="text" class="form-control tooltipTarget" placeholder="定位承运商"
  127. @input="seekLogistic($event)" title="输入关键词快速定位"></div>
  128. </div>
  129. <div class="form-group row">
  130. <label class="col-md-3"></label>
  131. <div class="col-md-4">
  132. <div class="input-group"
  133. style="max-height: 150px; overflow-y: scroll;border-radius:5px;opacity:0.5;text-align: center;">
  134. <ul class="list-group tooltipTarget" style="width: 100%"
  135. onselectstart="return false;">
  136. <li :data-original-title="logistic.style ? '双击删除承运商' : '双击添加承运商'"
  137. v-for="logistic in logisticsFilter" :id="logistic.name"
  138. class="tooltipTarget list-group-item list-group-item-action pt-0 pb-0"
  139. @dblclick="selectedLogistic(logistic)"
  140. :class="logistic.style ? 'active' :''"><span style="cursor: default;"> @{{ logistic.name }} </span>
  141. </li>
  142. </ul>
  143. </div>
  144. </div>
  145. <div class="col-md-3">
  146. <input name="logistic" hidden v-model="logistics">
  147. <div class="input-group"
  148. style="max-height: 150px; overflow-y: scroll;border-radius:5px;text-align: center;">
  149. <ul class="list-group" style="width: 100%" onselectstart="return false;">
  150. <li title="双击删除承运商" v-for="logistic in logisticsList"
  151. class="list-group-item list-group-item-action pt-0 pb-0"
  152. @dblclick="selectedLogistic(logistic)"><span style="cursor: default;"> @{{ logistic.name }} </span>
  153. </li>
  154. </ul>
  155. </div>
  156. </div>
  157. </div>
  158. <div class="form-group row">
  159. <label for="logistic" class="col-md-3 col-form-label text-md-right">可见供应商</label>
  160. <div class="col-md-7">
  161. <input type="text" class="form-control tooltipTarget" placeholder="定位供应商"
  162. @input="seekSupplier($event)" title="输入关键词快速定位"></div>
  163. </div>
  164. <div class="form-group row">
  165. <label class="col-md-3"></label>
  166. <div class="col-md-4">
  167. <div class="input-group"
  168. style="max-height: 150px; overflow-y: scroll;border-radius:5px;opacity:0.5;text-align: center;">
  169. <ul class="list-group tooltipTarget" style="width: 100%"
  170. onselectstart="return false;">
  171. <li :data-original-title="supplier.style ? '双击删除供应商' : '双击添加供应商'"
  172. v-for="supplier in suppliersFilter" :id="supplier.name"
  173. class="tooltipTarget list-group-item list-group-item-action pt-0 pb-0"
  174. @dblclick="selectedSupplier(supplier)"
  175. :class="supplier.style ? 'active' :''"><span style="cursor: default;"> @{{ supplier.name }} </span>
  176. </li>
  177. </ul>
  178. </div>
  179. </div>
  180. <div class="col-md-3">
  181. <input name="supplier" hidden v-model="supplier">
  182. <div class="input-group"
  183. style="max-height: 150px; overflow-y: scroll;border-radius:5px;text-align: center;">
  184. <ul class="list-group" style="width: 100%" onselectstart="return false;">
  185. <li title="双击删除供应商" v-for="supplier in suppliersList"
  186. class="list-group-item list-group-item-action pt-0 pb-0"
  187. @dblclick="selectedSupplier(supplier)"><span style="cursor: default;"> @{{ supplier.name }} </span>
  188. </li>
  189. </ul>
  190. </div>
  191. </div>
  192. </div>
  193. <input type="hidden" value="{{url('maintenance/user/create')}}">
  194. <div class="form-group row mb-0">
  195. <div class="col-md-7 offset-md-4">
  196. <button type="submit" class="btn btn-primary">
  197. 录入
  198. </button>
  199. </div>
  200. </div>
  201. </form>
  202. </div>
  203. </div>
  204. </div>
  205. </div>
  206. </div>
  207. @endsection
  208. @section('lastScript')
  209. <script>
  210. let vueList = new Vue({
  211. el: "#editPanel",
  212. data: {
  213. userWorkgroups: [
  214. @foreach($userWorkgroups as $userWorkgroup)
  215. {!! $userWorkgroup !!},
  216. @endforeach
  217. ],
  218. rolesAll: [
  219. @foreach( $rolesAll as $role )
  220. {
  221. id: '{{$role->id}}', name: '{{$role->name}}', style: false
  222. },
  223. @endforeach
  224. ],
  225. rolesFilter: [
  226. @foreach( $rolesAll as $role )
  227. {
  228. id: '{{$role->id}}', name: '{{$role->name}}', style: false
  229. },
  230. @endforeach
  231. ],
  232. roles: [{{old('role')}}],
  233. rolesList: [],
  234. logisticsAll: [
  235. @foreach($logistics as $logistic)
  236. {
  237. id: '{{$logistic->id}}', name: '{{$logistic->name}}', style: false
  238. },
  239. @endforeach
  240. ],
  241. logisticsFilter: [
  242. @foreach($logistics as $logistic)
  243. {
  244. id: '{{$logistic->id}}', name: '{{$logistic->name}}', style: false
  245. },
  246. @endforeach
  247. ],
  248. logistics: [{{old('logistic')}}],
  249. logisticsList: [],
  250. suppliersAll: [
  251. @foreach($suppliers as $supplier)
  252. {
  253. id: '{{$supplier->id}}', name: '{{$supplier->name}}', style: false
  254. },
  255. @endforeach
  256. ],
  257. suppliersFilter: [
  258. @foreach($suppliers as $supplier)
  259. {
  260. id: '{{$supplier->id}}', name: '{{$supplier->name}}', style: false
  261. },
  262. @endforeach
  263. ],
  264. supplier: [{{old('supplier')}}],
  265. suppliersList: [],
  266. },
  267. mounted: function () {
  268. $(".tooltipTarget").tooltip({'trigger': 'hover'});
  269. if (this.roles.length > 0) {
  270. let rolesAll = this.rolesAll;
  271. let roles = this.roles;
  272. let rolesList = this.rolesList;
  273. for (let i = 0; i < roles.length; i++) {
  274. rolesAll.every(function (roleAll) {
  275. if (roleAll.id == roles[i]) {
  276. roleAll.style = true;
  277. rolesList.push({'id': roleAll.id, 'name': roleAll.name});
  278. return false;
  279. }
  280. return true;
  281. });
  282. }
  283. }
  284. if (this.logistics.length > 0) {
  285. let logisticsAll = this.logisticsAll;
  286. let logistics = this.logistics;
  287. let logisticsList = this.logisticsList;
  288. for (let i = 0; i < logistics.length; i++) {
  289. logisticsAll.every(function (logisticAll) {
  290. if (logisticAll.id == logistics[i]) {
  291. logisticAll.style = true;
  292. logisticsList.push({'id': logisticAll.id, 'name': logisticAll.name});
  293. return false;
  294. }
  295. return true;
  296. });
  297. }
  298. }
  299. },
  300. methods: {
  301. selectedLogistic: function (e) {
  302. let logistics = this.logistics;
  303. let logisticsAll = this.logisticsAll;
  304. let logisticsList = this.logisticsList;
  305. let isLogistic = true;
  306. if (logistics && logisticsAll) {
  307. for (let i = 0; i < logistics.length; i++) {
  308. if (logistics[i] == e.id) {
  309. logistics.splice(i, 1);
  310. logisticsAll.every(function (logisticAll) {
  311. if (logisticAll.id == e.id) {
  312. logisticAll.style = false;
  313. return false;
  314. }
  315. return true;
  316. });
  317. logisticsList.every(function (logistic, i) {
  318. if (logistic.id == e.id) {
  319. logisticsList.splice(i, 1);
  320. return false;
  321. }
  322. return true;
  323. });
  324. isLogistic = false;
  325. break;
  326. }
  327. isLogistic = true;
  328. }
  329. }
  330. if (isLogistic || !logistics) {
  331. logistics.push(e.id);
  332. logisticsAll.every(function (logisticAll) {
  333. if (logisticAll.id == e.id) {
  334. logisticAll.style = true;
  335. logisticsList.push({'id': logisticAll.id, 'name': logisticAll.name});
  336. return false;
  337. }
  338. return true;
  339. });
  340. }
  341. setTimeout(function () {
  342. $(".tooltipTarget").tooltip({'trigger': 'hover'});
  343. }, 10)
  344. },
  345. selectedSupplier: function (e) {
  346. let supplier = this.supplier;
  347. let suppliersAll = this.suppliersAll;
  348. let suppliersList = this.suppliersList;
  349. let isSupplier = true;
  350. if (supplier && suppliersAll) {
  351. for (let i = 0; i < supplier.length; i++) {
  352. if (supplier[i] == e.id) {
  353. supplier.splice(i, 1);
  354. suppliersAll.every(function (suppliersAll) {
  355. if (suppliersAll.id == e.id) {
  356. suppliersAll.style = false;
  357. return false;
  358. }
  359. return true;
  360. });
  361. suppliersList.every(function (supplier, i) {
  362. if (supplier.id == e.id) {
  363. suppliersList.splice(i, 1);
  364. return false;
  365. }
  366. return true;
  367. });
  368. isSupplier = false;
  369. break;
  370. }
  371. isSupplier = true;
  372. }
  373. }
  374. if (isSupplier || !supplier) {
  375. supplier.push(e.id);
  376. suppliersAll.every(function (suppliersAll) {
  377. if (suppliersAll.id == e.id) {
  378. suppliersAll.style = true;
  379. suppliersList.push({'id': suppliersAll.id, 'name': suppliersAll.name});
  380. return false;
  381. }
  382. return true;
  383. });
  384. }
  385. setTimeout(function () {
  386. $(".tooltipTarget").tooltip({'trigger': 'hover'});
  387. }, 10)
  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. },
  414. seekSupplier: function (e) {
  415. let $val = e.target.value;
  416. let suppliersAll = this.suppliersAll;
  417. let bool = false;
  418. suppliersAll.every(function (supplierAll) {
  419. let name = supplierAll.name;
  420. if (name.includes($val)) {
  421. bool = true;
  422. return false;
  423. }
  424. return true;
  425. });
  426. if($val==='' && !bool){
  427. this.suppliersFilter = this.suppliersAll;
  428. }else if(bool){
  429. this.suppliersFilter= [];
  430. for (let i = 0; i < suppliersAll.length; i++) {
  431. let supplier = suppliersAll[i];
  432. let name = supplier.name;
  433. if(name.includes($val)){
  434. this.suppliersFilter.push(supplier);
  435. }
  436. }
  437. }
  438. },
  439. selectedRole: function (e) {
  440. let roles = this.roles;
  441. let rolesAll = this.rolesAll;
  442. let rolesList = this.rolesList;
  443. let isRole = true;
  444. if (roles && rolesAll) {
  445. for (let i = 0; i < roles.length; i++) {
  446. if (roles[i] == e.id) {
  447. roles.splice(i, 1);
  448. rolesAll.every(function (roleAll) {
  449. if (roleAll.id == e.id) {
  450. roleAll.style = false;
  451. return false;
  452. }
  453. return true;
  454. });
  455. rolesList.every(function (role, i) {
  456. if (role.id == e.id) {
  457. rolesList.splice(i, 1);
  458. return false;
  459. }
  460. return true;
  461. });
  462. isRole = false;
  463. break;
  464. }
  465. isRole = true;
  466. }
  467. }
  468. if (isRole || !roles) {
  469. roles.push(e.id);
  470. rolesAll.every(function (roleAll) {
  471. if (roleAll.id == e.id) {
  472. roleAll.style = true;
  473. rolesList.push({'id': roleAll.id, 'name': roleAll.name});
  474. return false;
  475. }
  476. return true;
  477. });
  478. }
  479. setTimeout(function () {
  480. $(".tooltipTarget").tooltip({'trigger': 'hover'});
  481. }, 10)
  482. },
  483. seekRole: function (e) {
  484. let $val = e.target.value;
  485. let rolesAll = this.rolesAll;
  486. let rolesFilter = this.rolesFilter;
  487. let bool = false;
  488. rolesAll.every(function (roleAll) {
  489. let name = roleAll.name;
  490. if (name.includes($val)) {
  491. bool = true;
  492. return false;
  493. }
  494. return true;
  495. });
  496. console.log(bool);
  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. console.log(role);
  504. let name = role.name;
  505. if (name.includes($val)) {
  506. console.log(name);
  507. this.rolesFilter.push(role);
  508. }
  509. }
  510. }
  511. },
  512. },
  513. });
  514. </script>
  515. @endsection