app.blade.php 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  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')</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('images/login/loglogo.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 && "{{\Illuminate\Support\Facades\Auth::id()}}")menus = getMenu();
  41. let menuList = menus ? JSON.parse(menus) : {};
  42. let baseUrl = "{{url('')}}";
  43. let currentUri = window.location.href.slice(baseUrl.length+1);
  44. let relativeUrl = currentUri.split(/[/?]/);
  45. let lastAuthority;
  46. (function () {
  47. if ("{{\Illuminate\Support\Facades\Auth::id()}}")createMenu();
  48. }());
  49. function createMenu(type = 1,menus=menuList) {
  50. return new Promise(function () {
  51. let dom = createBeforeMenu(type);
  52. for (let i=0;i<menus.length;i++){
  53. if (!menus[i].route)continue;
  54. let uri = menus[i].route.split(/[/?]/);
  55. let isEquals = uri[type-1]===relativeUrl[type-1];
  56. if (uri[type-1]==='*'){
  57. if (uri[type]===relativeUrl[type]){
  58. isEquals=true;
  59. menus[i].route = currentUri;
  60. }
  61. else continue;
  62. }
  63. dom.appendChild(createChildElement(type,menus[i],isEquals));
  64. if (isEquals)lastAuthority = menus[i].authId;
  65. if (isEquals && menus[i].child && menus[i].child.length>0)createMenu(type+1,menus[i].child);
  66. }
  67. });
  68. }
  69. function createBeforeMenu(type) {
  70. let dom = undefined;
  71. let ul = undefined;
  72. switch (type) {
  73. case 2:
  74. dom = document.createElement("div");
  75. dom.className="container-fluid nav2";
  76. let div = document.createElement("div");
  77. div.className="card";
  78. ul = document.createElement("ul");
  79. ul.className="nav nav-pills";
  80. div.appendChild(ul);
  81. dom.appendChild(div);
  82. document.getElementById("menu").appendChild(dom);
  83. return ul;
  84. case 3:
  85. dom = document.createElement("div");
  86. dom.className="container-fluid nav3";
  87. let dom2 = document.createElement("div");
  88. dom2.className = "card menu-third";
  89. let dom3 = document.createElement("ul");
  90. dom3.className="nav nav-pills";
  91. dom2.appendChild(dom3);
  92. dom.appendChild(dom2);
  93. document.getElementById("menu").appendChild(dom);
  94. return dom3;
  95. case 4:
  96. dom = document.createElement("div");
  97. dom.className="container-fluid nav3";
  98. let card = document.createElement("div");
  99. card.className = "card menu-third";
  100. ul = document.createElement("ul");
  101. ul.className="nav nav-pills";
  102. card.appendChild(ul);
  103. dom.appendChild(card);
  104. document.getElementById("menu").appendChild(dom);
  105. return ul;
  106. default:
  107. dom = document.createElement("ul");
  108. dom.className = "navbar-nav mr-auto nav-tabs nav font-weight-bold";
  109. dom.style.paddingTop = "10px";
  110. document.getElementById("mainMenu").appendChild(dom);
  111. return dom;
  112. }
  113. }
  114. function createChildElement(type,menu,isEquals) {
  115. let li = document.createElement("li");
  116. let a = document.createElement("a");
  117. li.className="nav-item";
  118. a.href = baseUrl+'/'+menu.route;
  119. a.className = "nav-link";
  120. if (isEquals)a.className += " active";
  121. a.target = menu.route;
  122. switch (type) {
  123. case 2:
  124. a.innerText = menu.name;
  125. break;
  126. case 3:
  127. a.innerText = menu.name;
  128. break;
  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. break;
  138. }
  139. li.appendChild(a);
  140. a.onclick = function (){
  141. return true;
  142. };
  143. return li;
  144. }
  145. function getMenu() {
  146. let xhr = new XMLHttpRequest();
  147. let url = "{{url('getMenu')}}";
  148. xhr.open('POST', url, false);
  149. xhr.setRequestHeader('Content-Type', 'application/json');
  150. xhr.setRequestHeader('X-CSRF-Token', "{{ csrf_token() }}");
  151. xhr.send('');
  152. return xhr.responseText;
  153. }
  154. </script>
  155. <script src="{{ mix('js/app.js') }}"></script>
  156. <script>
  157. let isActive=function (name,atSlashLevel) {
  158. let uriWithNoParam=location.href.split('?')[0];
  159. let uriParts=uriWithNoParam.split('//')[1].split('/');
  160. if(!name){
  161. return uriParts.length===atSlashLevel;
  162. }
  163. if(atSlashLevel>uriParts.length||!atSlashLevel)return false;
  164. return uriParts[atSlashLevel]===name;
  165. };
  166. /*new Vue({
  167. el:'#nav1',
  168. methods:{
  169. isActive:isActive,
  170. }
  171. });*/
  172. if($('#nav2').length>0)
  173. new Vue({
  174. el:'#nav2',
  175. methods:{
  176. isActive:isActive,
  177. }
  178. });
  179. </script>
  180. <script>
  181. //后退则刷新页面
  182. let currentPageUuid=function (){
  183. let maxPagesOpening = 60;
  184. let pageUuid="{{$pageUuid}}";
  185. let pageUuids=localStorage.getItem('pageUuids')
  186. if(!pageUuids)pageUuids=[];
  187. try{
  188. pageUuids=JSON.parse(pageUuids)
  189. }catch (error){pageUuids=[]}
  190. if(pageUuids.length>=maxPagesOpening)pageUuids.shift();
  191. pageUuids.push(pageUuid)
  192. localStorage.setItem('pageUuids',JSON.stringify(pageUuids))
  193. return pageUuid;
  194. }()
  195. window.addEventListener('pageshow', function(e) {
  196. let pageUuids=localStorage.getItem('pageUuids')
  197. if(!pageUuids)return;
  198. try{
  199. pageUuids=JSON.parse(pageUuids)
  200. }catch (error){return}
  201. let pageReturnedTimes=pageUuids.reduce(function(prev,cur){
  202. if(cur===currentPageUuid){
  203. if(!prev)return 1;
  204. return prev+1;
  205. }
  206. if(!prev)return 0;
  207. if(prev&&prev.length>5)return 0;
  208. return prev;
  209. })
  210. if(pageReturnedTimes>1){
  211. $('body').remove();
  212. $('html').append("<h5>刷新中……</h5>")
  213. location.reload();
  214. }
  215. });
  216. function resetPwd(){
  217. let old = document.getElementById("old_password").value;
  218. let pwd = document.getElementById("password").value;
  219. let pwdConfirmation = document.getElementById("password-confirm").value;
  220. window.tempTip.setDuration("3000");
  221. window.tempTip.setIndex(1099);
  222. if (!old || !pwd || !pwdConfirmation){
  223. window.tempTip.show("密码不得为空");
  224. return;
  225. }
  226. if (old.length<6 || pwd.length<6 || pwdConfirmation.length<6){
  227. window.tempTip.show("密码最低为6位");
  228. return;
  229. }
  230. if (old === pwd){
  231. window.tempTip.show("新密码不得与旧密码相同");
  232. return;
  233. }
  234. if (pwd !== pwdConfirmation){
  235. window.tempTip.show("新密码与确认密码不同");
  236. return;
  237. }
  238. window.tempTip.postBasicRequest("{{url('password/update')}}",{old:old,pwd:pwd,pwdConfirmation:pwdConfirmation},()=>{
  239. $("#resetPwd").modal('hide');
  240. return "密码已成功修改";
  241. },true)
  242. }
  243. </script>
  244. @component('demand._createjs')@endcomponent
  245. @yield('lastScript')
  246. </html>