admin.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407
  1. /** layuiAdmin-v1.0.0-beta6 LPPL License By http://www.layui.com/admin/ */
  2. ;
  3. layui.define("view",
  4. function(e) {
  5. var a = layui.jquery,
  6. i = layui.laytpl,
  7. t = layui.element,
  8. n = layui.setter,
  9. s = layui.view,
  10. l = layui.device(),
  11. r = a(window),
  12. o = a("body"),
  13. u = a("#" + n.container),
  14. d = "layui-show",
  15. c = "layui-this",
  16. y = "#LAY_app_body",
  17. m = "LAY_app_flexible",
  18. f = "layadmin-side-spread-sm",
  19. h = "layadmin-tabsbody-item",
  20. p = "layui-icon-shrink-right",
  21. v = "layui-icon-spread-left",
  22. b = "layadmin-side-shrink",
  23. g = "LAY-system-side-menu",
  24. x = {
  25. v: "1.0.0-beta6",
  26. req: s.req,
  27. screen: function() {
  28. var e = r.width();
  29. return e >= 1200 ? 3 : e >= 992 ? 2 : e >= 768 ? 1 : 0
  30. },
  31. exit: s.exit,
  32. sideFlexible: function(e) {
  33. var i = u,
  34. t = a("#" + m),
  35. s = x.screen();
  36. "spread" === e ? (t.removeClass(v).addClass(p), s < 2 ? i.addClass(f) : i.removeClass(f), i.removeClass(b)) : (t.removeClass(p).addClass(v), s < 2 ? i.removeClass(b) : i.addClass(b), i.removeClass(f)),
  37. layui.event.call(this, n.MOD_NAME, "side({*})", {
  38. status: e
  39. })
  40. },
  41. on: function(e, a) {
  42. return layui.onevent.call(this, n.MOD_NAME, e, a)
  43. },
  44. popup: s.popup,
  45. popupRight: function(e) {
  46. return x.popup.index = layer.open(a.extend({
  47. type: 1,
  48. id: "LAY_adminPopupR",
  49. anim: -1,
  50. title: false,
  51. closeBtn: false,
  52. offset: "r",
  53. shade: .1,
  54. shadeClose: !0,
  55. skin: "layui-anim layui-anim-rl layui-layer-adminRight",
  56. area: "300px"
  57. },
  58. e))
  59. },
  60. theme: function(e) {
  61. var t = (n.theme, layui.data(n.tableName)),
  62. s = "LAY_layadmin_theme",
  63. l = document.createElement("style"),
  64. r = i([".layui-side-menu,", ".layadmin-pagetabs .layui-tab-title li:after,", ".layadmin-pagetabs .layui-tab-title li.layui-this:after,", ".layui-layer-admin .layui-layer-title,", ".layadmin-side-shrink .layui-side-menu .layui-nav>.layui-nav-item>.layui-nav-child", "{background-color:{{d.color.main}} !important;}", ".layui-nav-tree .layui-this,", ".layui-nav-tree .layui-this>a,", ".layui-nav-tree .layui-nav-child dd.layui-this,", ".layui-nav-tree .layui-nav-child dd.layui-this a", "{background-color:{{d.color.selected}} !important;}", ".layui-layout-admin .layui-logo{background-color:{{d.color.logo || d.color.main}} !important;}}"].join("")).render(e = a.extend({},
  65. t.theme, e)),
  66. u = document.getElementById(s);
  67. "styleSheet" in l ? (l.setAttribute("type", "text/css"), l.styleSheet.cssText = r) : l.innerHTML = r,
  68. l.id = s,
  69. u && o[0].removeChild(u),
  70. o[0].appendChild(l),
  71. o.attr("layadmin-themealias", e.color.alias),
  72. t.theme = t.theme || {},
  73. layui.each(e,
  74. function(e, a) {
  75. t.theme[e] = a
  76. }),
  77. layui.data(n.tableName, {
  78. key: "theme",
  79. value: t.theme
  80. })
  81. },
  82. tabsPage: {},
  83. tabsBody: function(e) {
  84. return a(y).find("." + h).eq(e || 0)
  85. },
  86. tabsBodyChange: function(e) {
  87. x.tabsBody(e).addClass(d).siblings().removeClass(d),
  88. C.rollPage("auto", e)
  89. },
  90. resize: function(e) {
  91. var a = layui.router(),
  92. i = a.path.join("-");
  93. r.off("resize", x.resizeFn[i]),
  94. e(),
  95. x.resizeFn[i] = e,
  96. r.on("resize", x.resizeFn[i])
  97. },
  98. resizeFn: {},
  99. runResize: function() {
  100. var e = layui.router(),
  101. a = e.path.join("-");
  102. x.resizeFn[a] && x.resizeFn[a]()
  103. },
  104. delResize: function() {
  105. var e = layui.router(),
  106. a = e.path.join("-");
  107. r.off("resize", x.resizeFn[a]),
  108. delete x.resizeFn[a]
  109. },
  110. correctRouter: function(e) {
  111. return /^\//.test(e) || (e = "/" + e),
  112. e.replace(/^(\/+)/, "/").replace(new RegExp("/" + n.entry + "$"), "/")
  113. },
  114. closeThisTabs: function() {
  115. x.tabsPage.index && a(z).eq(x.tabsPage.index).find(".layui-tab-close").trigger("click")
  116. }
  117. },
  118. C = x.events = {
  119. flexible: function(e) {
  120. var a = e.find("#" + m),
  121. i = a.hasClass(v);
  122. x.sideFlexible(i ? "spread": null)
  123. },
  124. refresh: function() {
  125. layui.index.render()
  126. },
  127. message: function(e) {
  128. e.find(".layui-badge-dot").remove()
  129. },
  130. theme: function() {
  131. x.popupRight({
  132. id: "LAY_adminPopupTheme",
  133. success: function() {
  134. s(this.id).render("system/theme")
  135. }
  136. })
  137. },
  138. note: function(e) {
  139. var a = x.screen() < 2,
  140. i = layui.data(n.tableName).note;
  141. C.note.index = x.popup({
  142. title: "便签",
  143. shade: 0,
  144. offset: ["41px", a ? null : e.offset().left - 250 + "px"],
  145. anim: -1,
  146. id: "LAY_adminNote",
  147. skin: "layadmin-note layui-anim layui-anim-upbit",
  148. content: '<textarea placeholder="内容"></textarea>',
  149. resize: false,
  150. success: function(e, a) {
  151. var t = e.find("textarea"),
  152. s = void 0 === i ? "便签中的内容会存储在本地,这样即便你关掉了浏览器,在下次打开时,依然会读取到上一次的记录。是个非常小巧实用的本地备忘录" : i;
  153. t.val(s)
  154. .focus()
  155. .on("keyup",
  156. function() {
  157. layui.data(n.tableName,
  158. {
  159. key: "note",
  160. value: this.value
  161. });
  162. });
  163. }
  164. });
  165. },
  166. about: function() {
  167. x.popupRight({
  168. id: "LAY_adminPopupAbout",
  169. success: function() {
  170. s(this.id).render("system/about")
  171. }
  172. });
  173. },
  174. more: function() {
  175. x.popupRight({
  176. id: "LAY_adminPopupMore",
  177. success: function() {
  178. s(this.id).render("system/more")
  179. }
  180. });
  181. },
  182. back: function() {
  183. history.back();
  184. },
  185. setTheme: function(e) {
  186. var a = n.theme,
  187. i = e.data("index");
  188. e.siblings(".layui-this").data("index");
  189. e.hasClass(c) ||
  190. (e.addClass(c).siblings(".layui-this").removeClass(c), a.color[i] &&
  191. (a.color[i].index = i, x.theme({
  192. color: a.color[i]
  193. })));
  194. },
  195. rollPage: function(e, i) {
  196. var t = a("#LAY_app_tabsheader"),
  197. n = t.children("li"),
  198. s = (t.prop("scrollWidth"), t.outerWidth()),
  199. l = parseFloat(t.css("left"));
  200. if ("left" === e) {
  201. if (!l && l <= 0) return;
  202. var r = -l - s;
  203. n.each(function(e, i) {
  204. var n = a(i),
  205. s = n.position().left;
  206. if (s >= r)
  207. return t.css("left", -s),
  208. false;
  209. });
  210. } else
  211. "auto" === e
  212. ? !
  213. function() {
  214. var e, r = n.eq(i);
  215. if (r[0]) {
  216. if (e = r.position().left, e < -l) return t.css("left", -e);
  217. if (e + r.outerWidth() >= s - l) {
  218. var o = e + r.outerWidth() - (s - l);
  219. n.each(function(e, i) {
  220. var n = a(i),
  221. s = n.position().left;
  222. if (s + l > 0 && s - l > o)
  223. return t.css("left", -s),
  224. false;
  225. });
  226. }
  227. }
  228. }()
  229. : n.each(function(e, i) {
  230. var n = a(i),
  231. r = n.position().left;
  232. if (r + n.outerWidth() >= s - l)
  233. return t.css("left", -r),
  234. false;
  235. });
  236. },
  237. leftPage: function() {
  238. C.rollPage("left");
  239. },
  240. rightPage: function() {
  241. C.rollPage();
  242. },
  243. closeThisTabs: function() {
  244. x.closeThisTabs();
  245. },
  246. closeOtherTabs: function(e) {
  247. var i = "LAY-system-pagetabs-remove";
  248. "all" === e
  249. ? (a(z + ":gt(0)").remove(), a(y).find("." + h + ":gt(0)").remove())
  250. : (a(z)
  251. .each(function(e, t) {
  252. e && e != x.tabsPage.index && (a(t).addClass(i), x.tabsBody(e).addClass(i))
  253. }), a("." + i).remove());
  254. },
  255. closeAllTabs: function() {
  256. C.closeOtherTabs("all"),
  257. location.hash = ""
  258. },
  259. shade: function() {
  260. x.sideFlexible();
  261. }
  262. }; !
  263. function() {
  264. var e = layui.data(n.tableName);
  265. e.theme && x.theme(e.theme),
  266. o.addClass("layui-layout-body"),
  267. x.screen() < 1 && delete n.pageTabs,
  268. n.pageTabs || u.addClass("layadmin-tabspage-none"),
  269. l.ie && l.ie < 10 && s.error("IE" + l.ie + "下访问可能不佳,推荐使用:Chrome / Firefox / Edge 等高级浏览器", {
  270. offset: "auto",
  271. id: "LAY_errorIE"
  272. })
  273. }(),
  274. x.on("hash(side)",
  275. function(e) {
  276. var i = e.path,
  277. t = function(e) {
  278. return {
  279. list: e.children(".layui-nav-child"),
  280. name: e.data("name"),
  281. jump: e.data("jump")
  282. }
  283. },
  284. n = a("#" + g),
  285. s = "layui-nav-itemed",
  286. l = function(e) {
  287. var n = x.correctRouter(i.join("/"));
  288. e.each(function(e, l) {
  289. var r = a(l),
  290. o = t(r),
  291. u = o.list.children("dd"),
  292. d = i[0] == o.name || 0 === e && !i[0] || o.jump && n == x.correctRouter(o.jump);
  293. if (u.each(function(e, l) {
  294. var r = a(l),
  295. u = t(r),
  296. d = u.list.children("dd"),
  297. y = i[0] == o.name && i[1] == u.name || u.jump && n == x.correctRouter(u.jump);
  298. if (d.each(function(e, l) {
  299. var r = a(l),
  300. d = t(r),
  301. y = i[0] == o.name && i[1] == u.name && i[2] == d.name || d.jump && n == x.correctRouter(d.jump);
  302. if (y) {
  303. var m = d.list[0] ? s: c;
  304. return r.addClass(m).siblings().removeClass(m),
  305. false
  306. }
  307. }), y) {
  308. var m = u.list[0] ? s: c;
  309. return r.addClass(m).siblings().removeClass(m),
  310. false
  311. }
  312. }), d) {
  313. var y = o.list[0] ? s: c;
  314. return r.addClass(y).siblings().removeClass(y),
  315. false
  316. }
  317. })
  318. };
  319. n.find("." + c).removeClass(c),
  320. x.screen() < 2 && x.sideFlexible(),
  321. l(n.children("li"))
  322. }),
  323. t.on("nav(layadmin-system-side-menu)",
  324. function(e) {
  325. e.siblings(".layui-nav-child")[0] && u.hasClass(b) && (x.sideFlexible("spread"), layer.close(e.data("index")))
  326. }),
  327. t.on("nav(layadmin-pagetabs-nav)",
  328. function(e) {
  329. var a = e.parent();
  330. a.removeClass(c),
  331. a.parent().removeClass(d)
  332. });
  333. var k = function(e) {
  334. var a = e.attr("lay-id"),
  335. i = e.index();
  336. x.tabsBodyChange(i),
  337. location.hash = a === n.entry ? "/": a
  338. },
  339. z = "#LAY_app_tabsheader>li";
  340. o.on("click", z,
  341. function() {
  342. var e = a(this),
  343. i = e.index();
  344. return x.tabsPage.type = "tab",
  345. x.tabsPage.index = i,
  346. "iframe" === e.attr("lay-attr") ? x.tabsBodyChange(i) : (k(e), void x.runResize())
  347. }),
  348. t.on("tabDelete(layadmin-layout-tabs)",
  349. function(e) {
  350. var i = a(z + ".layui-this");
  351. e.index && x.tabsBody(e.index).remove(),
  352. k(i),
  353. x.delResize()
  354. }),
  355. o.on("click", "*[lay-href]",
  356. function() {
  357. var e = a(this),
  358. i = e.attr("lay-href");
  359. layui.router();
  360. x.tabsPage.elem = e,
  361. location.hash = x.correctRouter(i)
  362. }),
  363. o.on("click", "*[layadmin-event]",
  364. function() {
  365. var e = a(this),
  366. i = e.attr("layadmin-event");
  367. C[i] && C[i].call(this, e)
  368. }),
  369. o.on("mouseenter", "*[lay-tips]",
  370. function() {
  371. var e = a(this);
  372. if (!e.parent().hasClass("layui-nav-item") || u.hasClass(b)) {
  373. var i = e.attr("lay-tips"),
  374. t = e.attr("lay-offset"),
  375. n = e.attr("lay-direction"),
  376. s = layer.tips(i, this, {
  377. tips: n || 1,
  378. time: -1,
  379. success: function(e, a) {
  380. t && e.css("margin-left", t + "px")
  381. }
  382. });
  383. e.data("index", s)
  384. }
  385. }).on("mouseleave", "*[lay-tips]",
  386. function() {
  387. layer.close(a(this).data("index"))
  388. });
  389. var A = layui.data.resizeSystem = function() {
  390. layer.closeAll("tips"),
  391. A.isDelete || setTimeout(function() {
  392. x.sideFlexible(x.screen() < 2 ? "": "spread"),
  393. delete A.isDelete
  394. },
  395. 100),
  396. A.isDelete = !0
  397. };
  398. r.on("resize", layui.data.resizeSystem),
  399. e("admin", x)
  400. });
  401. ;
  402. //data: (unavailable)
  403. //data[i].children: (unavailable)