admin.js 73 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568
  1. /** EasyWeb spa v3.1.6 date:2020-03-11 License By http://easyweb.vip */
  2. layui.define(['layer', 'setter', 'layRouter'], function (exports) {
  3. var $ = layui.jquery;
  4. var layer = layui.layer;
  5. var setter = layui.setter;
  6. var layRouter = layui.layRouter;
  7. var bodyDOM = '.layui-layout-admin>.layui-body';
  8. var tabDOM = bodyDOM + '>.layui-tab';
  9. var sideDOM = '.layui-layout-admin>.layui-side>.layui-side-scroll';
  10. var headerDOM = '.layui-layout-admin>.layui-header';
  11. var navFilter = 'admin-side-nav';
  12. var admin = {version: 'v3.1.6', layerData: {}};
  13. /* 设置侧栏折叠 */
  14. admin.flexible = function (expand) {
  15. var $layout = $('.layui-layout-admin');
  16. var isExapnd = $layout.hasClass('admin-nav-mini');
  17. if (expand === undefined) expand = isExapnd;
  18. if (isExapnd === expand) {
  19. if (expand) {
  20. admin.hideTableScrollBar();
  21. $layout.removeClass('admin-nav-mini');
  22. } else {
  23. $layout.addClass('admin-nav-mini');
  24. }
  25. }
  26. admin.resizeTable(500);
  27. layui.event.call(this, 'admin', 'flexible({*})', {expand: expand});
  28. };
  29. /* 设置导航栏选中 */
  30. admin.activeNav = function (url) {
  31. if (!url) url = location.hash;
  32. if (url) {
  33. $(sideDOM + '>.layui-nav .layui-nav-item .layui-nav-child dd.layui-this').removeClass('layui-this');
  34. $(sideDOM + '>.layui-nav .layui-nav-item.layui-this').removeClass('layui-this');
  35. var $a = $(sideDOM + '>.layui-nav a[href="#' + url + '"]');
  36. if ($a.length > 0) {
  37. var isMini = $('.layui-layout-admin').hasClass('admin-nav-mini');
  38. if ($(sideDOM + '>.layui-nav').attr('lay-shrink') === 'all') { // 手风琴效果
  39. var $pChilds = $a.parent('dd').parents('.layui-nav-child');
  40. if (isMini) {
  41. $(sideDOM + '>.layui-nav .layui-nav-itemed>.layui-nav-child').not($pChilds).css('display', 'none');
  42. } else {
  43. $(sideDOM + '>.layui-nav .layui-nav-itemed>.layui-nav-child').not($pChilds).slideUp('fast');
  44. }
  45. $(sideDOM + '>.layui-nav .layui-nav-itemed').not($pChilds.parent()).removeClass('layui-nav-itemed');
  46. }
  47. $a.parent().addClass('layui-this'); // 选中当前
  48. var $asParents = $a.parent('dd').parents('.layui-nav-child').parent();
  49. if (isMini) {
  50. $asParents.not('.layui-nav-itemed').children('.layui-nav-child').css('display', 'block');
  51. } else {
  52. $asParents.not('.layui-nav-itemed').children('.layui-nav-child').slideDown('fast', function () {
  53. // 菜单超出屏幕自动滚动
  54. var topBeyond = $a.offset().top + $a.outerHeight() + 30 - admin.getPageHeight();
  55. var topDisparity = 50 + 65 - $a.offset().top;
  56. if (topBeyond > 0) {
  57. $(sideDOM).animate({'scrollTop': $(sideDOM).scrollTop() + topBeyond}, 100);
  58. } else if (topDisparity > 0) {
  59. $(sideDOM).animate({'scrollTop': $(sideDOM).scrollTop() - topDisparity}, 100);
  60. }
  61. });
  62. }
  63. $asParents.addClass('layui-nav-itemed'); // 展开所有父级
  64. // 适配多系统模式
  65. $('ul[lay-filter="' + navFilter + '"]').addClass('layui-hide');
  66. var $aUl = $a.parents('.layui-nav');
  67. $aUl.removeClass('layui-hide');
  68. $(headerDOM + '>.layui-nav>.layui-nav-item').removeClass('layui-this');
  69. $(headerDOM + '>.layui-nav>.layui-nav-item>a[nav-bind="' + $aUl.attr('nav-id') + '"]').parent().addClass('layui-this');
  70. }
  71. } else {
  72. console.warn('active url is null');
  73. }
  74. };
  75. /* 右侧弹出 */
  76. admin.popupRight = function (param) {
  77. param.anim = -1;
  78. param.offset = 'r';
  79. param.move = false;
  80. param.fixed = true;
  81. if (param.area === undefined) param.area = '336px';
  82. if (param.title === undefined) param.title = false;
  83. if (param.closeBtn === undefined) param.closeBtn = false;
  84. if (param.shadeClose === undefined) param.shadeClose = true;
  85. if (param.skin === undefined) param.skin = 'layui-anim layui-anim-rl layui-layer-adminRight';
  86. return admin.open(param);
  87. };
  88. /* 封装layer.open */
  89. admin.open = function (param) {
  90. if (param.content && param.type === 2) param.url = undefined; // 参数纠正
  91. if (param.url && (param.type === 2 || param.type === undefined)) param.type = 1; // 参数纠正
  92. if (param.area === undefined) param.area = param.type === 2 ? ['360px', '300px'] : '360px';
  93. if (param.offset === undefined) param.offset = '70px';
  94. if (param.shade === undefined) param.shade = .1;
  95. if (param.fixed === undefined) param.fixed = false;
  96. if (param.resize === undefined) param.resize = false;
  97. if (param.skin === undefined) param.skin = 'layui-layer-admin';
  98. var eCallBack = param.end;
  99. param.end = function () {
  100. layer.closeAll('tips');
  101. eCallBack && eCallBack();
  102. };
  103. if (param.url) {
  104. var sCallBack = param.success;
  105. param.success = function (layero, index) {
  106. $(layero).data('tpl', param.tpl || '');
  107. admin.reloadLayer(index, param.url, sCallBack);
  108. };
  109. }
  110. var layIndex = layer.open(param);
  111. if (param.data) admin.layerData['d' + layIndex] = param.data;
  112. return layIndex;
  113. };
  114. /* 获取弹窗数据 */
  115. admin.getLayerData = function (index, key) {
  116. if (index === undefined) {
  117. index = parent.layer.getFrameIndex(window.name);
  118. if (index === undefined) return null;
  119. else return parent.layui.admin.getLayerData(parseInt(index), key);
  120. } else if (isNaN(index)) {
  121. var layId = $(index).parents('.layui-layer').first().attr('id');
  122. if (layId) index = layId.substring(11);
  123. }
  124. var layerData = admin.layerData['d' + index];
  125. if (key && layerData) return layerData[key];
  126. return layerData;
  127. };
  128. /* 放入弹窗数据 */
  129. admin.putLayerData = function (key, value, index) {
  130. if (index === undefined) {
  131. index = parent.layer.getFrameIndex(window.name);
  132. if (index === undefined) return;
  133. else return parent.layui.admin.putLayerData(key, value, parseInt(index));
  134. } else if (isNaN(index)) {
  135. var layId = $(index).parents('.layui-layer').first().attr('id');
  136. if (layId) index = layId.substring(11);
  137. }
  138. var layerData = admin.getLayerData(index);
  139. if (!layerData) layerData = {};
  140. layerData[key] = value;
  141. admin.layerData['d' + index] = layerData;
  142. };
  143. /* 刷新url方式的layer */
  144. admin.reloadLayer = function (index, url, success) {
  145. if (typeof url === 'function') {
  146. success = url;
  147. url = undefined;
  148. }
  149. if (isNaN(index)) {
  150. var layId = $(index).parents('.layui-layer').first().attr('id');
  151. if (layId) index = layId.substring(11);
  152. }
  153. var $layero = $('#layui-layer' + index);
  154. if (url === undefined) url = $layero.data('url');
  155. if (!url) return;
  156. $layero.data('url', url);
  157. admin.showLoading($layero);
  158. admin.ajax({
  159. url: url,
  160. dataType: 'html',
  161. success: function (res) {
  162. admin.removeLoading($layero, false);
  163. if (typeof res !== 'string') res = JSON.stringify(res);
  164. var tpl = $layero.data('tpl');
  165. if (tpl === true || tpl === 'true') {
  166. var data = admin.getLayerData(index) || {};
  167. data.layerIndex = index;
  168. res = admin.util.tpl(res, data, setter.tplOpen, setter.tplClose);
  169. }
  170. $layero.children('.layui-layer-content').html(res);
  171. success && success($layero[0], index);
  172. }
  173. });
  174. };
  175. /* 封装layer.alert */
  176. admin.alert = function (content, options, yes) {
  177. if (typeof options === 'function') {
  178. yes = options;
  179. options = {};
  180. }
  181. if (options.skin === undefined) options.skin = 'layui-layer-admin';
  182. if (param.shade === undefined) param.shade = .1;
  183. return layer.alert(content, options, yes);
  184. };
  185. /* 封装layer.confirm */
  186. admin.confirm = function (content, options, yes, cancel) {
  187. if (typeof options === 'function') {
  188. cancel = yes;
  189. yes = options;
  190. options = {};
  191. }
  192. if (options.skin === undefined) options.skin = 'layui-layer-admin';
  193. if (options.shade === undefined) options.shade = .1;
  194. return layer.confirm(content, options, yes, cancel);
  195. };
  196. /* 封装layer.prompt */
  197. admin.prompt = function (options, yes) {
  198. if (typeof options === 'function') {
  199. yes = options;
  200. options = {};
  201. }
  202. if (options.skin === undefined) options.skin = 'layui-layer-admin layui-layer-prompt';
  203. if (options.shade === undefined) options.shade = .1;
  204. return layer.prompt(options, yes);
  205. };
  206. /* 封装ajax请求,返回数据类型为json */
  207. admin.req = function (url, data, success, method, option) {
  208. if (typeof data === 'function') {
  209. option = method;
  210. method = success;
  211. success = data;
  212. data = {};
  213. }
  214. if (method !== undefined && typeof method !== 'string') {
  215. option = method;
  216. method = undefined;
  217. }
  218. if (!method) method = 'GET';
  219. if (typeof data === 'string') {
  220. if (!option) option = {};
  221. if (!option.contentType) option.contentType = 'application/json';
  222. } else if (setter.reqPutToPost) {
  223. if ('put' === method.toLowerCase()) {
  224. method = 'POST';
  225. data._method = 'PUT';
  226. } else if ('delete' === method.toLowerCase()) {
  227. method = 'GET';
  228. data._method = 'DELETE';
  229. }
  230. }
  231. return admin.ajax($.extend({
  232. url: (setter.baseServer || '') + url,
  233. data: data,
  234. type: method,
  235. dataType: 'json',
  236. success: success
  237. }, option));
  238. };
  239. /* 封装ajax请求 */
  240. admin.ajax = function (param) {
  241. var oldParam = admin.util.deepClone(param);
  242. if (!param.dataType) param.dataType = 'json';
  243. if (!param.headers) param.headers = {};
  244. // 统一设置header
  245. var headers = setter.getAjaxHeaders(param.url);
  246. // console.log(headers)
  247. if (headers) {
  248. for (var i = 0; i < headers.length; i++) {
  249. if (param.headers[headers[i].name] === undefined) {
  250. param.headers[headers[i].name] = headers[i].value;
  251. }
  252. }
  253. }
  254. // success预处理
  255. var success = param.success;
  256. param.success = function (result, status, xhr) {
  257. var before = setter.ajaxSuccessBefore(admin.parseJSON(result), param.url, {
  258. param: oldParam,
  259. reload: function (p) {
  260. admin.ajax($.extend(oldParam, p));
  261. },
  262. update: function (r) {
  263. result = r;
  264. }
  265. });
  266. if (before !== false) success && success(result, status, xhr);
  267. else param.cancel && param.cancel();
  268. };
  269. param.error = function (xhr, status) {
  270. // 2020/04/11 处理状态码
  271. param.success(xhr.responseJSON || {errcode: xhr.status, errmsg: xhr.status + ' ' + xhr.statusText}
  272. , status, xhr);
  273. //param.success({code: xhr.status, msg: xhr.statusText}, status, xhr);
  274. };
  275. // 解决缓存问题
  276. if (layui.cache.version && (!setter.apiNoCache || param.dataType.toLowerCase() !== 'json')) {
  277. if (param.url.indexOf('?') === -1) param.url += '?v=';
  278. else param.url += '&v=';
  279. if (layui.cache.version === true) param.url += new Date().getTime();
  280. else param.url += layui.cache.version;
  281. }
  282. return $.ajax(param);
  283. };
  284. /* 解析json */
  285. admin.parseJSON = function (str) {
  286. if (typeof str === 'string') {
  287. try {
  288. return JSON.parse(str);
  289. } catch (e) {
  290. }
  291. }
  292. return str;
  293. };
  294. /* 显示加载动画 */
  295. admin.showLoading = function (elem, type, opacity, size) {
  296. if (elem !== undefined && (typeof elem !== 'string') && !(elem instanceof $)) {
  297. type = elem.type;
  298. opacity = elem.opacity;
  299. size = elem.size;
  300. elem = elem.elem;
  301. }
  302. if (type === undefined) type = 1;
  303. if (size === undefined) size = 'sm';
  304. if (elem === undefined) elem = 'body';
  305. var loader = [
  306. '<div class="ball-loader ' + size + '"><span></span><span></span><span></span><span></span></div>',
  307. '<div class="rubik-loader ' + size + '"></div>',
  308. '<div class="signal-loader ' + size + '"><span></span><span></span><span></span><span></span></div>'
  309. ];
  310. $(elem).addClass('page-no-scroll'); // 禁用滚动条
  311. $(elem).scrollTop(0);
  312. var $loading = $(elem).children('.page-loading');
  313. if ($loading.length <= 0) {
  314. $(elem).append('<div class="page-loading">' + loader[type - 1] + '</div>');
  315. $loading = $(elem).children('.page-loading');
  316. }
  317. if (opacity !== undefined) $loading.css('background-color', 'rgba(255,255,255,' + opacity + ')');
  318. $loading.show();
  319. };
  320. /* 移除加载动画 */
  321. admin.removeLoading = function (elem, fade, del) {
  322. if (elem === undefined) elem = 'body';
  323. if (fade === undefined) fade = true;
  324. var $loading = $(elem).children('.page-loading');
  325. if (del) $loading.remove();
  326. else if (fade) $loading.fadeOut('fast');
  327. else $loading.hide();
  328. $(elem).removeClass('page-no-scroll');
  329. };
  330. /* 缓存临时数据 */
  331. admin.putTempData = function (key, value, local) {
  332. var tableName = local ? setter.tableName : setter.tableName + '_tempData';
  333. if (value === undefined || value === null) {
  334. if (local) {
  335. layui.data(tableName, {key: key, remove: true});
  336. } else {
  337. layui.sessionData(tableName, {key: key, remove: true});
  338. }
  339. } else {
  340. if (local) {
  341. layui.data(tableName, {key: key, value: value});
  342. } else {
  343. layui.sessionData(tableName, {key: key, value: value});
  344. }
  345. }
  346. };
  347. /* 获取缓存临时数据 */
  348. admin.getTempData = function (key, local) {
  349. if (typeof key === 'boolean') {
  350. local = key;
  351. key = undefined;
  352. }
  353. var tableName = local ? setter.tableName : setter.tableName + '_tempData';
  354. var tempData = local ? layui.data(tableName) : layui.sessionData(tableName);
  355. if (!key) return tempData;
  356. return tempData ? tempData[key] : undefined;
  357. };
  358. /* 滑动选项卡 */
  359. admin.rollPage = function (d) {
  360. var $tabTitle = $(tabDOM + '>.layui-tab-title');
  361. var left = $tabTitle.scrollLeft();
  362. if ('left' === d) {
  363. $tabTitle.animate({'scrollLeft': left - 120}, 100);
  364. } else if ('auto' === d) {
  365. var autoLeft = 0;
  366. $tabTitle.children("li").each(function () {
  367. if ($(this).hasClass('layui-this')) {
  368. return false;
  369. } else {
  370. autoLeft += $(this).outerWidth();
  371. }
  372. });
  373. $tabTitle.animate({'scrollLeft': autoLeft - 120}, 100);
  374. } else {
  375. $tabTitle.animate({'scrollLeft': left + 120}, 100);
  376. }
  377. };
  378. /* 刷新当前选项卡 */
  379. admin.refresh = function (url) {
  380. layRouter.refresh(url);
  381. };
  382. /* 关闭当前选项卡 */
  383. admin.closeThisTabs = function (url) {
  384. admin.closeTabOperNav();
  385. var $title = $(tabDOM + '>.layui-tab-title');
  386. if (!url) {
  387. if ($title.find('li').first().hasClass('layui-this')) {
  388. layer.msg('主页不能关闭', {icon: 2});
  389. return;
  390. }
  391. $title.find('li.layui-this').find('.layui-tab-close').trigger('click');
  392. } else {
  393. if (url === $title.find('li').first().attr('lay-id')) {
  394. layer.msg('主页不能关闭', {icon: 2});
  395. return;
  396. }
  397. $title.find('li[lay-id="' + url + '"]').find('.layui-tab-close').trigger('click');
  398. }
  399. };
  400. /* 关闭其他选项卡 */
  401. admin.closeOtherTabs = function (url) {
  402. if (!url) {
  403. $(tabDOM + '>.layui-tab-title li:gt(0):not(.layui-this)').find('.layui-tab-close').trigger('click');
  404. } else {
  405. $(tabDOM + '>.layui-tab-title li:gt(0)').each(function () {
  406. if (url !== $(this).attr('lay-id')) {
  407. $(this).find('.layui-tab-close').trigger('click');
  408. }
  409. });
  410. }
  411. admin.closeTabOperNav();
  412. };
  413. /* 关闭所有选项卡 */
  414. admin.closeAllTabs = function () {
  415. $(tabDOM + '>.layui-tab-title li:gt(0)').find('.layui-tab-close').trigger('click');
  416. $(tabDOM + '>.layui-tab-title li:eq(0)').trigger('click');
  417. admin.closeTabOperNav();
  418. };
  419. /* 关闭选项卡操作菜单 */
  420. admin.closeTabOperNav = function () {
  421. $('.layui-icon-down .layui-nav .layui-nav-child').removeClass('layui-show');
  422. };
  423. /* 设置主题 */
  424. admin.changeTheme = function (theme, win, noCache, noChild) {
  425. if (!noCache) admin.putSetting('defaultTheme', theme);
  426. if (!win) win = top;
  427. admin.removeTheme(win);
  428. if (theme) {
  429. try {
  430. var $body = win.layui.jquery('body');
  431. $body.addClass(theme);
  432. $body.data('theme', theme);
  433. } catch (e) {
  434. }
  435. }
  436. if (!noChild) {
  437. var ifs = win.frames;
  438. for (var i = 0; i < ifs.length; i++) {
  439. admin.changeTheme(theme, ifs[i], true, false);
  440. }
  441. }
  442. };
  443. /* 移除主题 */
  444. admin.removeTheme = function (w) {
  445. if (!w) w = window;
  446. try {
  447. var $body = w.layui.jquery('body');
  448. var theme = $body.data('theme');
  449. if (theme) $body.removeClass(theme);
  450. $body.removeData('theme');
  451. } catch (e) {
  452. }
  453. };
  454. /* 关闭当前iframe层弹窗 */
  455. admin.closeThisDialog = function () {
  456. return admin.closeDialog();
  457. };
  458. /* 关闭elem所在的页面层弹窗 */
  459. admin.closeDialog = function (elem) {
  460. if (elem) {
  461. var id = $(elem).parents('.layui-layer').first().attr('id');
  462. if (id && id.length >= 11) layer.close(id.substring(11));
  463. } else {
  464. parent.layer.close(parent.layer.getFrameIndex(window.name));
  465. }
  466. };
  467. /* 让当前的iframe弹层自适应高度 */
  468. admin.iframeAuto = function () {
  469. parent.layer.iframeAuto(parent.layer.getFrameIndex(window.name));
  470. };
  471. /* 获取浏览器高度 */
  472. admin.getPageHeight = function () {
  473. return document.documentElement.clientHeight || document.body.clientHeight;
  474. };
  475. /* 获取浏览器宽度 */
  476. admin.getPageWidth = function () {
  477. return document.documentElement.clientWidth || document.body.clientWidth;
  478. };
  479. /* 绑定表单弹窗 */
  480. admin.modelForm = function (layero, btnFilter, formFilter) {
  481. var $layero = $(layero);
  482. $layero.addClass('layui-form');
  483. if (formFilter) $layero.attr('lay-filter', formFilter);
  484. // 确定按钮绑定submit
  485. var $btnSubmit = $layero.find('.layui-layer-btn .layui-layer-btn0');
  486. $btnSubmit.attr('lay-submit', '');
  487. $btnSubmit.attr('lay-filter', btnFilter);
  488. };
  489. /* loading按钮 */
  490. admin.btnLoading = function (elem, text, loading) {
  491. if (text !== undefined && (typeof text === 'boolean')) {
  492. loading = text;
  493. text = undefined;
  494. }
  495. if (text === undefined) text = '&nbsp;加载中';
  496. if (loading === undefined) loading = true;
  497. var $elem = $(elem);
  498. if (loading) {
  499. $elem.addClass('ew-btn-loading');
  500. $elem.prepend('<span class="ew-btn-loading-text"><i class="layui-icon layui-icon-loading layui-anim layui-anim-rotate layui-anim-loop"></i>' + text + '</span>');
  501. $elem.prop('disabled', 'disabled');
  502. } else {
  503. $elem.removeClass('ew-btn-loading');
  504. $elem.children('.ew-btn-loading-text').remove();
  505. $elem.removeProp('disabled', 'disabled');
  506. }
  507. };
  508. /* 鼠标移入侧边栏自动展开 */
  509. admin.openSideAutoExpand = function () {
  510. var $side = $('.layui-layout-admin>.layui-side');
  511. $side.off('mouseenter.openSideAutoExpand').on("mouseenter.openSideAutoExpand", function () {
  512. if ($(this).parent().hasClass('admin-nav-mini')) {
  513. admin.flexible(true);
  514. $(this).addClass('side-mini-hover');
  515. }
  516. });
  517. $side.off('mouseleave.openSideAutoExpand').on("mouseleave.openSideAutoExpand", function () {
  518. if ($(this).hasClass('side-mini-hover')) {
  519. admin.flexible(false);
  520. $(this).removeClass('side-mini-hover');
  521. }
  522. });
  523. };
  524. /* 表格单元格超出内容自动展开 */
  525. admin.openCellAutoExpand = function () {
  526. var $body = $('body');
  527. $body.off('mouseenter.openCellAutoExpand').on('mouseenter.openCellAutoExpand', '.layui-table-view td', function () {
  528. $(this).find('.layui-table-grid-down').trigger('click');
  529. });
  530. $body.off('mouseleave.openCellAutoExpand').on('mouseleave.openCellAutoExpand', '.layui-table-tips>.layui-layer-content', function () {
  531. $('.layui-table-tips-c').trigger('click');
  532. });
  533. };
  534. /* open事件解析layer参数 */
  535. admin.parseLayerOption = function (option) {
  536. // 数组类型进行转换
  537. for (var f in option) {
  538. if (!option.hasOwnProperty(f)) continue;
  539. if (option[f] && option[f].toString().indexOf(',') !== -1) {
  540. option[f] = option[f].toString().split(',');
  541. }
  542. }
  543. // function类型参数转换
  544. var funStrs = ['success', 'cancel', 'end', 'full', 'min', 'restore'];
  545. for (var i = 0; i < funStrs.length; i++) {
  546. for (var k in option) {
  547. if (!option.hasOwnProperty(k)) continue;
  548. if (k === funStrs[i]) option[k] = window[option[k]];
  549. }
  550. }
  551. // content取内容
  552. if (option.content && (typeof option.content === 'string') && option.content.indexOf('#') === 0) {
  553. if ($(option.content).is('script')) {
  554. option.content = $(option.content).html();
  555. } else {
  556. option.content = $(option.content);
  557. }
  558. }
  559. if (option.type === undefined && option.url === undefined) option.type = 2; // 默认为iframe类型
  560. return option;
  561. };
  562. /* 字符串形式的parent.parent转window对象 */
  563. admin.strToWin = function (str) {
  564. var win = window;
  565. if (!str) return win;
  566. var ws = str.split('.');
  567. for (var i = 0; i < ws.length; i++) win = win[ws[i]];
  568. return win;
  569. };
  570. /* 解决折叠侧边栏表格滚动条闪现 */
  571. admin.hideTableScrollBar = function () {
  572. if (admin.getPageWidth() <= 768) return;
  573. var $tbView = setter.pageTabs ? $(tabDOM + '>.layui-tab-content>.layui-tab-item.layui-show') : $(bodyDOM);
  574. if (window.hsbTimer) clearTimeout(window.hsbTimer);
  575. $tbView.find('.layui-table-body.layui-table-main').addClass('no-scrollbar');
  576. window.hsbTimer = setTimeout(function () {
  577. $tbView.find('.layui-table-body.layui-table-main').removeClass('no-scrollbar');
  578. }, 600);
  579. };
  580. /* 重置表格尺寸 */
  581. admin.resizeTable = function (time) {
  582. setTimeout(function () {
  583. var $tbView = setter.pageTabs ? $(tabDOM + '>.layui-tab-content>.layui-tab-item.layui-show') : $(bodyDOM);
  584. $tbView.find('.layui-table-view').each(function () {
  585. var tbId = $(this).attr('lay-id');
  586. layui.table && layui.table.resize(tbId);
  587. });
  588. }, time === undefined ? 0 : time);
  589. };
  590. /* 判断是否有权限 */
  591. admin.hasPerm = function (r) {
  592. // 是否超级管理员
  593. if (setter.getUser().roles.find(ele => ele === "super"))
  594. return true;
  595. var auth = setter.getUserAuths();
  596. if (auth) {
  597. for (var i = 0; i < auth.length; i++) {
  598. //console.log(r, auth[i])
  599. if (r == auth[i]) return true;
  600. }
  601. }
  602. return false;
  603. };
  604. /* 移除没有权限的元素 */
  605. admin.renderPerm = function () {
  606. $('[perm-show]').each(function () {
  607. var auth = $(this).attr('perm-show');
  608. if (!admin.hasPerm(auth)) $(this).remove();
  609. });
  610. };
  611. /* admin提供的事件 */
  612. admin.events = {
  613. /* 折叠侧导航 */
  614. flexible: function () {
  615. admin.strToWin($(this).data('window')).layui.admin.flexible();
  616. },
  617. /* 刷新主体部分 */
  618. refresh: function () {
  619. admin.strToWin($(this).data('window')).layui.admin.refresh();
  620. },
  621. /* 后退 */
  622. back: function () {
  623. admin.strToWin($(this).data('window')).history.back();
  624. },
  625. /* 设置主题 */
  626. theme: function () {
  627. var option = admin.util.deepClone($(this).data());
  628. admin.strToWin(option.window).layui.admin.popupRight($.extend({
  629. id: 'layer-theme',
  630. url: option.url || 'pages/tpl/theme.html'
  631. }, admin.parseLayerOption(option)));
  632. },
  633. /* 打开便签 */
  634. note: function () {
  635. var option = admin.util.deepClone($(this).data());
  636. admin.strToWin(option.window).layui.admin.popupRight($.extend({
  637. id: 'layer-note',
  638. url: option.url || 'components/tpl/note.html'
  639. }, admin.parseLayerOption(option)));
  640. },
  641. /* 打开消息 */
  642. message: function () {
  643. var option = admin.util.deepClone($(this).data());
  644. admin.strToWin(option.window).layui.admin.popupRight($.extend({
  645. id: 'layer-notice',
  646. url: option.url || 'components/tpl/message.html'
  647. }, admin.parseLayerOption(option)));
  648. },
  649. /* 打开修改密码弹窗 */
  650. psw: function () {
  651. var option = admin.util.deepClone($(this).data());
  652. admin.strToWin(option.window).layui.admin.open($.extend({
  653. id: 'layer-psw',
  654. title: '修改密码',
  655. shade: 0,
  656. url: option.url || 'components/tpl/password.html'
  657. }, admin.parseLayerOption(option)));
  658. },
  659. /* 退出登录 */
  660. logout: function () {
  661. var option = admin.util.deepClone($(this).data());
  662. admin.unlockScreen();
  663. if (false === option.confirm || 'false' === option.confirm) {
  664. doLogout();
  665. return;
  666. }
  667. admin.strToWin(option.window).layui.layer.confirm(option.content || '确定要退出登录吗?', $.extend({
  668. title: '温馨提示',
  669. skin: 'layui-layer-admin',
  670. shade: .1
  671. }, admin.parseLayerOption(option)), function () {
  672. doLogout();
  673. });
  674. function doLogout() {
  675. if (option.ajax) {
  676. var loadIndex = layer.load(2);
  677. admin.req(option.ajax, function (res) {
  678. layer.close(loadIndex);
  679. if (res.code == (option.code || 0)) {
  680. setter.removeToken && setter.removeToken();
  681. location.replace(option.url || '/');
  682. } else {
  683. layer.msg(res.msg, {icon: 2});
  684. }
  685. }, option.method || 'delete');
  686. } else {
  687. setter.removeToken && setter.removeToken();
  688. location.replace(option.url || '/');
  689. }
  690. }
  691. },
  692. /* 打开弹窗 */
  693. open: function () {
  694. var option = admin.util.deepClone($(this).data());
  695. admin.strToWin(option.window).layui.admin.open(admin.parseLayerOption(option));
  696. },
  697. /* 打开右侧弹窗 */
  698. popupRight: function () {
  699. var option = admin.util.deepClone($(this).data());
  700. admin.strToWin(option.window).layui.admin.popupRight(admin.parseLayerOption(option));
  701. },
  702. /* 全屏 */
  703. fullScreen: function () {
  704. var ac = 'layui-icon-screen-full', ic = 'layui-icon-screen-restore';
  705. var $ti = $(this).find('i');
  706. var isFullscreen = document.fullscreenElement || document.msFullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement || false;
  707. if (isFullscreen) {
  708. var efs = document.exitFullscreen || document.webkitExitFullscreen || document.mozCancelFullScreen || document.msExitFullscreen;
  709. if (efs) {
  710. efs.call(document);
  711. } else if (window.ActiveXObject) {
  712. var ws = new ActiveXObject('WScript.Shell');
  713. ws && ws.SendKeys('{F11}');
  714. }
  715. $ti.addClass(ac).removeClass(ic);
  716. } else {
  717. var el = document.documentElement;
  718. var rfs = el.requestFullscreen || el.webkitRequestFullscreen || el.mozRequestFullScreen || el.msRequestFullscreen;
  719. if (rfs) {
  720. rfs.call(el);
  721. } else if (window.ActiveXObject) {
  722. var wss = new ActiveXObject('WScript.Shell');
  723. wss && wss.SendKeys('{F11}');
  724. }
  725. $ti.addClass(ic).removeClass(ac);
  726. }
  727. },
  728. /* 左滑动tab */
  729. leftPage: function () {
  730. admin.strToWin($(this).data('window')).layui.admin.rollPage('left');
  731. },
  732. /* 右滑动tab */
  733. rightPage: function () {
  734. admin.strToWin($(this).data('window')).layui.admin.rollPage();
  735. },
  736. /* 关闭当前选项卡 */
  737. closeThisTabs: function () {
  738. var url = $(this).data('url');
  739. admin.strToWin($(this).data('window')).layui.admin.closeThisTabs(url);
  740. },
  741. /* 关闭其他选项卡 */
  742. closeOtherTabs: function () {
  743. admin.strToWin($(this).data('window')).layui.admin.closeOtherTabs();
  744. },
  745. /* 关闭所有选项卡 */
  746. closeAllTabs: function () {
  747. admin.strToWin($(this).data('window')).layui.admin.closeAllTabs();
  748. },
  749. /* 关闭当前弹窗(智能) */
  750. closeDialog: function () {
  751. if ($(this).parents('.layui-layer').length > 0) admin.closeDialog(this);
  752. else admin.closeDialog();
  753. },
  754. /* 关闭当前iframe弹窗 */
  755. closeIframeDialog: function () {
  756. admin.closeDialog();
  757. },
  758. /* 关闭当前页面层弹窗 */
  759. closePageDialog: function () {
  760. admin.closeDialog(this);
  761. },
  762. /* 锁屏 */
  763. lockScreen: function () {
  764. var url = $(this).data('url');
  765. admin.strToWin($(this).data('window')).layui.admin.lockScreen(url);
  766. }
  767. };
  768. /* 选择位置 */
  769. admin.chooseLocation = function (param) {
  770. var dialogTitle = param.title; // 弹窗标题
  771. var onSelect = param.onSelect; // 选择回调
  772. var needCity = param.needCity; // 是否返回行政区
  773. var mapCenter = param.center; // 地图中心
  774. var defaultZoom = param.defaultZoom; // 地图默认缩放级别
  775. var pointZoom = param.pointZoom; // 选中时地图缩放级别
  776. var searchKeywords = param.keywords; // poi检索关键字
  777. var searchPageSize = param.pageSize; // poi检索最大数量
  778. var mapJsUrl = param.mapJsUrl; // 高德地图js的url
  779. if (dialogTitle === undefined) dialogTitle = '选择位置';
  780. if (defaultZoom === undefined) defaultZoom = 11;
  781. if (pointZoom === undefined) pointZoom = 17;
  782. if (searchKeywords === undefined) searchKeywords = '';
  783. if (searchPageSize === undefined) searchPageSize = 30;
  784. if (mapJsUrl === undefined) mapJsUrl = 'https://webapi.amap.com/maps?v=1.4.14&key=006d995d433058322319fa797f2876f5';
  785. var isSelMove = false, selLocation;
  786. // 搜索附近
  787. var searchNearBy = function (lat, lng) {
  788. AMap.service(['AMap.PlaceSearch'], function () {
  789. var placeSearch = new AMap.PlaceSearch({
  790. type: '',
  791. pageSize: searchPageSize,
  792. pageIndex: 1
  793. });
  794. var cpoint = [lng, lat];
  795. placeSearch.searchNearBy(searchKeywords, cpoint, 1000, function (status, result) {
  796. if (status === 'complete') {
  797. var pois = result.poiList.pois;
  798. var htmlList = '';
  799. for (var i = 0; i < pois.length; i++) {
  800. var poiItem = pois[i];
  801. if (poiItem.location !== undefined) {
  802. htmlList += '<div data-lng="' + poiItem.location.lng + '" data-lat="' + poiItem.location.lat + '" class="ew-map-select-search-list-item">';
  803. htmlList += ' <div class="ew-map-select-search-list-item-title">' + poiItem.name + '</div>';
  804. htmlList += ' <div class="ew-map-select-search-list-item-address">' + poiItem.address + '</div>';
  805. htmlList += ' <div class="ew-map-select-search-list-item-icon-ok layui-hide"><i class="layui-icon layui-icon-ok-circle"></i></div>';
  806. htmlList += '</div>';
  807. }
  808. }
  809. $('#ew-map-select-pois').html(htmlList);
  810. }
  811. });
  812. });
  813. };
  814. // 渲染地图
  815. var renderMap = function () {
  816. var mapOption = {
  817. resizeEnable: true, // 监控地图容器尺寸变化
  818. zoom: defaultZoom // 初缩放级别
  819. };
  820. mapCenter && (mapOption.center = mapCenter);
  821. var map = new AMap.Map('ew-map-select-map', mapOption);
  822. // 地图加载完成
  823. map.on('complete', function () {
  824. var center = map.getCenter();
  825. searchNearBy(center.lat, center.lng);
  826. });
  827. // 地图移动结束事件
  828. map.on('moveend', function () {
  829. if (isSelMove) {
  830. isSelMove = false;
  831. } else {
  832. $('#ew-map-select-tips').addClass('layui-hide');
  833. $('#ew-map-select-center-img').removeClass('bounceInDown');
  834. setTimeout(function () {
  835. $('#ew-map-select-center-img').addClass('bounceInDown');
  836. });
  837. var center = map.getCenter();
  838. searchNearBy(center.lat, center.lng);
  839. }
  840. });
  841. // poi列表点击事件
  842. $('#ew-map-select-pois').off('click').on('click', '.ew-map-select-search-list-item', function () {
  843. $('#ew-map-select-tips').addClass('layui-hide');
  844. $('#ew-map-select-pois .ew-map-select-search-list-item-icon-ok').addClass('layui-hide');
  845. $(this).find('.ew-map-select-search-list-item-icon-ok').removeClass('layui-hide');
  846. $('#ew-map-select-center-img').removeClass('bounceInDown');
  847. setTimeout(function () {
  848. $('#ew-map-select-center-img').addClass('bounceInDown');
  849. });
  850. var lng = $(this).data('lng');
  851. var lat = $(this).data('lat');
  852. var name = $(this).find('.ew-map-select-search-list-item-title').text();
  853. var address = $(this).find('.ew-map-select-search-list-item-address').text();
  854. selLocation = {name: name, address: address, lat: lat, lng: lng};
  855. isSelMove = true;
  856. map.setZoomAndCenter(pointZoom, [lng, lat]);
  857. });
  858. // 确定按钮点击事件
  859. $('#ew-map-select-btn-ok').click(function () {
  860. if (selLocation === undefined) {
  861. layer.msg('请点击位置列表选择', {icon: 2, anim: 6});
  862. } else if (onSelect) {
  863. if (needCity) {
  864. var loadIndex = layer.load(2);
  865. map.setCenter([selLocation.lng, selLocation.lat]);
  866. map.getCity(function (result) {
  867. layer.close(loadIndex);
  868. selLocation.city = result;
  869. admin.closeDialog('#ew-map-select-btn-ok');
  870. onSelect(selLocation);
  871. });
  872. } else {
  873. admin.closeDialog('#ew-map-select-btn-ok');
  874. onSelect(selLocation);
  875. }
  876. } else {
  877. admin.closeDialog('#ew-map-select-btn-ok');
  878. }
  879. });
  880. // 搜索提示
  881. var $inputSearch = $('#ew-map-select-input-search');
  882. $inputSearch.off('input').on('input', function () {
  883. var keywords = $(this).val();
  884. var $selectTips = $('#ew-map-select-tips');
  885. if (!keywords) {
  886. $selectTips.html('');
  887. $selectTips.addClass('layui-hide');
  888. }
  889. AMap.plugin('AMap.Autocomplete', function () {
  890. var autoComplete = new AMap.Autocomplete({
  891. city: '全国'
  892. });
  893. autoComplete.search(keywords, function (status, result) {
  894. if (result.tips) {
  895. var tips = result.tips;
  896. var htmlList = '';
  897. for (var i = 0; i < tips.length; i++) {
  898. var tipItem = tips[i];
  899. if (tipItem.location !== undefined) {
  900. htmlList += '<div data-lng="' + tipItem.location.lng + '" data-lat="' + tipItem.location.lat + '" class="ew-map-select-search-list-item">';
  901. htmlList += ' <div class="ew-map-select-search-list-item-icon-search"><i class="layui-icon layui-icon-search"></i></div>';
  902. htmlList += ' <div class="ew-map-select-search-list-item-title">' + tipItem.name + '</div>';
  903. htmlList += ' <div class="ew-map-select-search-list-item-address">' + tipItem.address + '</div>';
  904. htmlList += '</div>';
  905. }
  906. }
  907. $selectTips.html(htmlList);
  908. if (tips.length === 0) {
  909. $('#ew-map-select-tips').addClass('layui-hide');
  910. } else {
  911. $('#ew-map-select-tips').removeClass('layui-hide');
  912. }
  913. } else {
  914. $selectTips.html('');
  915. $selectTips.addClass('layui-hide');
  916. }
  917. });
  918. });
  919. });
  920. $inputSearch.off('blur').on('blur', function () {
  921. var keywords = $(this).val();
  922. var $selectTips = $('#ew-map-select-tips');
  923. if (!keywords) {
  924. $selectTips.html('');
  925. $selectTips.addClass('layui-hide');
  926. }
  927. });
  928. $inputSearch.off('focus').on('focus', function () {
  929. var keywords = $(this).val();
  930. if (keywords) $('#ew-map-select-tips').removeClass('layui-hide');
  931. });
  932. // tips列表点击事件
  933. $('#ew-map-select-tips').off('click').on('click', '.ew-map-select-search-list-item', function () {
  934. $('#ew-map-select-tips').addClass('layui-hide');
  935. var lng = $(this).data('lng');
  936. var lat = $(this).data('lat');
  937. selLocation = undefined;
  938. map.setZoomAndCenter(pointZoom, [lng, lat]);
  939. });
  940. };
  941. // 显示弹窗
  942. var htmlStr = '<div class="ew-map-select-tool" style="position: relative;">';
  943. htmlStr += ' 搜索:<input id="ew-map-select-input-search" class="layui-input icon-search inline-block" style="width: 190px;" placeholder="输入关键字搜索" autocomplete="off" />';
  944. htmlStr += ' <button id="ew-map-select-btn-ok" class="layui-btn icon-btn pull-right" type="button"><i class="layui-icon">&#xe605;</i>确定</button>';
  945. htmlStr += ' <div id="ew-map-select-tips" class="ew-map-select-search-list layui-hide">';
  946. htmlStr += ' </div>';
  947. htmlStr += ' </div>';
  948. htmlStr += ' <div class="layui-row ew-map-select">';
  949. htmlStr += ' <div class="layui-col-sm7 ew-map-select-map-group" style="position: relative;">';
  950. htmlStr += ' <div id="ew-map-select-map"></div>';
  951. htmlStr += ' <i id="ew-map-select-center-img2" class="layui-icon layui-icon-add-1"></i>';
  952. htmlStr += ' <img id="ew-map-select-center-img" src="https://3gimg.qq.com/lightmap/components/locationPicker2/image/marker.png" alt=""/>';
  953. htmlStr += ' </div>';
  954. htmlStr += ' <div id="ew-map-select-pois" class="layui-col-sm5 ew-map-select-search-list">';
  955. htmlStr += ' </div>';
  956. htmlStr += ' </div>';
  957. admin.open({
  958. id: 'ew-map-select',
  959. type: 1,
  960. title: dialogTitle,
  961. area: '750px',
  962. content: htmlStr,
  963. success: function (layero, dIndex) {
  964. var $content = $(layero).children('.layui-layer-content');
  965. $content.css('overflow', 'visible');
  966. admin.showLoading($content);
  967. if (undefined === window.AMap) {
  968. $.getScript(mapJsUrl, function () {
  969. renderMap();
  970. admin.removeLoading($content);
  971. });
  972. } else {
  973. renderMap();
  974. admin.removeLoading($content);
  975. }
  976. }
  977. });
  978. };
  979. /* 裁剪图片 */
  980. admin.cropImg = function (param) {
  981. var uploadedImageType = 'image/jpeg'; // 当前图片的类型
  982. var aspectRatio = param.aspectRatio; // 裁剪比例
  983. var imgSrc = param.imgSrc; // 裁剪图片
  984. var imgType = param.imgType; // 图片类型
  985. var onCrop = param.onCrop; // 裁剪完成回调
  986. var limitSize = param.limitSize; // 限制选择的图片大小
  987. var acceptMime = param.acceptMime; // 限制选择的图片类型
  988. var imgExts = param.exts; // 限制选择的图片类型
  989. var dialogTitle = param.title; // 弹窗的标题
  990. if (aspectRatio === undefined) aspectRatio = 1;
  991. if (dialogTitle === undefined) dialogTitle = '裁剪图片';
  992. if (imgType) uploadedImageType = imgType;
  993. layui.use(['Cropper', 'upload'], function () {
  994. var Cropper = layui.Cropper;
  995. var upload = layui.upload;
  996. // 渲染组件
  997. function renderElem() {
  998. var imgCropper, $cropImg = $('#ew-crop-img');
  999. // 上传文件按钮绑定事件
  1000. var uploadOptions = {
  1001. elem: '#ew-crop-img-upload',
  1002. auto: false,
  1003. drag: false,
  1004. choose: function (obj) {
  1005. obj.preview(function (index, file, result) {
  1006. uploadedImageType = file.type;
  1007. $cropImg.attr('src', result);
  1008. if (!imgSrc || !imgCropper) {
  1009. imgSrc = result;
  1010. renderElem();
  1011. } else {
  1012. imgCropper.destroy();
  1013. imgCropper = new Cropper($cropImg[0], options);
  1014. }
  1015. });
  1016. }
  1017. };
  1018. if (limitSize !== undefined) uploadOptions.size = limitSize;
  1019. if (acceptMime !== undefined) uploadOptions.acceptMime = acceptMime;
  1020. if (imgExts !== undefined) uploadOptions.exts = imgExts;
  1021. upload.render(uploadOptions);
  1022. // 没有传图片触发上传图片
  1023. if (!imgSrc) {
  1024. $('#ew-crop-img-upload').trigger('click');
  1025. return;
  1026. }
  1027. // 渲染裁剪组件
  1028. var options = {
  1029. aspectRatio: aspectRatio,
  1030. preview: '#ew-crop-img-preview'
  1031. };
  1032. imgCropper = new Cropper($cropImg[0], options);
  1033. // 操作按钮绑定事件
  1034. $('.ew-crop-tool').on('click', '[data-method]', function () {
  1035. var data = $(this).data(), cropped, result;
  1036. if (!imgCropper || !data.method) return;
  1037. data = $.extend({}, data);
  1038. cropped = imgCropper.cropped;
  1039. switch (data.method) {
  1040. case 'rotate':
  1041. if (cropped && options.viewMode > 0) imgCropper.clear();
  1042. break;
  1043. case 'getCroppedCanvas':
  1044. if (uploadedImageType === 'image/jpeg') {
  1045. if (!data.option) data.option = {};
  1046. data.option.fillColor = '#fff';
  1047. }
  1048. break;
  1049. }
  1050. result = imgCropper[data.method](data.option, data.secondOption);
  1051. switch (data.method) {
  1052. case 'rotate':
  1053. if (cropped && options.viewMode > 0) imgCropper.crop();
  1054. break;
  1055. case 'scaleX':
  1056. case 'scaleY':
  1057. $(this).data('option', -data.option);
  1058. break;
  1059. case 'getCroppedCanvas':
  1060. if (result) {
  1061. onCrop && onCrop(result.toDataURL(uploadedImageType));
  1062. admin.closeDialog('#ew-crop-img');
  1063. } else {
  1064. layer.msg('裁剪失败', {icon: 2, anim: 6});
  1065. }
  1066. break;
  1067. }
  1068. });
  1069. }
  1070. // 显示弹窗
  1071. var htmlStr = '<div class="layui-row">';
  1072. htmlStr += ' <div class="layui-col-sm8" style="min-height: 9rem;">';
  1073. htmlStr += ' <img id="ew-crop-img" src="' + (imgSrc ? imgSrc : '') + '" style="max-width:100%;" alt=""/>';
  1074. htmlStr += ' </div>';
  1075. htmlStr += ' <div class="layui-col-sm4 layui-hide-xs" style="padding: 15px;text-align: center;">';
  1076. htmlStr += ' <div id="ew-crop-img-preview" style="width: 100%;height: 9rem;overflow: hidden;display: inline-block;border: 1px solid #dddddd;"></div>';
  1077. htmlStr += ' </div>';
  1078. htmlStr += ' </div>';
  1079. htmlStr += ' <div class="text-center ew-crop-tool" style="padding: 15px 10px 5px 0;">';
  1080. htmlStr += ' <div class="layui-btn-group" style="margin-bottom: 10px;margin-left: 10px;">';
  1081. htmlStr += ' <button title="放大" data-method="zoom" data-option="0.1" class="layui-btn icon-btn" type="button"><i class="layui-icon layui-icon-add-1"></i></button>';
  1082. htmlStr += ' <button title="缩小" data-method="zoom" data-option="-0.1" class="layui-btn icon-btn" type="button"><span style="display: inline-block;width: 12px;height: 2.5px;background: rgba(255, 255, 255, 0.9);vertical-align: middle;margin: 0 4px;"></span></button>';
  1083. htmlStr += ' </div>';
  1084. htmlStr += ' <div class="layui-btn-group layui-hide-xs" style="margin-bottom: 10px;">';
  1085. htmlStr += ' <button title="向左旋转" data-method="rotate" data-option="-45" class="layui-btn icon-btn" type="button"><i class="layui-icon layui-icon-refresh-1" style="transform: rotateY(180deg) rotate(40deg);display: inline-block;"></i></button>';
  1086. htmlStr += ' <button title="向右旋转" data-method="rotate" data-option="45" class="layui-btn icon-btn" type="button"><i class="layui-icon layui-icon-refresh-1" style="transform: rotate(30deg);display: inline-block;"></i></button>';
  1087. htmlStr += ' </div>';
  1088. htmlStr += ' <div class="layui-btn-group" style="margin-bottom: 10px;">';
  1089. htmlStr += ' <button title="左移" data-method="move" data-option="-10" data-second-option="0" class="layui-btn icon-btn" type="button"><i class="layui-icon layui-icon-left"></i></button>';
  1090. htmlStr += ' <button title="右移" data-method="move" data-option="10" data-second-option="0" class="layui-btn icon-btn" type="button"><i class="layui-icon layui-icon-right"></i></button>';
  1091. htmlStr += ' <button title="上移" data-method="move" data-option="0" data-second-option="-10" class="layui-btn icon-btn" type="button"><i class="layui-icon layui-icon-up"></i></button>';
  1092. htmlStr += ' <button title="下移" data-method="move" data-option="0" data-second-option="10" class="layui-btn icon-btn" type="button"><i class="layui-icon layui-icon-down"></i></button>';
  1093. htmlStr += ' </div>';
  1094. htmlStr += ' <div class="layui-btn-group" style="margin-bottom: 10px;">';
  1095. htmlStr += ' <button title="左右翻转" data-method="scaleX" data-option="-1" class="layui-btn icon-btn" type="button" style="position: relative;width: 41px;"><i class="layui-icon layui-icon-triangle-r" style="position: absolute;left: 9px;top: 0;transform: rotateY(180deg);font-size: 16px;"></i><i class="layui-icon layui-icon-triangle-r" style="position: absolute; right: 3px; top: 0;font-size: 16px;"></i></button>';
  1096. htmlStr += ' <button title="上下翻转" data-method="scaleY" data-option="-1" class="layui-btn icon-btn" type="button" style="position: relative;width: 41px;"><i class="layui-icon layui-icon-triangle-d" style="position: absolute;left: 11px;top: 6px;transform: rotateX(180deg);line-height: normal;font-size: 16px;"></i><i class="layui-icon layui-icon-triangle-d" style="position: absolute; left: 11px; top: 14px;line-height: normal;font-size: 16px;"></i></button>';
  1097. htmlStr += ' </div>';
  1098. htmlStr += ' <div class="layui-btn-group" style="margin-bottom: 10px;">';
  1099. htmlStr += ' <button title="重新开始" data-method="reset" class="layui-btn icon-btn" type="button"><i class="layui-icon layui-icon-refresh"></i></button>';
  1100. htmlStr += ' <button title="选择图片" id="ew-crop-img-upload" class="layui-btn icon-btn" type="button" style="border-radius: 0 2px 2px 0;"><i class="layui-icon layui-icon-upload-drag"></i></button>';
  1101. htmlStr += ' </div>';
  1102. htmlStr += ' <button data-method="getCroppedCanvas" data-option="{ &quot;maxWidth&quot;: 4096, &quot;maxHeight&quot;: 4096 }" class="layui-btn icon-btn" type="button" style="margin-left: 10px;margin-bottom: 10px;"><i class="layui-icon">&#xe605;</i>完成</button>';
  1103. htmlStr += ' </div>';
  1104. admin.open({
  1105. title: dialogTitle,
  1106. area: '665px',
  1107. type: 1,
  1108. content: htmlStr,
  1109. success: function (layero, dIndex) {
  1110. $(layero).children('.layui-layer-content').css('overflow', 'visible');
  1111. renderElem();
  1112. }
  1113. });
  1114. });
  1115. };
  1116. /* 工具类 */
  1117. admin.util = {
  1118. /* 百度地图坐标转高德地图坐标 */
  1119. Convert_BD09_To_GCJ02: function (point) {
  1120. var x_pi = (3.14159265358979324 * 3000.0) / 180.0;
  1121. var x = point.lng - 0.0065, y = point.lat - 0.006;
  1122. var z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi);
  1123. var theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi);
  1124. point.lng = z * Math.cos(theta);
  1125. point.lat = z * Math.sin(theta);
  1126. return point;
  1127. },
  1128. /* 高德地图坐标转百度地图坐标 */
  1129. Convert_GCJ02_To_BD09: function (point) {
  1130. var x_pi = (3.14159265358979324 * 3000.0) / 180.0;
  1131. var x = point.lng, y = point.lat;
  1132. var z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * x_pi);
  1133. var theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * x_pi);
  1134. point.lng = z * Math.cos(theta) + 0.0065;
  1135. point.lat = z * Math.sin(theta) + 0.006;
  1136. return point;
  1137. },
  1138. /* 动态数字 */
  1139. animateNum: function (elem, isThd, delay, grain) {
  1140. isThd = isThd === null || isThd === undefined || isThd === true || isThd === 'true'; // 是否是千分位
  1141. delay = isNaN(delay) ? 500 : delay; // 动画延迟
  1142. grain = isNaN(grain) ? 100 : grain; // 动画粒度
  1143. var getPref = function (str) {
  1144. var pref = '';
  1145. for (var i = 0; i < str.length; i++) if (!isNaN(str.charAt(i))) return pref; else pref += str.charAt(i);
  1146. }, getSuf = function (str) {
  1147. var suf = '';
  1148. for (var i = str.length - 1; i >= 0; i--) if (!isNaN(str.charAt(i))) return suf; else suf = str.charAt(i) + suf;
  1149. }, toThd = function (num, isThd) {
  1150. if (!isThd) return num;
  1151. if (!/^[0-9]+.?[0-9]*$/.test(num)) return num;
  1152. num = num.toString();
  1153. return num.replace(num.indexOf('.') > 0 ? /(\d)(?=(\d{3})+(?:\.))/g : /(\d)(?=(\d{3})+(?:$))/g, '$1,');
  1154. };
  1155. $(elem).each(function () {
  1156. var $this = $(this);
  1157. var num = $this.data('num');
  1158. if (!num) {
  1159. num = $this.text().replace(/,/g, ''); // 内容
  1160. $this.data('num', num);
  1161. }
  1162. var flag = 'INPUT,TEXTAREA'.indexOf($this.get(0).tagName) >= 0; // 是否是输入框
  1163. var pref = getPref(num.toString());
  1164. var suf = getSuf(num.toString());
  1165. var strNum = num.toString().replace(pref, '').replace(suf, '');
  1166. if (isNaN(strNum * 1) || strNum === '0') {
  1167. flag ? $this.val(num) : $this.html(num);
  1168. console.error('not a number');
  1169. return;
  1170. }
  1171. var int_dec = strNum.split('.');
  1172. var deciLen = int_dec[1] ? int_dec[1].length : 0;
  1173. var startNum = 0.0, endNum = strNum;
  1174. if (Math.abs(endNum * 1) > 10) startNum = parseFloat(int_dec[0].substring(0, int_dec[0].length - 1) + (int_dec[1] ? '.0' + int_dec[1] : ''));
  1175. var oft = (endNum - startNum) / grain, temp = 0;
  1176. var mTime = setInterval(function () {
  1177. var str = pref + toThd(startNum.toFixed(deciLen), isThd) + suf;
  1178. flag ? $this.val(str) : $this.html(str);
  1179. startNum += oft;
  1180. temp++;
  1181. if (Math.abs(startNum) >= Math.abs(endNum * 1) || temp > 5000) {
  1182. str = pref + toThd(endNum, isThd) + suf;
  1183. flag ? $this.val(str) : $this.html(str);
  1184. clearInterval(mTime);
  1185. }
  1186. }, delay / grain);
  1187. });
  1188. },
  1189. /* 深度克隆对象 */
  1190. deepClone: function (obj) {
  1191. var result;
  1192. var oClass = admin.util.isClass(obj);
  1193. if (oClass === 'Object') result = {};
  1194. else if (oClass === 'Array') result = [];
  1195. else return obj;
  1196. for (var key in obj) {
  1197. if (!obj.hasOwnProperty(key)) continue;
  1198. var copy = obj[key], cClass = admin.util.isClass(copy);
  1199. if (cClass === 'Object') result[key] = arguments.callee(copy); // 递归调用
  1200. else if (cClass === 'Array') result[key] = arguments.callee(copy);
  1201. else result[key] = obj[key];
  1202. }
  1203. return result;
  1204. },
  1205. /* 获取变量类型 */
  1206. isClass: function (o) {
  1207. if (o === null) return 'Null';
  1208. if (o === undefined) return 'Undefined';
  1209. return Object.prototype.toString.call(o).slice(8, -1);
  1210. },
  1211. /* 判断富文本是否为空 */
  1212. fullTextIsEmpty: function (text) {
  1213. if (!text) return true;
  1214. var noTexts = ['img', 'audio', 'video', 'iframe', 'object'];
  1215. for (var i = 0; i < noTexts.length; i++) {
  1216. if (text.indexOf('<' + noTexts[i]) > -1) return false;
  1217. }
  1218. var str = text.replace(/\s*/g, ''); // 去掉所有空格
  1219. if (!str) return true;
  1220. str = str.replace(/&nbsp;/ig, ''); // 去掉所有&nbsp;
  1221. if (!str) return true;
  1222. str = str.replace(/<[^>]+>/g, ''); // 去掉所有html标签
  1223. return !str;
  1224. },
  1225. /* 移除元素的style */
  1226. removeStyle: function (elem, options) {
  1227. if (typeof options === 'string') options = [options];
  1228. $(elem).each(function () {
  1229. try {
  1230. var arr = $(this).attr('style').split(';');
  1231. var style = '';
  1232. for (var i = 0; i < arr.length; i++) {
  1233. if (!$.trim(arr[i])) continue;
  1234. var add = true;
  1235. var att = $.trim(arr[i].split(':')[0]);
  1236. for (var j = 0; j < options.length; j++) {
  1237. if (!$.trim(options[j]) || att === $.trim(options[j])) {
  1238. add = false;
  1239. break;
  1240. }
  1241. }
  1242. if (add) style += ($.trim(arr[i]) + ';');
  1243. }
  1244. $(this).attr('style', style);
  1245. } catch (e) {
  1246. }
  1247. });
  1248. },
  1249. /* 滚动到顶部 */
  1250. scrollTop: function (elem) {
  1251. if (!elem) {
  1252. var $layBody = $('.layui-layout-admin>.layui-body');
  1253. elem = $layBody.children('.layui-tab').children('.layui-tab-content').children('.layui-tab-item.layui-show');
  1254. if (elem.length === 0) {
  1255. elem = $layBody.children('.layui-body-header.show+div');
  1256. if (elem.length === 0) elem = $layBody;
  1257. }
  1258. } else {
  1259. elem = $(elem);
  1260. }
  1261. elem.animate({scrollTop: 0}, 300);
  1262. },
  1263. /* 模板解析 */
  1264. tpl: function (html, data, openCode, closeCode) {
  1265. if (html === undefined || html === null || typeof html !== 'string') return html;
  1266. if (!data) data = {};
  1267. if (!openCode) openCode = '{{';
  1268. if (!closeCode) closeCode = '}}';
  1269. var tool = {
  1270. exp: function (str) {
  1271. return new RegExp(str, 'g');
  1272. },
  1273. // 匹配满足规则内容
  1274. query: function (type, _, __) {
  1275. var types = [
  1276. '#([\\s\\S])+?', // js语句
  1277. '([^{#}])*?' // 普通字段
  1278. ][type || 0];
  1279. return tool.exp((_ || '') + openCode + types + closeCode + (__ || ''));
  1280. },
  1281. escape: function (str) {
  1282. return String(str || '').replace(/&(?!#?[a-zA-Z0-9]+;)/g, '&amp;')
  1283. .replace(/</g, '&lt;').replace(/>/g, '&gt;')
  1284. .replace(/'/g, '&#39;').replace(/"/g, '&quot;');
  1285. },
  1286. error: function (e, tplog) {
  1287. console.error('Laytpl Error:' + e + '\n' + (tplog || ''));
  1288. },
  1289. parse: function (tpl, data) {
  1290. var tplog = tpl;
  1291. try {
  1292. var jss = tool.exp('^' + openCode + '#'), jsse = tool.exp(closeCode + '$');
  1293. tpl = tpl.replace(tool.exp(openCode + '#'), openCode + '# ')
  1294. .replace(tool.exp(closeCode + '}'), '} ' + closeCode).replace(/\\/g, '\\\\')
  1295. // 不匹配指定区域的内容
  1296. .replace(tool.exp(openCode + '!(.+?)!' + closeCode), function (str) {
  1297. str = str.replace(tool.exp('^' + openCode + '!'), '')
  1298. .replace(tool.exp('!' + closeCode), '')
  1299. .replace(tool.exp(openCode + '|' + closeCode), function (tag) {
  1300. return tag.replace(/(.)/g, '\\$1')
  1301. });
  1302. return str
  1303. })
  1304. // 匹配JS规则内容
  1305. .replace(/(?="|')/g, '\\').replace(tool.query(), function (str) {
  1306. str = str.replace(jss, '').replace(jsse, '');
  1307. return '";' + str.replace(/\\/g, '') + ';view+="';
  1308. })
  1309. // 匹配普通字段
  1310. .replace(tool.query(1), function (str) {
  1311. var start = '"+(';
  1312. if (str.replace(/\s/g, '') === openCode + closeCode) {
  1313. return '';
  1314. }
  1315. str = str.replace(tool.exp(openCode + '|' + closeCode), '');
  1316. if (/^=/.test(str)) {
  1317. str = str.replace(/^=/, '');
  1318. start = '"+_escape_(';
  1319. }
  1320. return start + str.replace(/\\/g, '') + ')+"';
  1321. })
  1322. // 换行符处理
  1323. .replace(/\r\n/g, '\\r\\n" + "').replace(/\n/g, '\\n" + "').replace(/\r/g, '\\r" + "');
  1324. tpl = '"use strict";var view = "' + tpl + '";return view;';
  1325. tpl = new Function('d, _escape_', tpl);
  1326. return tpl(data, tool.escape);
  1327. } catch (e) {
  1328. tool.error(e, tplog);
  1329. return tplog;
  1330. }
  1331. }
  1332. };
  1333. return tool.parse(html, data);
  1334. }
  1335. };
  1336. /* 锁屏功能 */
  1337. admin.lockScreen = function (url) {
  1338. if (!url) url = 'components/tpl/lock-screen.html';
  1339. var $lock = $('#ew-lock-screen-group');
  1340. if ($lock.length > 0) {
  1341. $lock.fadeIn('fast');
  1342. admin.isLockScreen = true;
  1343. admin.putTempData('isLockScreen', admin.isLockScreen, true);
  1344. } else {
  1345. var loadIndex = layer.load(2);
  1346. admin.ajax({
  1347. url: url,
  1348. dataType: 'html',
  1349. success: function (res) {
  1350. layer.close(loadIndex);
  1351. if (typeof res === 'string') {
  1352. $('body').append('<div id="ew-lock-screen-group">' + res + '</div>');
  1353. admin.isLockScreen = true;
  1354. admin.putTempData('isLockScreen', admin.isLockScreen, true);
  1355. admin.putTempData('lockScreenUrl', url, true);
  1356. } else {
  1357. console.error(res);
  1358. layer.msg(JSON.stringify(res), {icon: 2});
  1359. }
  1360. }
  1361. });
  1362. }
  1363. };
  1364. /* 解除锁屏 */
  1365. admin.unlockScreen = function (isRemove) {
  1366. var $lock = $('#ew-lock-screen-group');
  1367. isRemove ? $lock.remove() : $lock.fadeOut('fast');
  1368. admin.isLockScreen = false;
  1369. admin.putTempData('isLockScreen', null, true);
  1370. };
  1371. /* 修改配置信息 */
  1372. admin.putSetting = function (key, value) {
  1373. setter[key] = value;
  1374. admin.putTempData(key, value, true);
  1375. };
  1376. /* 恢复配置信息 */
  1377. admin.recoverState = function () {
  1378. // 恢复锁屏状态
  1379. if (admin.getTempData('isLockScreen', true)) admin.lockScreen(admin.getTempData('lockScreenUrl', true));
  1380. // 恢复配置的主题
  1381. if (setter.defaultTheme) admin.changeTheme(setter.defaultTheme, window, true, true);
  1382. // 恢复页脚状态、导航箭头
  1383. if (setter.closeFooter) $('body').addClass('close-footer');
  1384. if (setter.navArrow !== undefined) {
  1385. var $nav = $(sideDOM + '>.layui-nav-tree');
  1386. $nav.removeClass('arrow2 arrow3');
  1387. if (setter.navArrow) $nav.addClass(setter.navArrow);
  1388. }
  1389. // 恢复tab自动刷新
  1390. if (setter.pageTabs && setter.tabAutoRefresh) $(tabDOM).attr('lay-autoRefresh', 'true');
  1391. };
  1392. /* 事件监听 */
  1393. admin.on = function (events, callback) {
  1394. return layui.onevent.call(this, 'admin', events, callback);
  1395. };
  1396. /* 侧导航折叠状态下鼠标经过无限悬浮效果 */
  1397. var navItemDOM = '.layui-layout-admin.admin-nav-mini>.layui-side .layui-nav .layui-nav-item';
  1398. $(document).on('mouseenter', navItemDOM + ',' + navItemDOM + ' .layui-nav-child>dd', function () {
  1399. if (admin.getPageWidth() > 768) {
  1400. var $that = $(this), $navChild = $that.find('>.layui-nav-child');
  1401. if ($navChild.length > 0) {
  1402. $that.addClass('admin-nav-hover');
  1403. $navChild.css('left', $that.offset().left + $that.outerWidth());
  1404. var top = $that.offset().top;
  1405. if (top + $navChild.outerHeight() > admin.getPageHeight()) {
  1406. top = top - $navChild.outerHeight() + $that.outerHeight();
  1407. if (top < 60) top = 60;
  1408. $navChild.addClass('show-top');
  1409. }
  1410. $navChild.css('top', top);
  1411. $navChild.addClass('ew-anim-drop-in');
  1412. } else if ($that.hasClass('layui-nav-item')) {
  1413. var tipText = $that.find('cite').text();
  1414. layer.tips(tipText, $that, {
  1415. tips: [2, '#303133'], time: -1, success: function (layero) {
  1416. $(layero).css('margin-top', '12px');
  1417. }
  1418. });
  1419. }
  1420. }
  1421. }).on('mouseleave', navItemDOM + ',' + navItemDOM + ' .layui-nav-child>dd', function () {
  1422. layer.closeAll('tips');
  1423. var $this = $(this);
  1424. $this.removeClass('admin-nav-hover');
  1425. var $child = $this.find('>.layui-nav-child');
  1426. $child.removeClass('show-top ew-anim-drop-in');
  1427. $child.css({'left': 'auto', 'top': 'auto'});
  1428. });
  1429. /* 所有ew-event */
  1430. $(document).on('click', '*[ew-event]', function () {
  1431. var event = $(this).attr('ew-event');
  1432. var te = admin.events[event];
  1433. te && te.call(this, $(this));
  1434. });
  1435. /* 所有lay-tips处理 */
  1436. $(document).on('mouseenter', '*[lay-tips]', function () {
  1437. var $this = $(this);
  1438. admin.tips({
  1439. elem: this,
  1440. text: $this.attr('lay-tips'),
  1441. direction: $this.attr('lay-direction'),
  1442. bg: $this.attr('lay-bg'),
  1443. offset: $this.attr('lay-offset'),
  1444. padding: $this.attr('lay-padding'),
  1445. color: $this.attr('lay-color'),
  1446. bgImg: $this.attr('lay-bgImg'),
  1447. fontSize: $this.attr('lay-fontSize')
  1448. });
  1449. }).on('mouseleave', '*[lay-tips]', function () {
  1450. layer.closeAll('tips');
  1451. });
  1452. /* tips方法封装 */
  1453. admin.tips = function (option) {
  1454. layer.tips(option.text, option.elem, {
  1455. tips: [option.direction || 1, option.bg || '#303133'],
  1456. tipsMore: option.tipsMore,
  1457. time: option.time || -1,
  1458. success: function (layero) {
  1459. var $content = $(layero).children('.layui-layer-content');
  1460. if (option.padding || option.padding === 0) $content.css('padding', option.padding);
  1461. if (option.color) $content.css('color', option.color);
  1462. if (option.bgImg) $content.css('background-image', option.bgImg);
  1463. if (option.fontSize) $content.css('font-size', option.fontSize);
  1464. if (!option.offset) return;
  1465. var offset = option.offset.split(',');
  1466. var top = offset[0], left = offset.length > 1 ? offset[1] : undefined;
  1467. if (top) $(layero).css('margin-top', top);
  1468. if (left) $(layero).css('margin-left', left);
  1469. }
  1470. });
  1471. };
  1472. /* 表单搜索展开更多 */
  1473. $(document).on('click', '.form-search-expand,[search-expand]', function () {
  1474. var $this = $(this);
  1475. var $form = $this.parents('.layui-form').first();
  1476. var expand = $this.data('expand');
  1477. var change = $this.attr('search-expand');
  1478. if (expand === undefined || expand === true) {
  1479. expand = true;
  1480. $this.data('expand', false);
  1481. $(this).html('收起 <i class="layui-icon layui-icon-up"></i>');
  1482. var $elem = $form.find('.form-search-show-expand');
  1483. $elem.attr('expand-show', '');
  1484. $elem.removeClass('form-search-show-expand');
  1485. } else {
  1486. expand = false;
  1487. $this.data('expand', true);
  1488. $(this).html('展开 <i class="layui-icon layui-icon-down"></i>');
  1489. $form.find('[expand-show]').addClass('form-search-show-expand');
  1490. }
  1491. if (!change) return;
  1492. try {
  1493. new Function('d', change)({expand: expand, elem: $this});
  1494. } catch (e) {
  1495. console.error(e);
  1496. }
  1497. });
  1498. /* 读取缓存的配置信息 */
  1499. var cache = admin.getTempData(true);
  1500. if (cache) {
  1501. var keys = ['pageTabs', 'cacheTab', 'defaultTheme', 'navArrow', 'closeFooter', 'tabAutoRefresh'];
  1502. for (var i = 0; i < keys.length; i++) {
  1503. if (cache[keys[i]] !== undefined) setter[keys[i]] = cache[keys[i]];
  1504. }
  1505. }
  1506. admin.recoverState();
  1507. exports('admin', admin);
  1508. });