admin.js 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512
  1. /** layuiAdmin.std-v1.0.0 LPPL License By http://www.layui.com/admin/ */
  2. ;
  3. layui.define('view', function (e) {
  4. var a = layui.jquery,
  5. i = layui.laytpl,
  6. t = layui.element,
  7. l = layui.setter,
  8. n = layui.view,
  9. s = layui.device(),
  10. r = a(window),
  11. o = a('body'),
  12. u = a('#' + l.container),
  13. d = 'layui-show',
  14. c = 'layui-hide',
  15. y = 'layui-this',
  16. f = 'layui-disabled',
  17. h = '#LAY_app_body',
  18. m = 'LAY_app_flexible',
  19. p = 'layadmin-layout-tabs',
  20. v = 'layadmin-side-spread-sm',
  21. b = 'layadmin-tabsbody-item',
  22. g = 'layui-icon-shrink-right',
  23. x = 'layui-icon-spread-left',
  24. C = 'layadmin-side-shrink',
  25. k = 'LAY-system-side-menu',
  26. F = {
  27. v: '1.0.0 std',
  28. req: n.req,
  29. sendAuthCode: function (e) {
  30. e = a.extend({
  31. seconds: 60,
  32. elemPhone: '#LAY_phone',
  33. elemVercode: '#LAY_vercode'
  34. }, e);
  35. var i,
  36. t = e.seconds,
  37. l = a(e.elem),
  38. n = function (a) {
  39. t--,
  40. t < 0 ? (l.removeClass(f).html('获取验证码'), t = e.seconds, clearInterval(i)) : l.addClass(f).html(t + '秒后重获'),
  41. a || (i = setInterval(function () {
  42. n(!0)
  43. }, 1000))
  44. };
  45. e.elemPhone = a(e.elemPhone),
  46. e.elemVercode = a(e.elemVercode),
  47. l.on('click', function () {
  48. var i = e.elemPhone,
  49. l = i.val();
  50. if (t === e.seconds && !a(this).hasClass(f)) {
  51. if (!/^1\d{10}$/.test(l)) return i.focus(),
  52. layer.msg('请输入正确的手机号');
  53. if ('object' == typeof e.ajax) {
  54. var s = e.ajax.success;
  55. delete e.ajax.success
  56. }
  57. F.req(a.extend(!0, {
  58. url: '/auth/code',
  59. type: 'get',
  60. data: {
  61. phone: l
  62. },
  63. success: function (a) {
  64. layer.msg('验证码已发送至你的手机,请注意查收', {
  65. icon: 1,
  66. shade: 0
  67. }),
  68. e.elemVercode.focus(),
  69. n(),
  70. s && s(a)
  71. }
  72. }, e.ajax))
  73. }
  74. })
  75. },
  76. screen: function () {
  77. var e = r.width();
  78. return e >= 1200 ? 3 : e >= 992 ? 2 : e >= 768 ? 1 : 0
  79. },
  80. exit: n.exit,
  81. sideFlexible: function (e) {
  82. var i = u,
  83. t = a('#' + m),
  84. n = F.screen();
  85. 'spread' === e ? (t.removeClass(x).addClass(g), n < 2 ? i.addClass(v) : i.removeClass(v), i.removeClass(C)) : (t.removeClass(g).addClass(x), n < 2 ? i.removeClass(C) : i.addClass(C), i.removeClass(v)),
  86. layui.event.call(this, l.MOD_NAME, 'side({*})', {
  87. status: e
  88. })
  89. },
  90. escape: function (e) {
  91. return String(e || '').replace(/&(?!#?[a-zA-Z0-9]+;)/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/'/g, '&#39;').replace(/"/g, '&quot;')
  92. },
  93. on: function (e, a) {
  94. return layui.onevent.call(this, l.MOD_NAME, e, a)
  95. },
  96. popup: n.popup,
  97. popupRight: function (e) {
  98. return F.popup.index = layer.open(a.extend({
  99. type: 1,
  100. id: 'LAY_adminPopupR',
  101. anim: - 1,
  102. title: !1,
  103. closeBtn: !1,
  104. offset: 'r',
  105. shade: 0.1,
  106. shadeClose: !0,
  107. skin: 'layui-anim layui-anim-rl layui-layer-adminRight',
  108. area: '300px'
  109. }, e))
  110. },
  111. theme: function (e) {
  112. var t = (l.theme, layui.data(l.tableName)),
  113. n = 'LAY_layadmin_theme',
  114. s = document.createElement('style'),
  115. r = i(['.layui-side-menu,',
  116. '.layadmin-pagetabs .layui-tab-title li:after,',
  117. '.layadmin-pagetabs .layui-tab-title li.layui-this:after,',
  118. '.layui-layer-admin .layui-layer-title,',
  119. '.layadmin-side-shrink .layui-side-menu .layui-nav>.layui-nav-item>.layui-nav-child',
  120. '{background-color:{{d.color.main}} !important;}',
  121. '.layui-nav-tree .layui-this,',
  122. '.layui-nav-tree .layui-this>a,',
  123. '.layui-nav-tree .layui-nav-child dd.layui-this,',
  124. '.layui-nav-tree .layui-nav-child dd.layui-this a',
  125. '{background-color:{{d.color.selected}} !important;}',
  126. '.layui-layout-admin .layui-logo{background-color:{{d.color.logo || d.color.main}} !important;}',
  127. '{{# if(d.color.header){ }}',
  128. '.layui-layout-admin .layui-header{background-color:{{ d.color.header }};}',
  129. '.layui-layout-admin .layui-header a,',
  130. '.layui-layout-admin .layui-header a cite{color: #f8f8f8;}',
  131. '.layui-layout-admin .layui-header a:hover{color: #fff;}',
  132. '.layui-layout-admin .layui-header .layui-nav .layui-nav-more{border-top-color: #fbfbfb;}',
  133. '.layui-layout-admin .layui-header .layui-nav .layui-nav-mored{border-color: transparent; border-bottom-color: #fbfbfb;}',
  134. '.layui-layout-admin .layui-header .layui-nav .layui-this:after, .layui-layout-admin .layui-header .layui-nav-bar{background-color: #fff; background-color: rgba(255,255,255,.5);}',
  135. '.layadmin-pagetabs .layui-tab-title li:after{display: none;}',
  136. '{{# } }}'].join('')).render(e = a.extend({
  137. }, t.theme, e)),
  138. u = document.getElementById(n);
  139. 'styleSheet' in s ? (s.setAttribute('type', 'text/css'), s.styleSheet.cssText = r) : s.innerHTML = r,
  140. s.id = n,
  141. u && o[0].removeChild(u),
  142. o[0].appendChild(s),
  143. o.attr('layadmin-themealias', e.color.alias),
  144. t.theme = t.theme || {
  145. },
  146. layui.each(e, function (e, a) {
  147. t.theme[e] = a
  148. }),
  149. layui.data(l.tableName, {
  150. key: 'theme',
  151. value: t.theme
  152. })
  153. },
  154. initTheme: function (e) {
  155. var a = l.theme;
  156. e = e || 0,
  157. a.color[e] && (a.color[e].index = e, F.theme({
  158. color: a.color[e]
  159. }))
  160. },
  161. tabsPage: {
  162. },
  163. tabsBody: function (e) {
  164. return a(h).find('.' + b).eq(e || 0)
  165. },
  166. tabsBodyChange: function (e, a) {
  167. a = a || {
  168. },
  169. F.tabsBody(e).addClass(d).siblings().removeClass(d),
  170. P.rollPage('auto', e),
  171. layui.event.call(this, l.MOD_NAME, 'tabsPage({*})', {
  172. url: a.url,
  173. text: a.text
  174. })
  175. },
  176. resize: function (e) {
  177. var a = layui.router(),
  178. i = a.path.join('-');
  179. r.off('resize', F.resizeFn[i]),
  180. e(),
  181. F.resizeFn[i] = e,
  182. r.on('resize', F.resizeFn[i])
  183. },
  184. resizeFn: {
  185. },
  186. runResize: function () {
  187. var e = layui.router(),
  188. a = e.path.join('-');
  189. F.resizeFn[a] && F.resizeFn[a]()
  190. },
  191. delResize: function () {
  192. var e = layui.router(),
  193. a = e.path.join('-');
  194. r.off('resize', F.resizeFn[a]),
  195. delete F.resizeFn[a]
  196. },
  197. closeThisTabs: function () {
  198. F.tabsPage.index && a(z).eq(F.tabsPage.index).find('.layui-tab-close').trigger('click')
  199. }
  200. },
  201. P = F.events = {
  202. flexible: function (e) {
  203. var a = e.find('#' + m),
  204. i = a.hasClass(x);
  205. F.sideFlexible(i ? 'spread' : null)
  206. },
  207. refresh: function () {
  208. var e = '.layadmin-iframe',
  209. i = a('.' + b).length;
  210. F.tabsPage.index >= i && (F.tabsPage.index = i - 1);
  211. var t = F.tabsBody(F.tabsPage.index).find(e);
  212. t[0].contentWindow.location.reload(!0)
  213. },
  214. serach: function (e) {
  215. e.off('keypress').on('keypress', function (a) {
  216. if (this.value.replace(/\s/g, '') && 13 === a.keyCode) {
  217. var i = e.attr('lay-action'),
  218. t = e.attr('lay-text') || '搜索';
  219. i += this.value,
  220. t = t + ' <span style="color: #FF5722;">' + F.escape(this.value) + '</span>',
  221. layui.index.openTabsPage(i, t),
  222. P.serach.keys || (P.serach.keys = {
  223. }),
  224. P.serach.keys[F.tabsPage.index] = this.value,
  225. this.value === P.serach.keys[F.tabsPage.index] && P.refresh(e),
  226. this.value = ''
  227. }
  228. })
  229. },
  230. message: function (e) {
  231. e.find('.layui-badge-dot').remove()
  232. },
  233. theme: function () {
  234. F.popupRight({
  235. id: 'LAY_adminPopupTheme',
  236. success: function () {
  237. n(this.id).render('system/theme')
  238. }
  239. })
  240. },
  241. note: function (e) {
  242. var a = F.screen() < 2,
  243. i = layui.data(l.tableName).note;
  244. P.note.index = F.popup({
  245. title: '便签',
  246. shade: 0,
  247. offset: [
  248. '41px',
  249. a ? null : e.offset().left - 250 + 'px'
  250. ],
  251. anim: - 1,
  252. id: 'LAY_adminNote',
  253. skin: 'layadmin-note layui-anim layui-anim-upbit',
  254. content: '<textarea placeholder="内容"></textarea>',
  255. resize: !1,
  256. success: function (e, a) {
  257. var t = e.find('textarea'),
  258. n = void 0 === i ? '便签中的内容会存储在本地,这样即便你关掉了浏览器,在下次打开时,依然会读取到上一次的记录。是个非常小巧实用的本地备忘录' : i;
  259. t.val(n).focus().on('keyup', function () {
  260. layui.data(l.tableName, {
  261. key: 'note',
  262. value: this.value
  263. })
  264. })
  265. }
  266. })
  267. },
  268. fullscreen: function (e) {
  269. var a = 'layui-icon-screen-full',
  270. i = 'layui-icon-screen-restore',
  271. t = e.children('i');
  272. if (t.hasClass(a)) {
  273. var l = document.body;
  274. l.webkitRequestFullScreen ? l.webkitRequestFullScreen() : l.mozRequestFullScreen ? l.mozRequestFullScreen() : l.requestFullScreen && l.requestFullscreen(),
  275. t.addClass(i).removeClass(a)
  276. } else {
  277. var l = document;
  278. l.webkitCancelFullScreen ? l.webkitCancelFullScreen() : l.mozCancelFullScreen ? l.mozCancelFullScreen() : l.cancelFullScreen ? l.cancelFullScreen() : l.exitFullscreen && l.exitFullscreen(),
  279. t.addClass(a).removeClass(i)
  280. }
  281. },
  282. about: function () {
  283. F.popupRight({
  284. id: 'LAY_adminPopupAbout',
  285. success: function () {
  286. n(this.id).render('system/about')
  287. }
  288. })
  289. },
  290. more: function () {
  291. F.popupRight({
  292. id: 'LAY_adminPopupMore',
  293. success: function () {
  294. n(this.id).render('system/more')
  295. }
  296. })
  297. },
  298. back: function () {
  299. history.back()
  300. },
  301. setTheme: function (e) {
  302. var a = e.data('index');
  303. e.siblings('.layui-this').data('index');
  304. e.hasClass(y) || (e.addClass(y).siblings('.layui-this').removeClass(y), F.initTheme(a))
  305. },
  306. rollPage: function (e, i) {
  307. var t = a('#LAY_app_tabsheader'),
  308. l = t.children('li'),
  309. n = (t.prop('scrollWidth'), t.outerWidth()),
  310. s = parseFloat(t.css('left'));
  311. if ('left' === e) {
  312. if (!s && s <= 0) return;
  313. var r = - s - n;
  314. l.each(function (e, i) {
  315. var l = a(i),
  316. n = l.position().left;
  317. if (n >= r) return t.css('left', - n),
  318. !1
  319. })
  320. } else 'auto' === e ? !function () {
  321. var e,
  322. r = l.eq(i);
  323. if (r[0]) {
  324. if (e = r.position().left, e < - s) return t.css('left', - e);
  325. if (e + r.outerWidth() >= n - s) {
  326. var o = e + r.outerWidth() - (n - s);
  327. l.each(function (e, i) {
  328. var l = a(i),
  329. n = l.position().left;
  330. if (n + s > 0 && n - s > o) return t.css('left', - n),
  331. !1
  332. })
  333. }
  334. }
  335. }() : l.each(function (e, i) {
  336. var l = a(i),
  337. r = l.position().left;
  338. if (r + l.outerWidth() >= n - s) return t.css('left', - r),
  339. !1
  340. })
  341. },
  342. leftPage: function () {
  343. P.rollPage('left')
  344. },
  345. rightPage: function () {
  346. P.rollPage()
  347. },
  348. closeThisTabs: function () {
  349. F.closeThisTabs()
  350. },
  351. closeOtherTabs: function (e) {
  352. var i = 'LAY-system-pagetabs-remove';
  353. 'all' === e ? (a(z + ':gt(0)').remove(), a(h).find('.' + b + ':gt(0)').remove(), a(z).eq(0).trigger('click')) : (a(z).each(function (e, t) {
  354. e && e != F.tabsPage.index && (a(t).addClass(i), F.tabsBody(e).addClass(i))
  355. }), a('.' + i).remove())
  356. },
  357. closeAllTabs: function () {
  358. P.closeOtherTabs('all')
  359. },
  360. shade: function () {
  361. F.sideFlexible()
  362. },
  363. im: function () {
  364. F.popup({
  365. id: 'LAY-popup-layim-demo',
  366. shade: 0,
  367. area: [
  368. '800px',
  369. '300px'
  370. ],
  371. title: '面板外的操作示例',
  372. offset: 'lb',
  373. success: function () {
  374. layui.view(this.id).render('layim/demo').then(function () {
  375. layui.use('im')
  376. })
  377. }
  378. })
  379. }
  380. };
  381. !function () {
  382. var e = layui.data(l.tableName);
  383. e.theme ? F.theme(e.theme) : l.theme && F.initTheme(l.theme.initColorIndex),
  384. 'pageTabs' in layui.setter || (layui.setter.pageTabs = !0),
  385. l.pageTabs || (a('#LAY_app_tabs').addClass(c), u.addClass('layadmin-tabspage-none')),
  386. s.ie && s.ie < 10 && n.error('IE' + s.ie + '下访问可能不佳,推荐使用:Chrome / Firefox / Edge 等高级浏览器', {
  387. offset: 'auto',
  388. id: 'LAY_errorIE'
  389. })
  390. }(),
  391. t.on('tab(' + p + ')', function (e) {
  392. F.tabsPage.index = e.index
  393. }),
  394. F.on('tabsPage(setMenustatus)', function (e) {
  395. var i = e.url,
  396. t = function (e) {
  397. return {
  398. list: e.children('.layui-nav-child'),
  399. a: e.children('*[lay-href]')
  400. }
  401. },
  402. l = a('#' + k),
  403. n = 'layui-nav-itemed',
  404. s = function (e) {
  405. e.each(function (e, l) {
  406. var s = a(l),
  407. r = t(s),
  408. o = r.list.children('dd'),
  409. u = i === r.a.attr('lay-href');
  410. if (o.each(function (e, l) {
  411. var s = a(l),
  412. r = t(s),
  413. o = r.list.children('dd'),
  414. u = i === r.a.attr('lay-href');
  415. if (o.each(function (e, l) {
  416. var s = a(l),
  417. r = t(s),
  418. o = i === r.a.attr('lay-href');
  419. if (o) {
  420. var u = r.list[0] ? n : y;
  421. return s.addClass(u).siblings().removeClass(u),
  422. !1
  423. }
  424. }), u) {
  425. var d = r.list[0] ? n : y;
  426. return s.addClass(d).siblings().removeClass(d),
  427. !1
  428. }
  429. }), u) {
  430. var d = r.list[0] ? n : y;
  431. return s.addClass(d).siblings().removeClass(d),
  432. !1
  433. }
  434. })
  435. };
  436. l.find('.' + y).removeClass(y),
  437. F.screen() < 2 && F.sideFlexible(),
  438. s(l.children('li'))
  439. }),
  440. t.on('nav(layadmin-system-side-menu)', function (e) {
  441. e.siblings('.layui-nav-child') [0] && u.hasClass(C) && (F.sideFlexible('spread'), layer.close(e.data('index'))),
  442. F.tabsPage.type = 'nav'
  443. }),
  444. t.on('nav(layadmin-pagetabs-nav)', function (e) {
  445. var a = e.parent();
  446. a.removeClass(y),
  447. a.parent().removeClass(d)
  448. });
  449. var A = function (e) {
  450. var a = (e.attr('lay-id'), e.attr('lay-attr')),
  451. i = e.index();
  452. F.tabsBodyChange(i, {
  453. url: a
  454. })
  455. },
  456. z = '#LAY_app_tabsheader>li';
  457. o.on('click', z, function () {
  458. var e = a(this),
  459. i = e.index();
  460. F.tabsPage.type = 'tab',
  461. F.tabsPage.index = i,
  462. A(e)
  463. }),
  464. t.on('tabDelete(' + p + ')', function (e) {
  465. var i = a(z + '.layui-this');
  466. e.index && F.tabsBody(e.index).remove(),
  467. A(i),
  468. F.delResize()
  469. }),
  470. o.on('click', '*[lay-href]', function () {
  471. var e = a(this),
  472. i = e.attr('lay-href'),
  473. t = e.attr('lay-text');
  474. layui.router();
  475. F.tabsPage.elem = e;
  476. var l = parent === self ? layui : top.layui;
  477. l.index.openTabsPage(i, t || e.text())
  478. }),
  479. o.on('click', '*[layadmin-event]', function () {
  480. var e = a(this),
  481. i = e.attr('layadmin-event');
  482. P[i] && P[i].call(this, e)
  483. }),
  484. o.on('mouseenter', '*[lay-tips]', function () {
  485. var e = a(this);
  486. if (!e.parent().hasClass('layui-nav-item') || u.hasClass(C)) {
  487. var i = e.attr('lay-tips'),
  488. t = e.attr('lay-offset'),
  489. l = e.attr('lay-direction'),
  490. n = layer.tips(i, this, {
  491. tips: l || 1,
  492. time: - 1,
  493. success: function (e, a) {
  494. t && e.css('margin-left', t + 'px')
  495. }
  496. });
  497. e.data('index', n)
  498. }
  499. }).on('mouseleave', '*[lay-tips]', function () {
  500. layer.close(a(this).data('index'))
  501. });
  502. var _ = layui.data.resizeSystem = function () {
  503. layer.closeAll('tips'),
  504. _.lock || setTimeout(function () {
  505. F.sideFlexible(F.screen() < 2 ? '' : 'spread'),
  506. delete _.lock
  507. }, 100),
  508. _.lock = !0
  509. };
  510. r.on('resize', layui.data.resizeSystem),
  511. e('admin', F)
  512. });