/** EasyWeb iframe v3.1.8 date:2020-05-04 License By http://easyweb.vip */
layui.define(['layer'], function (exports) {
    var $ = layui.jquery;
    var layer = layui.layer;
    var setter = layui.cache;
    var bodyDOM = '.layui-layout-admin>.layui-body';
    var tabDOM = bodyDOM + '>.layui-tab';
    var sideDOM = '.layui-layout-admin>.layui-side>.layui-side-scroll';
    var headerDOM = '.layui-layout-admin>.layui-header';
    var navFilter = 'admin-side-nav';
    var admin = {version: '3.1.8', layerData: {}};
    /** 设置侧栏折叠 */
    admin.flexible = function (expand) {
        if (window !== top && !admin.isTop() && top.layui && top.layui.admin) return top.layui.admin.flexible(expand);
        var $layout = $('.layui-layout-admin');
        var isExapnd = $layout.hasClass('admin-nav-mini');
        if (expand === undefined) expand = isExapnd;
        if (isExapnd === expand) {
            if (window.sideFlexTimer) clearTimeout(window.sideFlexTimer);
            $layout.addClass('admin-side-flexible');
            window.sideFlexTimer = setTimeout(function () {
                $layout.removeClass('admin-side-flexible');
            }, 600);
            if (expand) {
                admin.hideTableScrollBar();
                $layout.removeClass('admin-nav-mini');
            } else {
                $layout.addClass('admin-nav-mini');
            }
            layui.event.call(this, 'admin', 'flexible({*})', {expand: expand});
        }
    };
    /** 设置导航栏选中 */
    admin.activeNav = function (url) {
        if (window !== top && !admin.isTop() && top.layui && top.layui.admin) return top.layui.admin.activeNav(url);
        if (!url) return console.warn('active url is null');
        $(sideDOM + '>.layui-nav .layui-nav-item .layui-nav-child dd.layui-this').removeClass('layui-this');
        $(sideDOM + '>.layui-nav .layui-nav-item.layui-this').removeClass('layui-this');
        var $a = $(sideDOM + '>.layui-nav a[lay-href="' + url + '"]');
        if ($a.length === 0) return console.warn(url + ' not found');
        var isMini = $('.layui-layout-admin').hasClass('admin-nav-mini');
        if ($(sideDOM + '>.layui-nav').attr('lay-shrink') === '_all') {  // 手风琴效果
            var $pChilds = $a.parent('dd').parents('.layui-nav-child');
            if (!isMini) {
                $(sideDOM + '>.layui-nav .layui-nav-itemed>.layui-nav-child').not($pChilds)
                    .css('display', 'block').slideUp('fast', function () {
                    $(this).css('display', '');
                });
            }
            $(sideDOM + '>.layui-nav .layui-nav-itemed').not($pChilds.parent()).removeClass('layui-nav-itemed');
        }
        $a.parent().addClass('layui-this');  // 选中当前
        // 展开所有父级
        var $asParents = $a.parent('dd').parents('.layui-nav-child').parent();
        if (!isMini) {
            var $childs = $asParents.not('.layui-nav-itemed').children('.layui-nav-child');
            $childs.slideDown('fast', function () {
                if ($(this).is($childs.last())) {
                    $childs.css('display', '');
                    // 菜单超出屏幕自动滚动
                    var topBeyond = $a.offset().top + $a.outerHeight() + 30 - admin.getPageHeight();
                    var topDisparity = 50 + 65 - $a.offset().top;
                    if (topBeyond > 0) {
                        $(sideDOM).animate({'scrollTop': $(sideDOM).scrollTop() + topBeyond}, 300);
                    } else if (topDisparity > 0) {
                        $(sideDOM).animate({'scrollTop': $(sideDOM).scrollTop() - topDisparity}, 300);
                    }
                }
            });
        }
        $asParents.addClass('layui-nav-itemed');
        // 适配多系统模式
        $('ul[lay-filter="' + navFilter + '"]').addClass('layui-hide');
        var $aUl = $a.parents('.layui-nav');
        $aUl.removeClass('layui-hide');
        $(headerDOM + '>.layui-nav>.layui-nav-item').removeClass('layui-this');
        $(headerDOM + '>.layui-nav>.layui-nav-item>a[nav-bind="' + $aUl.attr('nav-id') + '"]').parent().addClass('layui-this');
    };
    /** 右侧弹出 */
    admin.popupRight = function (param) {
        param.anim = -1;
        param.offset = 'r';
        param.move = false;
        param.fixed = true;
        if (param.area === undefined) param.area = '336px';
        if (param.title === undefined) param.title = false;
        if (param.closeBtn === undefined) param.closeBtn = false;
        if (param.shadeClose === undefined) param.shadeClose = true;
        if (param.skin === undefined) param.skin = 'layui-anim layui-anim-rl layui-layer-adminRight';
        return admin.open(param);
    };
    /** 封装layer.open */
    admin.open = function (param) {
        if (param.content && param.type === 2) param.url = undefined;  // 参数纠正
        if (param.url && (param.type === 2 || param.type === undefined)) param.type = 1;  // 参数纠正
        if (param.area === undefined) param.area = param.type === 2 ? ['360px', '300px'] : '360px';
        if (param.offset === undefined) param.offset = '70px';
        if (param.shade === undefined) param.shade = .1;
        if (param.fixed === undefined) param.fixed = false;
        if (param.resize === undefined) param.resize = false;
        if (param.skin === undefined) param.skin = 'layui-layer-admin';
        var eCallBack = param.end;
        param.end = function () {
            layer.closeAll('tips');  // 关闭表单验证的tips
            eCallBack && eCallBack();
        };
        if (param.url) {
            var sCallBack = param.success;
            param.success = function (layero, index) {
                $(layero).data('tpl', param.tpl || '');
                admin.reloadLayer(index, param.url, sCallBack);
            };
        } else if (param.tpl && param.content) {
            param.content = admin.util.tpl(param.content, param.data, setter.tplOpen, setter.tplClose);
        }
        var layIndex = layer.open(param);
        if (param.data) admin.layerData['d' + layIndex] = param.data;
        return layIndex;
    };
    /** 获取弹窗数据 */
    admin.getLayerData = function (index, key) {
        if (index === undefined) {
            index = parent.layer.getFrameIndex(window.name);
            if (index === undefined) return null;
            else return parent.layui.admin.getLayerData(parseInt(index), key);
        } else if (isNaN(index)) {
            index = admin.getLayerIndex(index);
        }
        if (index === undefined) return;
        var layerData = admin.layerData['d' + index];
        if (key && layerData) return layerData[key];
        return layerData;
    };
    /** 放入弹窗数据 */
    admin.putLayerData = function (key, value, index) {
        if (index === undefined) {
            index = parent.layer.getFrameIndex(window.name);
            if (index === undefined) return;
            else return parent.layui.admin.putLayerData(key, value, parseInt(index));
        } else if (isNaN(index)) {
            index = admin.getLayerIndex(index);
        }
        if (index === undefined) return;
        var layerData = admin.getLayerData(index);
        if (!layerData) layerData = {};
        layerData[key] = value;
        admin.layerData['d' + index] = layerData;
    };
    /** 刷新url方式的layer */
    admin.reloadLayer = function (index, url, success) {
        if (typeof url === 'function') {
            success = url;
            url = undefined;
        }
        if (isNaN(index)) index = admin.getLayerIndex(index);
        if (index === undefined) return;
        var $layero = $('#layui-layer' + index);
        if (url === undefined) url = $layero.data('url');
        if (!url) return;
        $layero.data('url', url);
        admin.showLoading($layero);
        admin.ajax({
            url: url,
            dataType: 'html',
            success: function (res) {
                admin.removeLoading($layero, false);
                if (typeof res !== 'string') res = JSON.stringify(res);
                var tpl = $layero.data('tpl');
                // 模板解析
                if (tpl === true || tpl === 'true') {
                    var data = admin.getLayerData(index) || {};
                    data.layerIndex = index;
                    // 模板里面有动态模板处理
                    var $html = $('
' + res + '
'), tplAll = {};
                    $html.find('script,[tpl-ignore]').each(function (i) {
                        var $this = $(this);
                        tplAll['temp_' + i] = $this[0].outerHTML;
                        $this.after('${temp_' + i + '}').remove();
                    });
                    res = admin.util.tpl($html.html(), data, setter.tplOpen, setter.tplClose);
                    for (var f in tplAll) res = res.replace('${' + f + '}', tplAll[f]);
                }
                $layero.children('.layui-layer-content').html(res);
                admin.renderTpl('#layui-layer' + index + ' [ew-tpl]');
                success && success($layero[0], index);
            }
        });
    };
    /** 封装layer.alert */
    admin.alert = function (content, options, yes) {
        if (typeof options === 'function') {
            yes = options;
            options = {};
        }
        if (options.skin === undefined) options.skin = 'layui-layer-admin';
        if (options.shade === undefined) options.shade = .1;
        return layer.alert(content, options, yes);
    };
    /** 封装layer.confirm */
    admin.confirm = function (content, options, yes, cancel) {
        if (typeof options === 'function') {
            cancel = yes;
            yes = options;
            options = {};
        }
        if (options.skin === undefined) options.skin = 'layui-layer-admin';
        if (options.shade === undefined) options.shade = .1;
        return layer.confirm(content, options, yes, cancel);
    };
    /** 封装layer.prompt */
    admin.prompt = function (options, yes) {
        if (typeof options === 'function') {
            yes = options;
            options = {};
        }
        if (options.skin === undefined) options.skin = 'layui-layer-admin layui-layer-prompt';
        if (options.shade === undefined) options.shade = .1;
        return layer.prompt(options, yes);
    };
    /** 封装ajax请求,返回数据类型为json */
    admin.req = function (url, data, success, method, option) {
        if (typeof data === 'function') {
            option = method;
            method = success;
            success = data;
            data = {};
        }
        if (method !== undefined && typeof method !== 'string') {
            option = method;
            method = undefined;
        }
        if (!method) method = 'GET';
        if (typeof data === 'string') {
            if (!option) option = {};
            if (!option.contentType) option.contentType = 'application/json;charset=UTF-8';
        } else if (setter.reqPutToPost) {
            if ('put' === method.toLowerCase()) {
                method = 'POST';
                data._method = 'PUT';
            } else if ('delete' === method.toLowerCase()) {
                method = 'GET';
                data._method = 'DELETE';
            }
        }
        return admin.ajax($.extend({
            url: (setter.baseServer || '') + url, data: data, type: method, dataType: 'json', success: success
        }, option));
    };
    /** 封装ajax请求 */
    admin.ajax = function (param) {
        var oldParam = admin.util.deepClone(param);
        if (!param.dataType) param.dataType = 'json';
        if (!param.headers) param.headers = {};
        // 统一设置header
        var headers = setter.getAjaxHeaders(param.url);
        if (headers) {
            for (var i = 0; i < headers.length; i++) {
                if (param.headers[headers[i].name] === undefined) param.headers[headers[i].name] = headers[i].value;
            }
        }
        // success预处理
        var success = param.success;
        param.success = function (result, status, xhr) {
            var before = setter.ajaxSuccessBefore(admin.parseJSON(result), param.url, {
                param: oldParam, reload: function (p) {
                    admin.ajax($.extend(true, oldParam, p));
                }, update: function (r) {
                    result = r;
                }, xhr: xhr
            });
            if (before !== false) success && success(result, status, xhr);
            else param.cancel && param.cancel();
        };
        param.error = function (xhr, status) {
            param.success({code: xhr.status, msg: xhr.statusText}, status, xhr);
        };
        // 解决缓存问题
        if (layui.cache.version && (!setter.apiNoCache || param.dataType.toLowerCase() !== 'json')) {
            if (param.url.indexOf('?') === -1) param.url += '?v=';
            else param.url += '&v=';
            if (layui.cache.version === true) param.url += new Date().getTime();
            else param.url += layui.cache.version;
        }
        return $.ajax(param);
    };
    /** 解析json */
    admin.parseJSON = function (str) {
        if (typeof str === 'string') {
            try {
                return JSON.parse(str);
            } catch (e) {
            }
        }
        return str;
    };
    /** 显示加载动画 */
    admin.showLoading = function (elem, type, opacity, size) {
        if (elem !== undefined && (typeof elem !== 'string') && !(elem instanceof $)) {
            type = elem.type;
            opacity = elem.opacity;
            size = elem.size;
            elem = elem.elem;
        }
        if (type === undefined) type = setter.defaultLoading || 1;
        if (size === undefined) size = 'sm';
        if (elem === undefined) elem = 'body';
        var loader = [
            '
',
            '',
            '
',
            '
'
        ];
        $(elem).addClass('page-no-scroll');  // 禁用滚动条
        $(elem).scrollTop(0);
        var $loading = $(elem).children('.page-loading');
        if ($loading.length <= 0) {
            $(elem).append('' + loader[type - 1] + '
');
            $loading = $(elem).children('.page-loading');
        }
        if (opacity !== undefined) $loading.css('background-color', 'rgba(255,255,255,' + opacity + ')');
        $loading.show();
    };
    /** 移除加载动画 */
    admin.removeLoading = function (elem, fade, del) {
        if (elem === undefined) elem = 'body';
        if (fade === undefined) fade = true;
        var $loading = $(elem).children('.page-loading');
        if (del) $loading.remove();
        else if (fade) $loading.fadeOut('fast');
        else $loading.hide();
        $(elem).removeClass('page-no-scroll');
    };
    /** 缓存临时数据 */
    admin.putTempData = function (key, value, local) {
        var tableName = local ? setter.tableName : setter.tableName + '_tempData';
        if (value === undefined || value === null) {
            if (local) layui.data(tableName, {key: key, remove: true});
            else layui.sessionData(tableName, {key: key, remove: true});
        } else {
            if (local) layui.data(tableName, {key: key, value: value});
            else layui.sessionData(tableName, {key: key, value: value});
        }
    };
    /** 获取缓存临时数据 */
    admin.getTempData = function (key, local) {
        if (typeof key === 'boolean') {
            local = key;
            key = undefined;
        }
        var tableName = local ? setter.tableName : setter.tableName + '_tempData';
        var tempData = local ? layui.data(tableName) : layui.sessionData(tableName);
        if (!key) return tempData;
        return tempData ? tempData[key] : undefined;
    };
    /** 滑动选项卡 */
    admin.rollPage = function (d) {
        if (window !== top && !admin.isTop() && top.layui && top.layui.admin) return top.layui.admin.rollPage(d);
        var $tabTitle = $(tabDOM + '>.layui-tab-title');
        var left = $tabTitle.scrollLeft();
        if ('left' === d) {
            $tabTitle.animate({'scrollLeft': left - 120}, 100);
        } else if ('auto' === d) {
            var autoLeft = 0;
            $tabTitle.children("li").each(function () {
                if ($(this).hasClass('layui-this')) return false;
                else autoLeft += $(this).outerWidth();
            });
            $tabTitle.animate({'scrollLeft': autoLeft - 120}, 100);
        } else {
            $tabTitle.animate({'scrollLeft': left + 120}, 100);
        }
    };
    /** 刷新当前选项卡 */
    admin.refresh = function (url, isIndex) {
        if (window !== top && !admin.isTop() && top.layui && top.layui.admin) return top.layui.admin.refresh(url);
        var $iframe;
        if (!url) {
            $iframe = $(tabDOM + '>.layui-tab-content>.layui-tab-item.layui-show>.admin-iframe');
            if (!$iframe || $iframe.length <= 0) $iframe = $(bodyDOM + '>div>.admin-iframe');
        } else {
            $iframe = $(tabDOM + '>.layui-tab-content>.layui-tab-item>.admin-iframe[lay-id="' + url + '"]');
            if (!$iframe || $iframe.length <= 0) $iframe = $(bodyDOM + '>.admin-iframe');
        }
        if (!$iframe || !$iframe[0]) return console.warn(url + ' is not found');
        try {
            if (isIndex && $iframe[0].contentWindow.refreshTab) {
                $iframe[0].contentWindow.refreshTab();
            } else {
                admin.showLoading({elem: $iframe.parent(), size: ''});
                $iframe[0].contentWindow.location.reload();
            }
        } catch (e) {
            console.warn(e);
            $iframe.attr('src', $iframe.attr('src'));
        }
    };
    /** 关闭当前选项卡 */
    admin.closeThisTabs = function (url) {
        if (window !== top && !admin.isTop() && top.layui && top.layui.admin) return top.layui.admin.closeThisTabs(url);
        admin.closeTabOperNav();
        var $title = $(tabDOM + '>.layui-tab-title');
        if (!url) {
            if ($title.find('li').first().hasClass('layui-this')) return layer.msg('主页不能关闭', {icon: 2});
            $title.find('li.layui-this').find('.layui-tab-close').trigger('click');
        } else {
            if (url === $title.find('li').first().attr('lay-id')) return layer.msg('主页不能关闭', {icon: 2});
            $title.find('li[lay-id="' + url + '"]').find('.layui-tab-close').trigger('click');
        }
    };
    /** 关闭其他选项卡 */
    admin.closeOtherTabs = function (url) {
        if (window !== top && !admin.isTop() && top.layui && top.layui.admin) return top.layui.admin.closeOtherTabs(url);
        if (!url) {
            $(tabDOM + '>.layui-tab-title li:gt(0):not(.layui-this)').find('.layui-tab-close').trigger('click');
        } else {
            $(tabDOM + '>.layui-tab-title li:gt(0)').each(function () {
                if (url !== $(this).attr('lay-id')) $(this).find('.layui-tab-close').trigger('click');
            });
        }
        admin.closeTabOperNav();
    };
    /** 关闭所有选项卡 */
    admin.closeAllTabs = function () {
        if (window !== top && !admin.isTop() && top.layui && top.layui.admin) return top.layui.admin.closeAllTabs();
        $(tabDOM + '>.layui-tab-title li:gt(0)').find('.layui-tab-close').trigger('click');
        $(tabDOM + '>.layui-tab-title li:eq(0)').trigger('click');
        admin.closeTabOperNav();
    };
    /** 关闭选项卡操作菜单 */
    admin.closeTabOperNav = function () {
        if (window !== top && !admin.isTop() && top.layui && top.layui.admin) return top.layui.admin.closeTabOperNav();
        $('.layui-icon-down .layui-nav .layui-nav-child').removeClass('layui-show');
    };
    /** 设置主题 */
    admin.changeTheme = function (theme, win, noCache, noChild) {
        if (!noCache) admin.putSetting('defaultTheme', theme);
        if (!win) win = top;
        admin.removeTheme(win);
        if (theme) {
            try {
                var $body = win.layui.jquery('body');
                $body.addClass(theme);
                $body.data('theme', theme);
            } catch (e) {
            }
        }
        if (noChild) return;
        var ifs = win.frames;
        for (var i = 0; i < ifs.length; i++) admin.changeTheme(theme, ifs[i], true, false);
    };
    /** 移除主题 */
    admin.removeTheme = function (w) {
        if (!w) w = window;
        try {
            var $body = w.layui.jquery('body');
            var theme = $body.data('theme');
            if (theme) $body.removeClass(theme);
            $body.removeData('theme');
        } catch (e) {
        }
    };
    /** 关闭当前iframe层弹窗 */
    admin.closeThisDialog = function () {
        return admin.closeDialog();
    };
    /** 关闭elem所在的页面层弹窗 */
    admin.closeDialog = function (elem) {
        if (elem) layer.close(admin.getLayerIndex(elem));
        else parent.layer.close(parent.layer.getFrameIndex(window.name));
    };
    /** 获取页面层弹窗的index */
    admin.getLayerIndex = function (elem) {
        if (!elem) return parent.layer.getFrameIndex(window.name);
        var id = $(elem).parents('.layui-layer').first().attr('id');
        if (id && id.length >= 11) return id.substring(11);
    };
    /** 让当前的iframe弹层自适应高度 */
    admin.iframeAuto = function () {
        return parent.layer.iframeAuto(parent.layer.getFrameIndex(window.name));
    };
    /** 获取浏览器高度 */
    admin.getPageHeight = function () {
        return document.documentElement.clientHeight || document.body.clientHeight;
    };
    /** 获取浏览器宽度 */
    admin.getPageWidth = function () {
        return document.documentElement.clientWidth || document.body.clientWidth;
    };
    /** 绑定表单弹窗 */
    admin.modelForm = function (layero, btnFilter, formFilter) {
        var $layero = $(layero);
        $layero.addClass('layui-form');
        if (formFilter) $layero.attr('lay-filter', formFilter);
        // 确定按钮绑定submit
        var $btnSubmit = $layero.find('.layui-layer-btn .layui-layer-btn0');
        $btnSubmit.attr('lay-submit', '');
        $btnSubmit.attr('lay-filter', btnFilter);
    };
    /** loading按钮 */
    admin.btnLoading = function (elem, text, loading) {
        if (text !== undefined && (typeof text === 'boolean')) {
            loading = text;
            text = undefined;
        }
        if (text === undefined) text = ' 加载中';
        if (loading === undefined) loading = true;
        var $elem = $(elem);
        if (loading) {
            $elem.addClass('ew-btn-loading');
            $elem.prepend('' + text + '');
            $elem.attr('disabled', 'disabled').prop('disabled', true);
        } else {
            $elem.removeClass('ew-btn-loading');
            $elem.children('.ew-btn-loading-text').remove();
            $elem.removeProp('disabled').removeAttr('disabled');
        }
    };
    /** 鼠标移入侧边栏自动展开 */
    admin.openSideAutoExpand = function () {
        var $side = $('.layui-layout-admin>.layui-side');
        $side.off('mouseenter.openSideAutoExpand').on("mouseenter.openSideAutoExpand", function () {
            if (!$(this).parent().hasClass('admin-nav-mini')) return;
            admin.flexible(true);
            $(this).addClass('side-mini-hover');
        });
        $side.off('mouseleave.openSideAutoExpand').on("mouseleave.openSideAutoExpand", function () {
            if (!$(this).hasClass('side-mini-hover')) return;
            admin.flexible(false);
            $(this).removeClass('side-mini-hover');
        });
    };
    /** 表格单元格超出内容自动展开 */
    admin.openCellAutoExpand = function () {
        var $body = $('body');
        $body.off('mouseenter.openCellAutoExpand').on('mouseenter.openCellAutoExpand', '.layui-table-view td', function () {
            $(this).find('.layui-table-grid-down').trigger('click');
        });
        $body.off('mouseleave.openCellAutoExpand').on('mouseleave.openCellAutoExpand', '.layui-table-tips>.layui-layer-content', function () {
            $('.layui-table-tips-c').trigger('click');
        });
    };
    /** open事件解析layer参数 */
    admin.parseLayerOption = function (option) {
        // 数组类型进行转换
        for (var f in option) {
            if (!option.hasOwnProperty(f)) continue;
            if (option[f] && option[f].toString().indexOf(',') !== -1) option[f] = option[f].toString().split(',');
        }
        // function类型参数转换
        var fs = {'success': 'layero,index', 'cancel': 'index,layero', 'end': '', 'full': '', 'min': '', 'restore': ''};
        for (var k in fs) {
            if (!fs.hasOwnProperty(k) || !option[k]) continue;
            try {
                if (/^[a-zA-Z_]+[a-zA-Z0-9_]+$/.test(option[k])) option[k] += '()';
                option[k] = new Function(fs[k], option[k]);
            } catch (e) {
                option[k] = undefined;
            }
        }
        // content取内容
        if (option.content && (typeof option.content === 'string') && option.content.indexOf('#') === 0) {
            if ($(option.content).is('script')) option.content = $(option.content).html();
            else option.content = $(option.content);
        }
        if (option.type === undefined && option.url === undefined) option.type = 2;  // 默认为iframe类型
        return option;
    };
    /** 字符串形式的parent.parent转window对象 */
    admin.strToWin = function (str) {
        var win = window;
        if (!str) return win;
        var ws = str.split('.');
        for (var i = 0; i < ws.length; i++) win = win[ws[i]];
        return win;
    };
    /** 解决折叠侧边栏表格滚动条闪现 */
    admin.hideTableScrollBar = function (win) {
        if (admin.getPageWidth() <= 768) return;
        if (!win) {
            var $iframe = $(tabDOM + '>.layui-tab-content>.layui-tab-item.layui-show>.admin-iframe');
            if ($iframe.length <= 0) $iframe = $(bodyDOM + '>div>.admin-iframe');
            if ($iframe.length > 0) win = $iframe[0].contentWindow;
        }
        try {  // 可能会跨域
            if (window.hsbTimer) clearTimeout(window.hsbTimer);
            win.layui.jquery('.layui-table-body.layui-table-main').addClass('no-scrollbar');
            window.hsbTimer = setTimeout(function () {
                win.layui.jquery('.layui-table-body.layui-table-main').removeClass('no-scrollbar');
            }, 800);
        } catch (e) {
        }
    };
    /** 判断是否是主框架 */
    admin.isTop = function () {
        return $(bodyDOM).length > 0;
    };
    /** admin提供的事件 */
    admin.events = {
        /* 折叠侧导航 */
        flexible: function () {
            admin.strToWin($(this).data('window')).layui.admin.flexible();
        },
        /* 刷新主体部分 */
        refresh: function () {
            admin.strToWin($(this).data('window')).layui.admin.refresh();
        },
        /* 后退 */
        back: function () {
            admin.strToWin($(this).data('window')).history.back();
        },
        /* 设置主题 */
        theme: function () {
            var option = admin.util.deepClone($(this).data());
            admin.strToWin(option.window).layui.admin.popupRight($.extend({
                id: 'layer-theme', url: option.url || 'tpl/tpl-theme.html'
            }, admin.parseLayerOption(option)));
        },
        /* 打开便签 */
        note: function () {
            var option = admin.util.deepClone($(this).data());
            admin.strToWin(option.window).layui.admin.popupRight($.extend({
                id: 'layer-note', url: option.url || 'tpl/tpl-note.html'
            }, admin.parseLayerOption(option)));
        },
        /* 打开消息 */
        message: function () {
            var option = admin.util.deepClone($(this).data());
            admin.strToWin(option.window).layui.admin.popupRight($.extend({
                id: 'layer-notice', url: option.url || 'tpl/tpl-message.html'
            }, admin.parseLayerOption(option)));
        },
        /* 打开修改密码弹窗 */
        psw: function () {
            var option = admin.util.deepClone($(this).data());
            admin.strToWin(option.window).layui.admin.open($.extend({
                id: 'layer-psw', title: '修改密码', shade: 0, url: option.url || 'tpl/tpl-password.html'
            }, admin.parseLayerOption(option)));
        },
        /* 退出登录 */
        logout: function () {
            var option = admin.util.deepClone($(this).data());
            admin.unlockScreen();
            function doLogout() {
                if (option.ajax) {
                    var loadIndex = layer.load(2);
                    admin.req(option.ajax, function (res) {
                        layer.close(loadIndex);
                        if (option.parseData) {
                            try {
                                var parseData = new Function('res', option.parseData);
                                res = parseData(res);
                            } catch (e) {
                                console.error(e);
                            }
                        }
                        if (res.code == (option.code || 0)) {
                            setter.removeToken && setter.removeToken();
                            location.replace(option.url || '/');
                        } else {
                            layer.msg(res.msg, {icon: 2});
                        }
                    }, option.method || 'delete');
                } else {
                    setter.removeToken && setter.removeToken();
                    location.replace(option.url || '/');
                }
            }
            if (false === option.confirm || 'false' === option.confirm) return doLogout();
            admin.strToWin(option.window).layui.layer.confirm(option.content || '确定要退出登录吗?', $.extend({
                title: '温馨提示', skin: 'layui-layer-admin', shade: .1
            }, admin.parseLayerOption(option)), function () {
                doLogout();
            });
        },
        /* 打开弹窗 */
        open: function () {
            var option = admin.util.deepClone($(this).data());
            admin.strToWin(option.window).layui.admin.open(admin.parseLayerOption(option));
        },
        /* 打开右侧弹窗 */
        popupRight: function () {
            var option = admin.util.deepClone($(this).data());
            admin.strToWin(option.window).layui.admin.popupRight(admin.parseLayerOption(option));
        },
        /* 全屏 */
        fullScreen: function () {
            var ac = 'layui-icon-screen-full', ic = 'layui-icon-screen-restore';
            var $ti = $(this).find('i');
            var isFullscreen = document.fullscreenElement || document.msFullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement || false;
            if (isFullscreen) {
                var efs = document.exitFullscreen || document.webkitExitFullscreen || document.mozCancelFullScreen || document.msExitFullscreen;
                if (efs) {
                    efs.call(document);
                } else if (window.ActiveXObject) {
                    var ws = new ActiveXObject('WScript.Shell');
                    ws && ws.SendKeys('{F11}');
                }
                $ti.addClass(ac).removeClass(ic);
            } else {
                var el = document.documentElement;
                var rfs = el.requestFullscreen || el.webkitRequestFullscreen || el.mozRequestFullScreen || el.msRequestFullscreen;
                if (rfs) {
                    rfs.call(el);
                } else if (window.ActiveXObject) {
                    var wss = new ActiveXObject('WScript.Shell');
                    wss && wss.SendKeys('{F11}');
                }
                $ti.addClass(ic).removeClass(ac);
            }
        },
        /* 左滑动tab */
        leftPage: function () {
            admin.strToWin($(this).data('window')).layui.admin.rollPage('left');
        },
        /* 右滑动tab */
        rightPage: function () {
            admin.strToWin($(this).data('window')).layui.admin.rollPage();
        },
        /* 关闭当前选项卡 */
        closeThisTabs: function () {
            var url = $(this).data('url');
            admin.strToWin($(this).data('window')).layui.admin.closeThisTabs(url);
        },
        /* 关闭其他选项卡 */
        closeOtherTabs: function () {
            admin.strToWin($(this).data('window')).layui.admin.closeOtherTabs();
        },
        /* 关闭所有选项卡 */
        closeAllTabs: function () {
            admin.strToWin($(this).data('window')).layui.admin.closeAllTabs();
        },
        /* 关闭当前弹窗(智能) */
        closeDialog: function () {
            if ($(this).parents('.layui-layer').length > 0) admin.closeDialog(this);
            else admin.closeDialog();
        },
        /* 关闭当前iframe弹窗 */
        closeIframeDialog: function () {
            admin.closeDialog();
        },
        /* 关闭当前页面层弹窗 */
        closePageDialog: function () {
            admin.closeDialog(this);
        },
        /* 锁屏 */
        lockScreen: function () {
            admin.strToWin($(this).data('window')).layui.admin.lockScreen($(this).data('url'));
        }
    };
    /** 选择位置 */
    admin.chooseLocation = function (param) {
        var dialogTitle = param.title;  // 弹窗标题
        var onSelect = param.onSelect;  // 选择回调
        var needCity = param.needCity;  // 是否返回行政区
        var mapCenter = param.center;  // 地图中心
        var defaultZoom = param.defaultZoom;  // 地图默认缩放级别
        var pointZoom = param.pointZoom;  // 选中时地图缩放级别
        var searchKeywords = param.keywords;  // poi检索关键字
        var searchPageSize = param.pageSize;  // poi检索最大数量
        var mapJsUrl = param.mapJsUrl;  // 高德地图js的url
        if (dialogTitle === undefined) dialogTitle = '选择位置';
        if (defaultZoom === undefined) defaultZoom = 11;
        if (pointZoom === undefined) pointZoom = 17;
        if (searchKeywords === undefined) searchKeywords = '';
        if (searchPageSize === undefined) searchPageSize = 30;
        if (mapJsUrl === undefined) mapJsUrl = 'https://webapi.amap.com/maps?v=1.4.14&key=006d995d433058322319fa797f2876f5';
        var isSelMove = false, selLocation;
        // 搜索附近
        var searchNearBy = function (lat, lng) {
            AMap.service(['AMap.PlaceSearch'], function () {
                var placeSearch = new AMap.PlaceSearch({
                    type: '', pageSize: searchPageSize, pageIndex: 1
                });
                var cpoint = [lng, lat];
                placeSearch.searchNearBy(searchKeywords, cpoint, 1000, function (status, result) {
                    if (status === 'complete') {
                        var pois = result.poiList.pois;
                        var htmlList = '';
                        for (var i = 0; i < pois.length; i++) {
                            var poiItem = pois[i];
                            if (poiItem.location !== undefined) {
                                htmlList += '';
                                htmlList += '     
' + poiItem.name + '
';
                                htmlList += '     
' + poiItem.address + '
';
                                htmlList += '     
';
                                htmlList += '
';
                                    htmlList += '     
';
                                    htmlList += '     
' + tipItem.name + '
';
                                    htmlList += '     
' + tipItem.address + '
';
                                    htmlList += '
',
            '     
',
            '          
',
            '          
',
            '          

',
            '     
',
            '     
',
            '     
',
            '
',
                '     
',
                '          

',
                '     
',
                '     
',
                '
',
                '     
',
                '          ',
                '          ',
                '     
',
                '     
',
                '          ',
                '          ',
                '     
',
                '     
',
                '          ',
                '          ',
                '          ',
                '          ',
                '     
',
                '     
',
                '          ',
                '          ',
                '     
',
                '     
',
                '          ',
                '          ',
                '     
',
                '     
',
                '
' + res + '
');
                        admin.isLockScreen = true;
                        admin.putTempData('isLockScreen', admin.isLockScreen, true);
                        admin.putTempData('lockScreenUrl', url, true);
                    } else {
                        console.error(res);
                        layer.msg(JSON.stringify(res), {icon: 2, anim: 6});
                    }
                }
            });
        }
    };
    /** 解除锁屏 */
    admin.unlockScreen = function (isRemove) {
        if (window !== top && !admin.isTop() && top.layui && top.layui.admin) return top.layui.admin.unlockScreen(isRemove);
        var $lock = $('#ew-lock-screen-group');
        isRemove ? $lock.remove() : $lock.fadeOut('fast');
        admin.isLockScreen = false;
        admin.putTempData('isLockScreen', null, true);
    };
    /** tips方法封装 */
    admin.tips = function (option) {
        return layer.tips(option.text, option.elem, {
            tips: [option.direction || 1, option.bg || '#191a23'],
            tipsMore: option.tipsMore, time: option.time || -1,
            success: function (layero) {
                var $content = $(layero).children('.layui-layer-content');
                if (option.padding || option.padding === 0) $content.css('padding', option.padding);
                if (option.color) $content.css('color', option.color);
                if (option.bgImg) $content.css('background-image', option.bgImg).children('.layui-layer-TipsG').css('z-index', '-1');
                if (option.fontSize) $content.css('font-size', option.fontSize);
                if (!option.offset) return;
                var offset = option.offset.split(',');
                var top = offset[0], left = offset.length > 1 ? offset[1] : undefined;
                if (top) $(layero).css('margin-top', top);
                if (left) $(layero).css('margin-left', left);
            }
        });
    };
    /** 渲染动态模板 */
    admin.renderTpl = function (elem) {
        if (!layui.admin) layui.admin = admin;
        // 解析数据
        function parseData(data) {
            if (!data) return;
            try {
                return new Function('return ' + data + ';')();
            } catch (e) {
                console.error(e + '\nlay-data: ' + data);
            }
        }
        $(elem || '[ew-tpl]').each(function () {
            var $this = $(this);
            var option = admin.util.deepClone($(this).data());
            option.elem = $this;
            option.tpl = $this.html();
            option.url = parseData($this.attr('ew-tpl'));
            option.headers = parseData(option.headers);
            option.where = parseData(option.where);
            if (option.done) {
                try {
                    option.done = new Function('res', option.done);
                } catch (e) {
                    console.error(e + '\nlay-data:' + option.done);
                    option.done = undefined;
                }
            }
            admin.util.render(option);
        });
    };
    /** 事件监听 */
    admin.on = function (events, callback) {
        return layui.onevent.call(this, 'admin', events, callback);
    };
    /** 修改配置信息 */
    admin.putSetting = function (key, value) {
        setter[key] = value;
        admin.putTempData(key, value, true);
    };
    /** 恢复配置信息 */
    admin.recoverState = function () {
        // 恢复锁屏状态
        if (admin.getTempData('isLockScreen', true)) admin.lockScreen(admin.getTempData('lockScreenUrl', true));
        // 恢复配置的主题
        if (setter.defaultTheme) admin.changeTheme(setter.defaultTheme, window, true, true);
        // 恢复页脚状态、导航箭头
        if (setter.closeFooter) $('body').addClass('close-footer');
        if (setter.navArrow !== undefined) {
            var $nav = $(sideDOM + '>.layui-nav-tree');
            $nav.removeClass('arrow2 arrow3');
            if (setter.navArrow) $nav.addClass(setter.navArrow);
        }
        // 恢复tab自动刷新
        if (setter.pageTabs && setter.tabAutoRefresh == 'true') $(tabDOM).attr('lay-autoRefresh', 'true');
    };
    /* 事件监听 */
    admin.on = function (events, callback) {
        return layui.onevent.call(this, 'admin', events, callback);
    };
    /** 侧导航折叠状态下鼠标经过无限悬浮效果 */
    var navItemDOM = '.layui-layout-admin.admin-nav-mini>.layui-side .layui-nav .layui-nav-item';
    $(document).on('mouseenter', navItemDOM + ',' + navItemDOM + ' .layui-nav-child>dd', function () {
        if (admin.getPageWidth() > 768) {
            var $that = $(this), $navChild = $that.find('>.layui-nav-child');
            if ($navChild.length > 0) {
                $that.addClass('admin-nav-hover');
                $navChild.css('left', $that.offset().left + $that.outerWidth());
                var top = $that.offset().top;
                if (top + $navChild.outerHeight() > admin.getPageHeight()) {
                    top = top - $navChild.outerHeight() + $that.outerHeight();
                    if (top < 60) top = 60;
                    $navChild.addClass('show-top');
                }
                $navChild.css('top', top);
                $navChild.addClass('ew-anim-drop-in');
            } else if ($that.hasClass('layui-nav-item')) {
                admin.tips({elem: $that, text: $that.find('cite').text(), direction: 2, offset: '12px'});
            }
        }
    }).on('mouseleave', navItemDOM + ',' + navItemDOM + ' .layui-nav-child>dd', function () {
        layer.closeAll('tips');
        var $this = $(this);
        $this.removeClass('admin-nav-hover');
        var $child = $this.find('>.layui-nav-child');
        $child.removeClass('show-top ew-anim-drop-in');
        $child.css({'left': 'auto', 'top': 'auto'});
    });
    /** 所有ew-event */
    $(document).on('click', '*[ew-event]', function () {
        var te = admin.events[$(this).attr('ew-event')];
        te && te.call(this, $(this));
    });
    /** 所有lay-tips处理 */
    $(document).on('mouseenter', '*[lay-tips]', function () {
        var $this = $(this);
        admin.tips({
            elem: $this, text: $this.attr('lay-tips'), direction: $this.attr('lay-direction'),
            bg: $this.attr('lay-bg'), offset: $this.attr('lay-offset'),
            padding: $this.attr('lay-padding'), color: $this.attr('lay-color'),
            bgImg: $this.attr('lay-bgImg'), fontSize: $this.attr('lay-fontSize')
        });
    }).on('mouseleave', '*[lay-tips]', function () {
        layer.closeAll('tips');
    });
    /** 表单搜索展开更多 */
    $(document).on('click', '.form-search-expand,[search-expand]', function () {
        var $this = $(this);
        var $form = $this.parents('.layui-form').first();
        var expand = $this.data('expand');
        var change = $this.attr('search-expand');
        if (expand === undefined || expand === true) {
            expand = true;
            $this.data('expand', false);
            $this.html('收起 ');
            var $elem = $form.find('.form-search-show-expand');
            $elem.attr('expand-show', '');
            $elem.removeClass('form-search-show-expand');
        } else {
            expand = false;
            $this.data('expand', true);
            $this.html('展开 ');
            $form.find('[expand-show]').addClass('form-search-show-expand');
        }
        if (!change) return;
        new Function('d', change)({expand: expand, elem: $this});
    });
    /** select使用fixed定位显示 */
    $(document).on('click.ew-sel-fixed', '.ew-select-fixed .layui-form-select .layui-select-title', function () {
        var $this = $(this), $dl = $this.parent().children('dl'), tTop = $this.offset().top;
        var tWidth = $this.outerWidth(), tHeight = $this.outerHeight(), scrollT = $(document).scrollTop();
        var dWidth = $dl.outerWidth(), dHeight = $dl.outerHeight();
        var top = tTop + tHeight + 5 - scrollT, left = $this.offset().left;
        if (top + dHeight > admin.getPageHeight()) top = top - dHeight - tHeight - 10;
        if (left + dWidth > admin.getPageWidth()) left = left - dWidth + tWidth;
        $dl.css({'left': left, 'top': top, 'min-width': tWidth});
    });
    /** 用于滚动时关闭一些fixed的组件 */
    admin.hideFixedEl = function () {
        $('.ew-select-fixed .layui-form-select').removeClass('layui-form-selected layui-form-selectup');  // select
        $('body>.layui-laydate').remove();  // laydate
    };
    /** 垂直导航栏展开折叠增加过渡效果 */
    $(document).on('click', '.layui-nav-tree>.layui-nav-item a', function () {
        var $this = $(this), $child = $this.siblings('.layui-nav-child'), $parent = $this.parent();
        if ($child.length === 0) return;
        if ($parent.hasClass('admin-nav-hover')) return;
        if ($parent.hasClass('layui-nav-itemed')) {  // 因为layui会处理一遍所以这里状态是相反的
            $child.css('display', 'none').slideDown('fast', function () {
                $(this).css('display', '');
            });
        } else {
            $child.css('display', 'block').slideUp('fast', function () {
                $(this).css('display', '');
            });
        }
        if ($this.parents('.layui-nav').attr('lay-shrink') === '_all') {  // 手风琴效果
            var $siblings = $this.parent().siblings('.layui-nav-itemed');
            $siblings.children('.layui-nav-child').css('display', 'block').slideUp('fast', function () {
                $(this).css('display', '');
            });
            $siblings.removeClass('layui-nav-itemed');
        }
    });
    $('.layui-nav-tree[lay-shrink="all"]').attr('lay-shrink', '_all');  // 让layui不处理手风琴效果
    /** 折叠面板展开折叠增加过渡效果 */
    $(document).on('click', '.layui-collapse>.layui-colla-item>.layui-colla-title', function () {
        var $this = $(this), $content = $this.siblings('.layui-colla-content')
            , $collapse = $this.parent().parent(), isNone = $content.hasClass('layui-show');
        if (isNone) {  // 因为layui会处理一遍所以这里状态是相反的
            $content.removeClass('layui-show').slideDown('fast').addClass('layui-show');
        } else {
            $content.css('display', 'block').slideUp('fast', function () {
                $(this).css('display', '');
            });
        }
        $this.children('.layui-colla-icon').html('')
            .css({'transition': 'all .3s', 'transform': 'rotate(' + (isNone ? '90deg' : '0deg') + ')'});
        if ($collapse.attr('lay-shrink') === '_all') {  // 手风琴效果
            var $show = $collapse.children('.layui-colla-item').children('.layui-colla-content.layui-show').not($content);
            $show.css('display', 'block').slideUp('fast', function () {
                $(this).css('display', '');
            });
            $show.removeClass('layui-show');
            $show.siblings('.layui-colla-title').children('.layui-colla-icon').html('')
                .css({'transition': 'all .3s', 'transform': 'rotate(0deg)'});
        }
    });
    $('.layui-collapse[lay-accordion]').attr('lay-shrink', '_all').removeAttr('lay-accordion');  // 让layui不处理手风琴效果
    /** 表单验证tips提示样式修改 */
    layer.oldTips = layer.tips;
    layer.tips = function (content, follow, options) {
        var $fFip;  // 判断是否是表单验证调用的tips
        if ($(follow).length > 0 && $(follow).parents('.layui-form').length > 0) {
            if ($(follow).is('input') || $(follow).is('textarea')) {
                $fFip = $(follow);
            } else if ($(follow).hasClass('layui-form-select') || $(follow).hasClass('layui-form-radio')
                || $(follow).hasClass('layui-form-checkbox') || $(follow).hasClass('layui-form-switch')) {
                $fFip = $(follow).prev();
            }
        }
        if (!$fFip) return layer.oldTips(content, follow, options);
        options.tips = [$fFip.attr('lay-direction') || 3, $fFip.attr('lay-bg') || '#ff4c4c'];
        setTimeout(function () {
            options.success = function (layero) {
                $(layero).children('.layui-layer-content').css('padding', '6px 12px');
            };
            layer.oldTips(content, follow, options);
        }, 100);
    };
    /** 所有ew-href处理 */
    $(document).on('click', '*[ew-href]', function () {
        var $this = $(this);
        var href = $this.attr('ew-href');
        if (!href || href === '#') return;
        if (href.indexOf('javascript:') === 0) return new Function(href.substring(11))();
        var title = $this.attr('ew-title') || $this.text();
        var win = $this.data('window');
        win ? (win = admin.strToWin(win)) : (win = top);
        var end = $this.attr('ew-end');
        try {
            if (end) end = new Function(end);
            else end = undefined;
        } catch (e) {
            console.error(e);
        }
        if (win.layui && win.layui.index) win.layui.index.openTab({title: title || '', url: href, end: end});
        else location.href = href;
    });
    /** 帮助鼠标右键菜单完成点击空白关闭的功能 */
    if (!layui.contextMenu) {
        $(document).off('click.ctxMenu').on('click.ctxMenu', function () {
            try {
                var ifs = top.window.frames;
                for (var i = 0; i < ifs.length; i++) {
                    var tif = ifs[i];
                    try {  // 可能会跨域
                        if (tif.layui && tif.layui.jquery) tif.layui.jquery('body>.ctxMenu').remove();
                    } catch (e) {
                    }
                }
                try {  // 可能会跨域
                    if (top.layui && top.layui.jquery) top.layui.jquery('body>.ctxMenu').remove();
                } catch (e) {
                }
            } catch (e) {
            }
        });
    }
    /** 读取缓存的配置信息 */
    setter = $.extend({
        pageTabs: true, cacheTab: true, openTabCtxMenu: true, maxTabNum: 20, tableName: 'easyweb-iframe',
        apiNoCache: true, ajaxSuccessBefore: function (res, url, obj) {
            return admin.ajaxSuccessBefore ? admin.ajaxSuccessBefore(res, url, obj) : true;
        }, getAjaxHeaders: function (res, url, obj) {
            return admin.getAjaxHeaders ? admin.getAjaxHeaders(res, url, obj) : [];
        }
    }, setter);
    var cache = admin.getTempData(true);
    if (cache) {
        var keys = ['pageTabs', 'cacheTab', 'defaultTheme', 'navArrow', 'closeFooter', 'tabAutoRefresh'];
        for (var i = 0; i < keys.length; i++) if (cache[keys[i]] !== undefined) setter[keys[i]] = cache[keys[i]];
    }
    admin.recoverState();  // 恢复本地配置
    admin.renderTpl();  // 渲染动态模板
    admin.setter = setter;
    if (layui.device().ios) $('body').addClass('ios-iframe-body');  // ios浏览器iframe兼容
    exports('admin', admin);
});