create.blade.php 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400
  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="password" class="col-md-3 col-form-label text-md-right">密码</label>
  47. <div class="col-md-7">
  48. <input id="password" type="password"
  49. class="form-control @error('password') is-invalid @enderror" name="password"
  50. required autocomplete="new-password">
  51. @error('password')
  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-confirm" class="col-md-3 col-form-label text-md-right">重输密码</label>
  60. <div class="col-md-7">
  61. <input id="password-confirm" type="password" class="form-control"
  62. name="password_confirmation" required autocomplete="new-password">
  63. </div>
  64. </div>
  65. <div class="form-group row">
  66. <label for="userWorkgroupID" class="col-md-3 col-form-label text-md-right">工作组</label>
  67. <div class="col-md-7">
  68. <select class="form-control" name="userWorkgroupID" id="userWorkgroupID">
  69. <option></option>
  70. <option v-for="userWorkgroup in userWorkgroups" :value="userWorkgroup.id">@{{
  71. userWorkgroup.name }}
  72. </option>
  73. </select>
  74. </div>
  75. </div>
  76. <div class="form-group row">
  77. <label for="role" class="col-md-3 col-form-label text-md-right">角色</label>
  78. <div class="col-md-7">
  79. <input type="text" class="form-control tooltipTarget" placeholder="定位角色"
  80. @input="seekRole($event)" title="输入关键词快速定位"></div>
  81. </div>
  82. <div class="form-group row">
  83. <label class="col-md-3"></label>
  84. <div class="col-md-4">
  85. <input name="role" hidden v-model="roles">
  86. <div class="input-group"
  87. style="max-height: 190px; overflow-y: scroll;border-radius:5px;opacity:0.5;text-align: center;">
  88. <ul class="list-group tooltipTarget" style="width: 100%"
  89. onselectstart="return false;">
  90. <li :data-original-title="role.style ? '双击删除角色' : '双击添加角色'"
  91. v-for="role in rolesFilter" :id="role.name"
  92. class="tooltipTarget list-group-item list-group-item-action pt-0 pb-0"
  93. @dblclick="selectedRole(role)" :class="role.style ? 'active' :''"><span
  94. style="cursor: default;"> @{{ role.name }} </span></li>
  95. </ul>
  96. </div>
  97. </div>
  98. <div class="col-md-3">
  99. <div class="input-group"
  100. style="max-height: 190px; overflow-y: scroll;border-radius:5px;text-align: center;">
  101. <ul class="list-group" style="width: 100%" onselectstart="return false;">
  102. <li title="双击删除角色" v-for="role in rolesList" :id="role.name"
  103. class="list-group-item list-group-item-action pt-0 pb-0"
  104. @dblclick="selectedRole(role)"><span style="cursor: default;"> @{{ role.name }} </span>
  105. </li>
  106. </ul>
  107. </div>
  108. </div>
  109. </div>
  110. <div class="form-group row">
  111. <label for="logistic" class="col-md-3 col-form-label text-md-right">可见承运商</label>
  112. <div class="col-md-7">
  113. <input type="text" class="form-control tooltipTarget" placeholder="定位承运商"
  114. @input="seekLogistic($event)" title="输入关键词快速定位"></div>
  115. </div>
  116. <div class="form-group row">
  117. <label class="col-md-3"></label>
  118. <div class="col-md-4">
  119. <div class="input-group"
  120. style="max-height: 150px; overflow-y: scroll;border-radius:5px;opacity:0.5;text-align: center;">
  121. <ul class="list-group tooltipTarget" style="width: 100%"
  122. onselectstart="return false;">
  123. <li :data-original-title="logistic.style ? '双击删除承运商' : '双击添加承运商'"
  124. v-for="logistic in logisticsFilter" :id="logistic.name"
  125. class="tooltipTarget list-group-item list-group-item-action pt-0 pb-0"
  126. @dblclick="selectedLogistic(logistic)"
  127. :class="logistic.style ? 'active' :''"><span style="cursor: default;"> @{{ logistic.name }} </span>
  128. </li>
  129. </ul>
  130. </div>
  131. </div>
  132. <div class="col-md-3">
  133. <input name="logistic" hidden v-model="logistics">
  134. <div class="input-group"
  135. style="max-height: 150px; overflow-y: scroll;border-radius:5px;text-align: center;">
  136. <ul class="list-group" style="width: 100%" onselectstart="return false;">
  137. <li title="双击删除承运商" v-for="logistic in logisticsList"
  138. class="list-group-item list-group-item-action pt-0 pb-0"
  139. @dblclick="selectedLogistic(logistic)"><span style="cursor: default;"> @{{ logistic.name }} </span>
  140. </li>
  141. </ul>
  142. </div>
  143. </div>
  144. </div>
  145. <input type="hidden" value="{{url('maintenance/user/create')}}">
  146. <div class="form-group row mb-0">
  147. <div class="col-md-7 offset-md-4">
  148. <button type="submit" class="btn btn-primary">
  149. 录入
  150. </button>
  151. </div>
  152. </div>
  153. </form>
  154. </div>
  155. </div>
  156. </div>
  157. </div>
  158. </div>
  159. @endsection
  160. @section('lastScript')
  161. <script>
  162. let vueList = new Vue({
  163. el: "#editPanel",
  164. data: {
  165. userWorkgroups: [
  166. @foreach($userWorkgroups as $userWorkgroup)
  167. {!! $userWorkgroup !!},
  168. @endforeach
  169. ],
  170. rolesAll: [
  171. @foreach( $rolesAll as $role )
  172. {
  173. id: '{{$role->id}}', name: '{{$role->name}}', style: false
  174. },
  175. @endforeach
  176. ],
  177. rolesFilter: [
  178. @foreach( $rolesAll as $role )
  179. {
  180. id: '{{$role->id}}', name: '{{$role->name}}', style: false
  181. },
  182. @endforeach
  183. ],
  184. roles: [{{old('role')}}],
  185. rolesList: [],
  186. logisticsAll: [
  187. @foreach($logistics as $logistic)
  188. {
  189. id: '{{$logistic->id}}', name: '{{$logistic->name}}', style: false
  190. },
  191. @endforeach
  192. ],
  193. logisticsFilter: [
  194. @foreach($logistics as $logistic)
  195. {
  196. id: '{{$logistic->id}}', name: '{{$logistic->name}}', style: false
  197. },
  198. @endforeach
  199. ],
  200. logistics: [{{old('logistic')}}],
  201. logisticsList: [],
  202. },
  203. mounted: function () {
  204. $(".tooltipTarget").tooltip({'trigger': 'hover'});
  205. if (this.roles.length > 0) {
  206. let rolesAll = this.rolesAll;
  207. let roles = this.roles;
  208. let rolesList = this.rolesList;
  209. for (let i = 0; i < roles.length; i++) {
  210. rolesAll.every(function (roleAll) {
  211. if (roleAll.id == roles[i]) {
  212. roleAll.style = true;
  213. rolesList.push({'id': roleAll.id, 'name': roleAll.name});
  214. return false;
  215. }
  216. return true;
  217. });
  218. }
  219. }
  220. if (this.logistics.length > 0) {
  221. let logisticsAll = this.logisticsAll;
  222. let logistics = this.logistics;
  223. let logisticsList = this.logisticsList;
  224. for (let i = 0; i < logistics.length; i++) {
  225. logisticsAll.every(function (logisticAll) {
  226. if (logisticAll.id == logistics[i]) {
  227. logisticAll.style = true;
  228. logisticsList.push({'id': logisticAll.id, 'name': logisticAll.name});
  229. return false;
  230. }
  231. return true;
  232. });
  233. }
  234. }
  235. },
  236. methods: {
  237. selectedLogistic: function (e) {
  238. let logistics = this.logistics;
  239. let logisticsAll = this.logisticsAll;
  240. let logisticsList = this.logisticsList;
  241. let isLogistic = true;
  242. if (logistics && logisticsAll) {
  243. for (let i = 0; i < logistics.length; i++) {
  244. if (logistics[i] == e.id) {
  245. logistics.splice(i, 1);
  246. logisticsAll.every(function (logisticAll) {
  247. if (logisticAll.id == e.id) {
  248. logisticAll.style = false;
  249. return false;
  250. }
  251. return true;
  252. });
  253. logisticsList.every(function (logistic, i) {
  254. if (logistic.id == e.id) {
  255. logisticsList.splice(i, 1);
  256. return false;
  257. }
  258. return true;
  259. });
  260. isLogistic = false;
  261. break;
  262. }
  263. isLogistic = true;
  264. }
  265. }
  266. if (isLogistic || !logistics) {
  267. logistics.push(e.id);
  268. logisticsAll.every(function (logisticAll) {
  269. if (logisticAll.id == e.id) {
  270. logisticAll.style = true;
  271. logisticsList.push({'id': logisticAll.id, 'name': logisticAll.name});
  272. return false;
  273. }
  274. return true;
  275. });
  276. }
  277. setTimeout(function () {
  278. $(".tooltipTarget").tooltip({'trigger': 'hover'});
  279. }, 10)
  280. },
  281. seekLogistic: function (e) {
  282. let $val = e.target.value;
  283. let logisticsAll = this.logisticsAll;
  284. let bool = false;
  285. logisticsAll.every(function (logisticAll) {
  286. let name = logisticAll.name;
  287. if (name.includes($val)) {
  288. bool = true;
  289. return false;
  290. }
  291. return true;
  292. });
  293. if($val==='' && !bool){
  294. this.logisticsFilter = this.logisticsAll;
  295. }else if(bool){
  296. this.logisticsFilter= [];
  297. for (let i = 0; i < logisticsAll.length; i++) {
  298. let carries = logisticsAll[i];
  299. let name = carries.name;
  300. if(name.includes($val)){
  301. this.logisticsFilter.push(carries);
  302. }
  303. }
  304. }
  305. },
  306. selectedRole: function (e) {
  307. let roles = this.roles;
  308. let rolesAll = this.rolesAll;
  309. let rolesList = this.rolesList;
  310. let isRole = true;
  311. if (roles && rolesAll) {
  312. for (let i = 0; i < roles.length; i++) {
  313. if (roles[i] == e.id) {
  314. roles.splice(i, 1);
  315. rolesAll.every(function (roleAll) {
  316. if (roleAll.id == e.id) {
  317. roleAll.style = false;
  318. return false;
  319. }
  320. return true;
  321. });
  322. rolesList.every(function (role, i) {
  323. if (role.id == e.id) {
  324. rolesList.splice(i, 1);
  325. return false;
  326. }
  327. return true;
  328. });
  329. isRole = false;
  330. break;
  331. }
  332. isRole = true;
  333. }
  334. }
  335. if (isRole || !roles) {
  336. roles.push(e.id);
  337. rolesAll.every(function (roleAll) {
  338. if (roleAll.id == e.id) {
  339. roleAll.style = true;
  340. rolesList.push({'id': roleAll.id, 'name': roleAll.name});
  341. return false;
  342. }
  343. return true;
  344. });
  345. }
  346. setTimeout(function () {
  347. $(".tooltipTarget").tooltip({'trigger': 'hover'});
  348. }, 10)
  349. },
  350. seekRole: function (e) {
  351. let $val = e.target.value;
  352. let rolesAll = this.rolesAll;
  353. let rolesFilter = this.rolesFilter;
  354. let bool = false;
  355. rolesAll.every(function (roleAll) {
  356. let name = roleAll.name;
  357. if (name.includes($val)) {
  358. bool = true;
  359. return false;
  360. }
  361. return true;
  362. });
  363. console.log(bool);
  364. if ($val === '' && bool) {
  365. this.rolesFilter = this.rolesAll;
  366. } else if (bool) {
  367. this.rolesFilter = [];
  368. for (let i = 0; i < rolesAll.length; i++) {
  369. let role = rolesAll[i];
  370. console.log(role);
  371. let name = role.name;
  372. if (name.includes($val)) {
  373. console.log(name);
  374. this.rolesFilter.push(role);
  375. }
  376. }
  377. }
  378. },
  379. },
  380. });
  381. </script>
  382. @endsection