app.blade.php 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. <!DOCTYPE html>
  2. <html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1">
  6. <link rel="icon" href="{{asset('icon/faviconc.ico')}}" type="image/x-icon"/>
  7. <!-- CSRF Token -->
  8. <meta name="csrf-token" content="{{ csrf_token() }}">
  9. <title>@yield('title') {{ config('app.name', '宝时WAS') }}</title>
  10. @yield('head')
  11. <!-- Styles -->
  12. <link href="{{ mix('css/app.css') }}" rel="stylesheet">
  13. </head>
  14. <body>
  15. <div id="app">
  16. <nav class="navbar navbar-expand-md navbar-light bg-white shadow-sm">
  17. <div class="container-fluid">
  18. <a class="navbar-brand" href="{{ url('/control/panel/menu') }}" title="宝时 Warehouse Assistance System" style="vertical-align: text-bottom">
  19. <img src="{{asset('icon/logo100b.png')}}" alt="宝时 Warehouse Assistance System" height="30" >
  20. </a>
  21. <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="{{ __('Toggle navigation') }}">
  22. <span class="navbar-toggler-icon"></span>
  23. </button>
  24. @component('layouts.menu')@endcomponent
  25. </div>
  26. </nav>
  27. <div id="menu"></div>
  28. @auth()
  29. @component('demand._create')@endcomponent
  30. @endauth
  31. @yield('content')
  32. <hr>
  33. </div>
  34. </body>
  35. <!-- Scripts -->
  36. @yield('script')
  37. {{-- 必须在app.js前边--}}
  38. <script type="text/javascript">
  39. let menus = localStorage.getItem("menus");
  40. if (menus===null)menus = getMenu();
  41. let menuList = JSON.parse(menus);
  42. let baseUrl = "{{url('')}}";
  43. let currentUri = window.location.href.slice(baseUrl.length+1);
  44. let relativeUrl = currentUri.split(/[/?]/);
  45. (function () {
  46. if ("{{\Illuminate\Support\Facades\Auth::id()}}")createMenu();
  47. }());
  48. function createMenu(type = 1,menus=menuList) {
  49. return new Promise(function () {
  50. let dom = createBeforeMenu(type);
  51. for (let i=0;i<menus.length;i++){
  52. if (!menus[i].route)continue;
  53. let uri = menus[i].route.split(/[/?]/);
  54. let isEquals = uri[type-1]===relativeUrl[type-1];
  55. if (uri[type-1]==='*'){
  56. if (uri[type]===relativeUrl[type]){
  57. isEquals=true;
  58. menus[i].route = currentUri;
  59. }
  60. else continue;
  61. }
  62. dom.appendChild(createChildElement(type,menus[i],isEquals));
  63. if (isEquals && menus[i].child && menus[i].child.length>0)createMenu(type+1,menus[i].child);
  64. }
  65. });
  66. }
  67. function createBeforeMenu(type) {
  68. let dom = undefined;
  69. let ul = undefined;
  70. switch (type) {
  71. case 2:
  72. dom = document.createElement("div");
  73. dom.className="container-fluid nav2";
  74. let div = document.createElement("div");
  75. div.className="card";
  76. ul = document.createElement("ul");
  77. ul.className="nav nav-pills";
  78. div.appendChild(ul);
  79. dom.appendChild(div);
  80. document.getElementById("menu").appendChild(dom);
  81. return ul;
  82. case 3:
  83. dom = document.createElement("div");
  84. dom.className="container-fluid nav3";
  85. let dom2 = document.createElement("div");
  86. dom2.className = "card menu-third";
  87. let dom3 = document.createElement("ul");
  88. dom3.className="nav nav-pills";
  89. dom2.appendChild(dom3);
  90. dom.appendChild(dom2);
  91. document.getElementById("menu").appendChild(dom);
  92. return dom3;
  93. case 4:
  94. dom = document.createElement("div");
  95. dom.className="container-fluid nav3";
  96. let card = document.createElement("div");
  97. card.className = "card menu-third";
  98. ul = document.createElement("ul");
  99. ul.className="nav nav-pills";
  100. card.appendChild(ul);
  101. dom.appendChild(card);
  102. document.getElementById("menu").appendChild(dom);
  103. return ul;
  104. default:
  105. dom = document.createElement("ul");
  106. dom.className = "navbar-nav mr-auto nav-tabs nav font-weight-bold";
  107. dom.style.paddingTop = "10px";
  108. document.getElementById("mainMenu").appendChild(dom);
  109. return dom;
  110. }
  111. }
  112. function createChildElement(type,menu,isEquals) {
  113. let li = document.createElement("li");
  114. let a = document.createElement("a");
  115. li.className="nav-item";
  116. a.href = baseUrl+'/'+menu.route;
  117. a.className = "nav-link";
  118. if (isEquals)a.className += " active";
  119. a.target = menu.route;
  120. switch (type) {
  121. case 2:
  122. a.innerText = menu.name;
  123. li.appendChild(a);
  124. return li;
  125. case 3:
  126. a.innerText = menu.name;
  127. li.appendChild(a);
  128. return li;
  129. default:
  130. if (menu.font){
  131. let span = document.createElement("span");
  132. span.className = 'fa '+menu.font;
  133. span.style.cssText = menu.fontStyle;
  134. a.appendChild(span);
  135. }
  136. a.appendChild(document.createTextNode(menu.name));
  137. li.appendChild(a);
  138. return li;
  139. }
  140. }
  141. function getMenu() {
  142. let xhr = new XMLHttpRequest();
  143. let url = "{{url('getMenu')}}";
  144. xhr.open('POST', url, false);
  145. xhr.setRequestHeader('Content-Type', 'application/json');
  146. xhr.setRequestHeader('X-CSRF-Token', "{{ csrf_token() }}");
  147. xhr.send('');
  148. return xhr.responseText;
  149. }
  150. </script>
  151. <script src="{{ mix('js/app.js') }}"></script>
  152. <script>
  153. let isActive=function (name,atSlashLevel) {
  154. let uriWithNoParam=location.href.split('?')[0];
  155. let uriParts=uriWithNoParam.split('//')[1].split('/');
  156. if(!name){
  157. return uriParts.length===atSlashLevel;
  158. }
  159. if(atSlashLevel>uriParts.length||!atSlashLevel)return false;
  160. return uriParts[atSlashLevel]===name;
  161. };
  162. /*new Vue({
  163. el:'#nav1',
  164. methods:{
  165. isActive:isActive,
  166. }
  167. });*/
  168. if($('#nav2').length>0)
  169. new Vue({
  170. el:'#nav2',
  171. methods:{
  172. isActive:isActive,
  173. }
  174. });
  175. </script>
  176. <script>
  177. //后退则刷新页面
  178. let currentPageUuid=function (){
  179. let maxPagesOpening = 60;
  180. let pageUuid="{{$pageUuid}}";
  181. let pageUuids=localStorage.getItem('pageUuids')
  182. if(!pageUuids)pageUuids=[];
  183. try{
  184. pageUuids=JSON.parse(pageUuids)
  185. }catch (error){pageUuids=[]}
  186. if(pageUuids.length>=maxPagesOpening)pageUuids.shift();
  187. pageUuids.push(pageUuid)
  188. localStorage.setItem('pageUuids',JSON.stringify(pageUuids))
  189. return pageUuid;
  190. }()
  191. window.addEventListener('pageshow', function(e) {
  192. let pageUuids=localStorage.getItem('pageUuids')
  193. if(!pageUuids)return;
  194. try{
  195. pageUuids=JSON.parse(pageUuids)
  196. }catch (error){return}
  197. let pageReturnedTimes=pageUuids.reduce(function(prev,cur){
  198. if(cur===currentPageUuid){
  199. if(!prev)return 1;
  200. return prev+1;
  201. }
  202. if(!prev)return 0;
  203. if(prev&&prev.length>5)return 0;
  204. return prev;
  205. })
  206. if(pageReturnedTimes>1){
  207. $('body').remove();
  208. $('html').append("<h5>刷新中……</h5>")
  209. location.reload();
  210. }
  211. });
  212. function resetPwd(){
  213. let old = document.getElementById("old_password").value;
  214. let pwd = document.getElementById("password").value;
  215. let pwdConfirmation = document.getElementById("password-confirm").value;
  216. window.tempTip.setDuration("3000");
  217. window.tempTip.setIndex(1099);
  218. if (!old || !pwd || !pwdConfirmation){
  219. window.tempTip.show("密码不得为空");
  220. return;
  221. }
  222. if (old.length<6 || pwd.length<6 || pwdConfirmation.length<6){
  223. window.tempTip.show("密码最低为6位");
  224. return;
  225. }
  226. if (old === pwd){
  227. window.tempTip.show("新密码不得与旧密码相同");
  228. return;
  229. }
  230. if (pwd !== pwdConfirmation){
  231. window.tempTip.show("新密码与确认密码不同");
  232. return;
  233. }
  234. window.tempTip.postBasicRequest("{{url('password/update')}}",{old:old,pwd:pwd,pwdConfirmation:pwdConfirmation},()=>{
  235. $("#resetPwd").modal('hide');
  236. return "密码已成功修改";
  237. },true)
  238. }
  239. </script>
  240. @component('demand._createjs')@endcomponent
  241. @yield('lastScript')
  242. </html>