index.html 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383
  1. {include file="../../../application/admin/view/public/head" /}
  2. <?php
  3. $langs = glob('./application/lang/*.php');
  4. foreach ($langs as $k => &$v) {
  5. $v = str_replace(['./application/lang/','.php'],['',''],$v);
  6. }
  7. ?>
  8. <style type="text/css">
  9. .hs-iframe{width:100%;height:100%;}
  10. .layui-tab-content {top: 41px; position: absolute; bottom: 0; width: 100%; padding: 0; }
  11. .layui-tab-item{height:100%;}
  12. .layui-tab-title .layui-this {background-color: #009688; color: #fff; }
  13. .layui-tab-title .layui-this:after {border: none; }
  14. .layui-tab-title li { border-right: 1px solid #e6e6e6;}
  15. .footer{position:fixed;left:0;bottom:0;z-index:998;}
  16. </style>
  17. <div class="layui-layout layui-layout-admin">
  18. <div class="layui-header header-top">
  19. <div class="top-logo">{:lang('admin/index/index/name')}</div>
  20. <ul class="layout-right" lay-filter="">
  21. <li class="nav-item">
  22. <a href="javascript:void(0);" onclick="chanage_version()">New</a>
  23. </li>
  24. <li class="nav-item">
  25. <a href="__ROOT__/" target="_blank"><i class="layui-icon layui-icon-home size-14"></i></a>
  26. </li>
  27. <li class="nav-item ">
  28. <a href="{:url('index/clear')}" class="j-ajax " refresh="yes"><i class="layui-icon layui-icon-delete size-16"></i></a>
  29. </li>
  30. <li class="nav-item">
  31. <a href="javascript:;" id="admin_name">
  32. <i class="layui-icon layui-icon-app size-14"></i>
  33. </a>
  34. </li>
  35. </ul>
  36. </div>
  37. <div class="layui-header">
  38. <div class="fl header-logo">{:lang('admin/index/index/name')}</div>
  39. <div class="fl header-fold topLevelMenus"><a href="javascript:;" title="{:lang('admin/index/index/menu_switch')}" class="aicon ai-caidan" id="foldSwitch"><i class="layui-icon">&#xe65f;</i></a></div>
  40. <a href="javascript:;" class=" site-tree-mobile layui-mobile layui-show-xs-block layui-hide-lg"><i class="layui-icon layui-icon-spread-left size-20"></i></a>
  41. <div class="bottom-nav">
  42. <ul class="layui-nav fl nobg main-nav " >
  43. {volist name="menus" id="vo"}
  44. {if condition="($i eq 1)"}
  45. <li class="layui-nav-item layui-this main-nav mob-nav" data-i="{$i}">
  46. {else /}
  47. <li class="layui-nav-item main-nav mob-nav">
  48. {/if}
  49. <a href="javascript:;" data-i="{$i}">{$vo['name']}</a>
  50. </li>
  51. {/volist}
  52. </ul>
  53. <ul class="layui-nav layui-layout-right" lay-filter="">
  54. <li class="layui-nav-item layui-hide-xs"></li>
  55. <div class="layui-input-inline" >
  56. <select id="languageSelect" class="w150" name="app[lang]">
  57. {volist name="langs" id="vo"}
  58. <option value="{$vo}" {if condition="$config['app']['lang'] eq $vo"}selected {/if}>{$vo}</option>
  59. {/volist}
  60. </select>
  61. </div>
  62. </li>
  63. <li class="layui-nav-item layui-hide-xs">
  64. <a href="javascript:void(0);">{:lang('opt')}&nbsp;&nbsp;</a>
  65. <dl class="layui-nav-child">
  66. <dd><a href="{:url('index/clear')}" class="j-ajax" refresh="yes">{:lang('admin/index/index/menu_cache_clear')}</a></dd>
  67. <dd><a href="javascript:void(0);" id="lockScreen">{:lang('admin/index/index/menu_lock')}</a></dd>
  68. <dd><a href="{:url('index/logout')}">{:lang('admin/index/index/menu_logout')}</a></dd>
  69. </dl>
  70. </li>
  71. <li class="layui-nav-item layui-hide-xs">
  72. <a href="__ROOT__/" target="_blank">{:lang('admin/index/index/menu_index')}</a>
  73. </li>
  74. <li class="layui-nav-item layui-hide-xs">
  75. <a href="javascript:void(0);" onclick="chanage_version()">{:lang('admin/index/index/new_version')}</a>
  76. </li>
  77. </ul>
  78. </div>
  79. </div>
  80. <div class="nav-item-ul">
  81. <div class="">
  82. <ul class="layui-nav">
  83. <li class="layui-nav-item"><a href="__ROOT__/" target="_blank">{:lang('admin/index/index/menu_index')}</a></li>
  84. <li class="layui-nav-item"><a href="javascript:void(0);" id="lockScreen">{:lang('admin/index/index/menu_lock')}</a></li>
  85. <li class="layui-nav-item"><a href="{:url('index/clear')}" class="j-ajax" refresh="yes">{:lang('admin/index/index/menu_cache_clear')}</a></li>
  86. <li class="layui-nav-item"><a href="{:url('index/logout')}">{:lang('admin/index/index/menu_logout')}</a></li>
  87. </ul>
  88. </div>
  89. </div>
  90. <div class="layui-side layui-bg-black" id="switchNav">
  91. <div class="layui-side-scroll navBar" id="navBar">
  92. {volist name="menus" id="v"}
  93. {if condition="($i eq 1)"}
  94. <ul class="layui-nav layui-nav-tree">
  95. {else /}
  96. <ul class="layui-nav layui-nav-tree" style="display:none;">
  97. {/if}
  98. <li class="layui-nav-item layui-nav-itemed">
  99. <a href="javascript:;"><i class="{$v['icon']}"></i>{$v['name']}<span class="layui-nav-more"></span></a>
  100. <dl class="layui-nav-child">
  101. {volist name="v['sub']" id="vv" key="kk"}
  102. <dd>
  103. {if condition="($vv['url'] !=='###')"}
  104. <a class="admin-nav-item" data-id="{$key}{$kk}" href="{$vv['url']}"><i class="{$vv['icon']}"></i> {$vv['name']}</a>
  105. {else}
  106. <hr class="layui-bg-gray">
  107. {/if}
  108. </dd>
  109. {/volist}
  110. </dl>
  111. </li>
  112. </ul>
  113. {/volist}
  114. </div>
  115. </div>
  116. <div class="site-tree-mobile layui-hide">
  117. <i class="layui-icon"></i>
  118. </div>
  119. <div class="site-mobile-shade"></div>
  120. <div class="layui-body" id="switchBody">
  121. <div class="layui-tab mag0" id="top_tabs_box" lay-filter="macTab" lay-allowClose="true">
  122. <div class="tab-go-refresh" id="J_refresh"><i class="layui-icon layui-icon-refresh"></i></div>
  123. <div class="tab-go-left" id="page-prev"><i class="layui-icon layui-icon-zuozuo"></i></div>
  124. <ul class="layui-tab-title top_tab" id="B_history">
  125. <li lay-id="111" class="layui-this">{:lang('admin/index/index/menu_welcome')}</li>
  126. </ul>
  127. <div class="tab-right">
  128. <div class="tab-go-right" id="page-next"><i class="layui-icon layui-icon-youyou"></i></div>
  129. <ul class="layui-nav closeBox">
  130. <li class="layui-nav-item" >
  131. <a href="javascript:;">{:lang('admin/index/index/menu_opt')}</a>
  132. <dl class="layui-nav-child">
  133. <dd><a href="javascript:;" class="closePageAll">&nbsp;{:lang('admin/index/index/menu_close_all')}</a></dd>
  134. <dd><a href="javascript:;" class="closePageOther">&nbsp;{:lang('admin/index/index/menu_close_other')}</a></dd>
  135. </dl>
  136. </li>
  137. </ul>
  138. </div>
  139. <div class="layui-tab-content">
  140. <div class="layui-tab-item layui-show">
  141. <iframe lay-id="111" src="{:url('index/welcome')}" width="100%" height="100%" frameborder="0" scrolling="yes" class="hs-iframe"></iframe>
  142. </div>
  143. </div>
  144. </div>
  145. </div>
  146. <div class="layui-footer footer">
  147. <div class="fl"></div>
  148. <div class="fr"> {:lang('maccms_copyright')}</div>
  149. </div>
  150. </div>
  151. {include file="../../../application/admin/view/public/foot" /}
  152. <!--请在下方写此页面业务相关的脚本-->
  153. <script>
  154. window.localStorage.clear();
  155. var LAYUI_OFFSET = 60;
  156. $('#admin_name').click(function(){
  157. $('body').toggleClass('drawer-body-right');
  158. })
  159. </script>
  160. <script type="text/javascript">
  161. $(document).ready(function(){
  162. $('#languageSelect').change(function(){
  163. var selectedLang = $(this).val();
  164. $.ajax({
  165. url: "{:url('system/configlang')}",
  166. type: "post",
  167. dataType: "json",
  168. data: {'lang': selectedLang},
  169. beforeSend: function () {
  170. },
  171. error:function(r){
  172. layer.msg("configedit error",{time:1800});
  173. },
  174. success: function (r) {
  175. layer.msg(r.msg,{time:1800});
  176. },
  177. complete: function () {
  178. location.reload();
  179. }
  180. });
  181. });
  182. });
  183. layui.use(['element', 'layer'], function() {
  184. var $ = layui.jquery, element = layui.element, layer = layui.layer;
  185. $('.layui-tab-content').height($(window).height() - 145);
  186. var tab = {
  187. add: function(title, url, id) {
  188. element.tabAdd('macTab', {
  189. title: title,
  190. content: '<iframe width="100%" height="100%" lay-id="'+id+'" frameborder="0" src="'+url+'" scrolling="yes" class="x-iframe"></iframe>',
  191. id: id
  192. });
  193. }, change: function(id) {
  194. element.tabChange('macTab', id);
  195. }
  196. };
  197. $('.admin-nav-item').click(function(event) {
  198. var that = $(this);
  199. var id = that.attr('data-id');
  200. if ($('iframe[lay-id="'+id+'"]')[0]) {
  201. tab.change(id);
  202. event.stopPropagation();
  203. $("iframe[lay-id='"+id+"']")[0].contentWindow.location.reload(true);//切换后刷新框架
  204. return false;
  205. }
  206. if ($('iframe').length == 10) {
  207. layer.msg("{:lang('admin/index/index/menu_max')}");
  208. return false;
  209. }
  210. that.css({color:'#fff'});
  211. tab.add(that.text(), that.attr('href'), that.attr('data-id'));
  212. tab.change(that.attr('data-id'));
  213. event.stopPropagation();
  214. return false;
  215. });
  216. $(document).on('click', '.layui-tab-close', function() {
  217. $('.layui-nav-child a[data-id="'+$(this).parent('li').attr('lay-id')+'"]').css({color:'rgba(255,255,255,.7)'});
  218. });
  219. //显示顶部导航时作位置判断,点击左边菜单、上一tab、下一tab时公用
  220. function showTab(li) {
  221. if (li.length) {
  222. var ul = $('#B_history'),
  223. li_offset = li.offset(),
  224. li_width = li.outerWidth(true),
  225. next_left = $('#page-next').offset().left, //右边按钮的界限位置
  226. prev_right = $('#page-prev').offset().left + $('#page-prev').outerWidth(true); //左边按钮的界限位置
  227. if (li_offset.left + li_width > next_left) { //如果将要移动的元素在不可见的右边,则需要移动
  228. var distance = li_offset.left + li_width - next_left; //计算当前父元素的右边距离,算出右移多少像素
  229. ul.animate({
  230. left: '-=' + distance
  231. }, 200, 'swing');
  232. } else if (li_offset.left < prev_right) { //如果将要移动的元素在不可见的左边,则需要移动
  233. var distance = prev_right - li_offset.left; //计算当前父元素的左边距离,算出左移多少像素
  234. ul.animate({
  235. left: '+=' + distance
  236. }, 200, 'swing');
  237. }
  238. li.trigger('click');
  239. }
  240. }
  241. //上一个选项卡
  242. $('#page-prev').click(function(e) {
  243. e.preventDefault();
  244. e.stopPropagation();
  245. var ul = $('#B_history'),
  246. current = ul.find('.layui-this'),
  247. li = current.prev('li');
  248. showTab(li);
  249. });
  250. //下一个选项卡
  251. $('#page-next').click(function(e) {
  252. e.preventDefault();
  253. e.stopPropagation();
  254. var ul = $('#B_history'),
  255. current = ul.find('.layui-this'),
  256. li = current.next('li');
  257. showTab(li);
  258. });
  259. //刷新
  260. $('#J_refresh').click(function(e) {
  261. e.preventDefault();
  262. e.stopPropagation();
  263. var index = layer.load();
  264. var id = $('#B_history .layui-this').attr('lay-id'),
  265. iframe = $("iframe[lay-id='"+id+"']")[0];
  266. if (iframe.contentWindow) {
  267. iframe.contentWindow.location.reload(true);
  268. layer.close(index);
  269. }
  270. });
  271. //关闭全部选项卡
  272. $(".closePageAll").on("click", function() {
  273. if ($("#B_history li").length > 1) {
  274. $("#B_history li").each(function() {
  275. data_id = $(this).attr('lay-id');
  276. if (data_id != '' && data_id != '111') {
  277. element.tabDelete("macTab", data_id);
  278. $("iframe[lay-id='"+data_id+"']").remove(); //移除iframe页面
  279. }
  280. })
  281. } else {
  282. layer.msg("{:lang('admin/index/index/menu_close_empty')}");
  283. }
  284. });
  285. //关闭其他选项卡
  286. $(".closePageOther").on("click", function() {
  287. if ($("#B_history li").length > 1) {
  288. var cid = $('#B_history .layui-this').attr('lay-id');
  289. $("#B_history li").each(function() {
  290. data_id = $(this).attr('lay-id');
  291. if (data_id != '' && data_id != '111' && data_id != cid) {
  292. element.tabDelete("macTab", data_id);
  293. $("iframe[lay-id='"+data_id+"']").remove(); //移除iframe页面
  294. }
  295. })
  296. } else {
  297. layer.msg("{:lang('admin/index/index/menu_close_empty')}");
  298. }
  299. });
  300. $('.mob-nav').on("click", function() {
  301. $('.site-tree-mobile').click();
  302. });
  303. //手机设备的简单适配
  304. var treeMobile = $('.site-tree-mobile'),
  305. shadeMobile = $('.site-mobile-shade')
  306. treeMobile.on('click', function() {
  307. $('body').addClass('site-mobile');
  308. $('.Menus-winner').removeClass('topLevelMenus');//解决top导航
  309. $('.Menus-winner').addClass('topLevelMenus-winner');//解决top导航
  310. });
  311. shadeMobile.on('click', function() {
  312. $('body').removeClass('site-mobile');
  313. $('.Menus-winner').addClass('topLevelMenus');//解决top导航
  314. });
  315. });
  316. $(function(){
  317. setInterval("checkCache()", 30*1000);
  318. });
  319. //检查缓存并保持登录状态
  320. function checkCache(){
  321. $.ajax({
  322. url: "{:url('checkcache')}",
  323. cache: false,
  324. success: function(r){
  325. if(r=='haved'){
  326. layer.msg('{:lang("admin/index/cache_data")}', {time: 3000});
  327. }
  328. }
  329. });
  330. }
  331. function chanage_version(){
  332. $.ajax({
  333. url: "{:url('system/configVersion')}",
  334. type: "post",
  335. dataType: "json",
  336. data: {'version': 1},
  337. beforeSend: function () {
  338. },
  339. error:function(r){
  340. layer.msg("configedit error",{time:1800});
  341. },
  342. success: function (r) {
  343. layer.msg(r.msg,{time:1800});
  344. },
  345. complete: function () {
  346. location.reload();
  347. }
  348. });
  349. }
  350. </script>
  351. </body>
  352. </html>