layui.extend({ 
 | 
    conf: 'config', 
 | 
    api: 'lay/modules/api', 
 | 
    view: 'lay/modules/view' 
 | 
}).define(['conf', 'view', 'api', 'jquery', 'table'], function (exports) { 
 | 
    POPUP_DATA = {}; 
 | 
    var conf = layui.conf; 
 | 
    var layuiTable = layui.table; 
 | 
    var view = layui.view; 
 | 
    var element = layui.element; 
 | 
    var $ = layui.jquery; 
 | 
    var $bread = $('#febs-layout .febs-breadcrumb'); 
 | 
  
 | 
    layui.extend(conf.extend); 
 | 
    var self = {}; 
 | 
    var windowWidth = $(window).width(); 
 | 
  
 | 
    conf.viewTabs = currentUser.isTab === '1'; 
 | 
    self.route = layui.router(); 
 | 
    self.view = view; 
 | 
    self.api = layui.api; 
 | 
    self.closeOnceHashChange = false; 
 | 
    self.ie8 = view.ie8; 
 | 
    self.get = view.request; 
 | 
    self.appBody = null; 
 | 
    self.shrinkCls = 'febs-sidebar-shrink'; 
 | 
    self.isInit = false; 
 | 
    self.routeLeaveFunc = null; 
 | 
    self.routeLeave = function (callback) { 
 | 
        this.routeLeaveFunc = callback 
 | 
    }; 
 | 
    self.render = function (elem) { 
 | 
        if (typeof elem == 'string') elem = $('#' + elem); 
 | 
        var action = elem.get(0).tagName === 'SCRIPT' ? 'next' : 'find'; 
 | 
        elem[action]('[is-template]').remove(); 
 | 
        view.parse(elem) 
 | 
    }; 
 | 
    //初始化整个页面 
 | 
    self.initPage = function (initCallback) { 
 | 
        //加载样式文件 
 | 
        layui.each(layui.conf.style, function (index, url) { 
 | 
            layui.link(url + '?v=' + conf.v) 
 | 
        }); 
 | 
        self.initView(self.route) 
 | 
        String.prototype.startsWith = function (str) { 
 | 
            if (str == null || str === "" || this.length === 0 || str.length > this.length) { 
 | 
                return false; 
 | 
            } 
 | 
            return this.substr(0, str.length) === str; 
 | 
        }; 
 | 
    }; 
 | 
    self.post = function (params) { 
 | 
        view.request($.extend({type: 'post'}, params)) 
 | 
    }; 
 | 
  
 | 
    //初始化视图区域 
 | 
    self.initView = function (route) { 
 | 
        if (!self.route.href || self.route.href === '/') { 
 | 
            self.route = layui.router('#' + conf.entry); 
 | 
            route = self.route 
 | 
        } 
 | 
        route.fileurl = '/' + route.path.join('/'); 
 | 
  
 | 
        if ($.inArray(route.fileurl, conf.indPage) === -1) { 
 | 
            var loadRenderPage = function (params) { 
 | 
                if (conf.viewTabs === true) { 
 | 
                    view.renderTabs(route) 
 | 
                } else { 
 | 
                    view.render(route.fileurl) 
 | 
                } 
 | 
            }; 
 | 
  
 | 
            if (view.containerBody == null) { 
 | 
                //加载layout文件 
 | 
                view.renderLayout(function () { 
 | 
                    //重新渲染导航 
 | 
                    element.render('nav', 'febs-sidebar'); 
 | 
                    //加载视图文件 
 | 
                    loadRenderPage() 
 | 
                }) 
 | 
            } else { 
 | 
                //layout文件已加载,加载视图文件 
 | 
                loadRenderPage() 
 | 
            } 
 | 
        } else { 
 | 
            //加载单页面 
 | 
            view.renderIndPage(route.fileurl, function () { 
 | 
                if (conf.viewTabs === true) view.tab.clear() 
 | 
            }) 
 | 
        } 
 | 
    }; 
 | 
    //根据当前加载的 URL高亮左侧导航 
 | 
    self.sidebarFocus = function (url) { 
 | 
        url = url || self.route.href; 
 | 
        var elem = $('#app-sidebar') 
 | 
            .find('[lay-href="' + url + '"]') 
 | 
            .eq(0); 
 | 
        // $bread.empty(); 
 | 
        if (elem.length > 0) { 
 | 
            // 生成面包屑 
 | 
            // var breadHtml = ''; 
 | 
            // elem.parents('dl').prev('a').each(function (k, v) { 
 | 
            //     var $this = $(this); 
 | 
            //     breadHtml += '<a>' + $this[0].innerText + ' / </a>'; 
 | 
            // }); 
 | 
            // breadHtml += '<a>' + elem[0].innerText+ ' </a>'; 
 | 
            // $bread.append(breadHtml); 
 | 
  
 | 
            elem.parents('.layui-nav-item').addClass('layui-nav-itemed') 
 | 
                .siblings().removeClass('layui-nav-itemed'); 
 | 
            elem.click(); 
 | 
        } 
 | 
    }; 
 | 
    self.flexible = function (open) { 
 | 
        if (open === true) { 
 | 
            view.container.removeClass(self.shrinkCls) 
 | 
        } else { 
 | 
            view.container.addClass(self.shrinkCls) 
 | 
        } 
 | 
    }; 
 | 
    self.on = function (name, callback) { 
 | 
        return layui.onevent(conf.eventName, 'system(' + name + ')', callback) 
 | 
    }; 
 | 
    self.event = function (name, params) { 
 | 
        layui.event(conf.eventName, 'system(' + name + ')', params) 
 | 
    }; 
 | 
    self.csshref = function (name) { 
 | 
        name = name === undefined ? self.route.path.join('/') : name; 
 | 
        return conf.css + 'views/' + name + '.css' + '?v=' + conf.v 
 | 
    }; 
 | 
    self.prev = function (n) { 
 | 
        if (n === undefined) n = -1; 
 | 
        window.history.go(n) 
 | 
    }; 
 | 
    self.navigate = function (url) { 
 | 
        if (url === conf.entry) url = '/'; 
 | 
        window.location.hash = url 
 | 
    }; 
 | 
    self.data = function (settings, storage) { 
 | 
        if (settings === undefined) return layui.data(conf.tableName); 
 | 
        if ($.isArray(settings)) { 
 | 
            layui.each(settings, function (i) { 
 | 
                layui.data(conf.tableName, settings[i], storage) 
 | 
            }) 
 | 
        } else { 
 | 
            layui.data(conf.tableName, settings, storage) 
 | 
        } 
 | 
    }; 
 | 
  
 | 
    self.isUrl = function (str) { 
 | 
        return /^([hH][tT]{2}[pP]:\/\/|[hH][tT]{2}[pP][sS]:\/\/)(([A-Za-z0-9-~]+)\.)+([A-Za-z0-9-~\/])+$/.test( 
 | 
            str 
 | 
        ) 
 | 
    }; 
 | 
    self.popup = function (params) { 
 | 
        var url = params.url || ''; 
 | 
        var success = params.success || function () { 
 | 
        }; 
 | 
        params.skin = 'layui-layer-admin-page'; 
 | 
        POPUP_DATA = params.data || {}; 
 | 
        var defaultParams = { 
 | 
            type: 1, 
 | 
            area: $(window).width() <= 750 ? ['90%', '90%'] : ['60%', '90%'], 
 | 
            shadeClose: true 
 | 
        }; 
 | 
  
 | 
        if (self.isUrl(url)) { 
 | 
            params.type = 2; 
 | 
            params.content = url; 
 | 
            layer.open($.extend(defaultParams, params)); 
 | 
            return 
 | 
        } 
 | 
  
 | 
        view.tab.del(url); 
 | 
  
 | 
        view.loadHtml(conf.views + url, function (res) { 
 | 
            var htmlElem = $('<div>' + res.html + '</div>'); 
 | 
  
 | 
            if (params.title === undefined) { 
 | 
                params.title = htmlElem.find('title').text() || '信息'; 
 | 
                if (params.title) htmlElem.find('title').remove() 
 | 
            } 
 | 
  
 | 
            params.content = htmlElem.html(); 
 | 
            params.success = function (layer, index) { 
 | 
                success(layer, index); 
 | 
  
 | 
                view.parse(layer); 
 | 
            }; 
 | 
  
 | 
            params = $.extend(defaultParams, params); 
 | 
            layer.open($.extend(defaultParams, params)); 
 | 
        }); 
 | 
    }; 
 | 
  
 | 
    //当小于这个尺寸的时候会进行手机端的适配 
 | 
    var mobileWidth = 991; 
 | 
    var isMobileAdapter = false; 
 | 
  
 | 
    function mobileAdapter() { 
 | 
        self.flexible(false); 
 | 
        var device = layui.device(); 
 | 
        if (device.weixin || device.android || device.ios) { 
 | 
            //点击空白处关闭侧边栏 
 | 
            $(document).on('click', '#' + conf.containerBody, function () { 
 | 
                if ( 
 | 
                    $(window).width() < mobileWidth && 
 | 
                    !view.container.hasClass(self.shrinkCls) 
 | 
                ) { 
 | 
                    self.flexible(false) 
 | 
                } 
 | 
            }) 
 | 
        } 
 | 
        isMobileAdapter = true 
 | 
    } 
 | 
  
 | 
    $(window).on('resize', function (e) { 
 | 
        if ($(window).width() < mobileWidth) { 
 | 
            if (isMobileAdapter === true) return; 
 | 
            mobileAdapter() 
 | 
        } else { 
 | 
            isMobileAdapter = false 
 | 
        } 
 | 
    }); 
 | 
  
 | 
    $(window).on('hashchange', function (e) { 
 | 
        //移动端跳转链接先把导航关闭 
 | 
        if ($(window).width() < mobileWidth) { 
 | 
            self.flexible(false) 
 | 
        } 
 | 
        self.route = layui.router(); 
 | 
        layer.closeAll(); 
 | 
        self.initView(self.route) 
 | 
    }); 
 | 
  
 | 
    $(document).on('click', '[lay-href]', function (e) { 
 | 
        var href = $(this).attr('lay-href'); 
 | 
        var target = $(this).attr('target'); 
 | 
  
 | 
        if (href === '') return; 
 | 
        if (href.startsWith('http')) { 
 | 
            window.open(href) 
 | 
        } 
 | 
        if (self.isUrl(href)) { 
 | 
            next() 
 | 
        } 
 | 
  
 | 
        function next() { 
 | 
            target === '__blank' ? window.open(href) : self.navigate(href) 
 | 
        } 
 | 
  
 | 
        if ($.isFunction(self.routeLeaveFunc)) { 
 | 
            self.routeLeaveFunc(self.route + "asdfasdf", href, next) 
 | 
        } else { 
 | 
            next() 
 | 
        } 
 | 
  
 | 
        return false 
 | 
    }); 
 | 
    $(document).on('click', '[lay-popup]', function (e) { 
 | 
        var params = $(this).attr('lay-popup'); 
 | 
        self.popup( 
 | 
            params.indexOf('{') === 0 
 | 
                ? new Function('return ' + $(this).attr('lay-popup'))() 
 | 
                : {url: params} 
 | 
        ); 
 | 
        return false 
 | 
    }); 
 | 
    $(document).on('mouseenter', '[lay-tips]', function (e) { 
 | 
        var title = $(this).attr('lay-tips'); 
 | 
        var dire = $(this).attr('lay-dire') || 3; 
 | 
        if (title) { 
 | 
            layer.tips(title, $(this), { 
 | 
                tips: [dire, '#263147'] 
 | 
            }) 
 | 
        } 
 | 
    }); 
 | 
    $(document).on('mouseleave', '[lay-tips]', function (e) { 
 | 
        layer.closeAll('tips') 
 | 
    }); 
 | 
  
 | 
    $(document).on('click', '*[' + conf.eventName + ']', function (e) { 
 | 
        self.event($(this).attr(conf.eventName), $(this)) 
 | 
    }); 
 | 
  
 | 
    var shrinkSidebarBtn = 
 | 
        '.' + self.shrinkCls + ' #app-sidebar .layui-nav-item a'; 
 | 
  
 | 
    $(document).on('click', shrinkSidebarBtn, function (e) { 
 | 
        if (isMobileAdapter === true) return; 
 | 
        var chileLength = $(this) 
 | 
            .parent() 
 | 
            .find('.layui-nav-child').length; 
 | 
        if (chileLength > 0) { 
 | 
            self.flexible(true); 
 | 
            layer.closeAll('tips') 
 | 
        } 
 | 
    }); 
 | 
    $(document).on('mouseenter', shrinkSidebarBtn, function (e) { 
 | 
        var title = $(this).attr('title'); 
 | 
        if (title) { 
 | 
            layer.tips(title, $(this).find('.layui-icon'), { 
 | 
                tips: [2, '#263147'] 
 | 
            }) 
 | 
        } 
 | 
    }); 
 | 
    $(document).on('mouseleave', shrinkSidebarBtn, function (e) { 
 | 
        layer.closeAll('tips') 
 | 
    }); 
 | 
  
 | 
    self.on('flexible', function (init) { 
 | 
        var status = view.container.hasClass(self.shrinkCls); 
 | 
        self.flexible(status); 
 | 
        self.data({key: 'flexible', value: status}) 
 | 
    }); 
 | 
    self.on('refresh', function (e) { 
 | 
        var url = self.route.href; 
 | 
        if (conf.viewTabs === true) { 
 | 
            //view.tab.refresh(url); 
 | 
        } else { 
 | 
            view.render(location.hash) 
 | 
        } 
 | 
    }); 
 | 
    self.on('prev', function (e) { 
 | 
        self.prev() 
 | 
    }); 
 | 
  
 | 
    if ($(window).width() <= mobileWidth) { 
 | 
        mobileAdapter() 
 | 
    } else { 
 | 
        var flexibleOpen = self.data().flexible; 
 | 
        self.flexible(flexibleOpen === undefined ? true : flexibleOpen) 
 | 
    } 
 | 
    self.modal = {}; 
 | 
  
 | 
    self.modal.base = function (msg, params) { 
 | 
        params = params || {}; 
 | 
        params.titleIcoColor = params.titleIcoColor || '#5a8bff'; 
 | 
        params.titleIco = params.titleIco || 'exclaimination'; 
 | 
        params.title = params.title || [ 
 | 
            '<i class="layui-icon layui-icon-' + 
 | 
            params.titleIco + 
 | 
            '" style="font-size:12px;background:' + 
 | 
            params.titleIcoColor + 
 | 
            ';display:inline-block;position:relative;top:-2px;height:21px;line-height:21px;text-align:center;width:21px;color:#fff;border-radius:50%;margin-right:12px;"></i>' + 
 | 
            params.titleValue, 
 | 
            'background:#fff;border:none;font-weight:bold;font-size:16px;color:#08132b;padding-top:10px;height:36px;line-height:46px;padding-bottom:0;' 
 | 
        ]; 
 | 
        params = $.extend( 
 | 
            { 
 | 
                skin: 'layui-layer-admin-modal febs-alert', 
 | 
                area: [windowWidth <= 750 ? '60%' : '400px'], 
 | 
                closeBtn: 0, 
 | 
                shadeClose: false 
 | 
            }, 
 | 
            params 
 | 
        ); 
 | 
        layer.alert(msg, params); 
 | 
    }; 
 | 
  
 | 
    // ----------------- 弹窗类 --------------------- // 
 | 
  
 | 
    self.alert = {}; 
 | 
  
 | 
    function alertParams(msg, params) { 
 | 
        params.time = 3000; 
 | 
        params.shade = 0; 
 | 
        params.btn = null; 
 | 
        params.title = [ 
 | 
            '<i class="layui-icon layui-icon-' + 
 | 
            params.titleIco + 
 | 
            '" style="font-size:12px;background:' + 
 | 
            params.titleIcoColor + 
 | 
            ';display:inline-block;font-weight:600;position:relative;top:-2px;height:21px;line-height:21px;text-align:center;width:21px;color:#fff;border-radius:50%;margin-right:12px;"></i>' + 
 | 
            (msg || '请填写提示信息'), 
 | 
            'background:#fff;border:none;font-weight:500;font-size:14px;color:#08132b;margin-bottom:-50px;padding:16px;height:45px;line-height:14px;padding-bottom:0;' 
 | 
        ]; 
 | 
        params.offset = '40px'; 
 | 
        params.area = [windowWidth <= 750 ? '80%' : '400px']; 
 | 
    } 
 | 
  
 | 
    self.alert.success = function (msg, params) { 
 | 
        params = params || {}; 
 | 
        params.titleIco = 'ok'; 
 | 
        params.titleIcoColor = '#30d180'; 
 | 
        alertParams(msg, params); 
 | 
        self.modal.base('', params); 
 | 
    }; 
 | 
    self.alert.warn = function (msg, params) { 
 | 
        params = params || {}; 
 | 
        params.titleIco = 'exclaimination'; 
 | 
        params.titleIcoColor = '#ffc107'; 
 | 
        alertParams(msg, params); 
 | 
        self.modal.base('', params); 
 | 
    }; 
 | 
    self.alert.error = function (msg, params) { 
 | 
        params = params || {}; 
 | 
        params.titleIco = 'close'; 
 | 
        params.titleIcoColor = '#ff5652'; 
 | 
        alertParams(msg, params); 
 | 
        self.modal.base('', params); 
 | 
    }; 
 | 
    self.alert.info = function (msg, params) { 
 | 
        params = params || {}; 
 | 
        params.titleIco = 'infomation'; 
 | 
        params.titleIcoColor = '#2db7f5'; 
 | 
        alertParams(msg, params); 
 | 
        self.modal.base('', params); 
 | 
    }; 
 | 
  
 | 
    // ----------------- 模态框类 --------------------- // 
 | 
  
 | 
    self.modal.confirm = function (title, msg, yes, no, params) { 
 | 
        params = params || {}; 
 | 
        params.titleIco = 'exclaimination'; 
 | 
        params.titleIcoColor = '#ffc107'; 
 | 
        params.titleValue = title; 
 | 
        params.shadeClose = false; 
 | 
        params = $.extend({ 
 | 
            btn: ['确定', '取消'] 
 | 
            , yes: function (index, layero) { 
 | 
                yes && (yes)(); 
 | 
                layer.close(index); 
 | 
            } 
 | 
            , btn2: function (index, layero) { 
 | 
                no && (no)(); 
 | 
            } 
 | 
        }, params); 
 | 
        self.modal.base(msg, params); 
 | 
    }; 
 | 
  
 | 
    self.modal.info = function (title, msg, yes, params) { 
 | 
        params = params || {}; 
 | 
        params.titleIco = 'infomation'; 
 | 
        params.titleIcoColor = '#2db7f5'; 
 | 
        params.titleValue = title; 
 | 
        params.shadeClose = false; 
 | 
        params = $.extend({ 
 | 
            btn: ['确定'] 
 | 
            , yes: function (index, layero) { 
 | 
                yes && (yes)(); 
 | 
                layer.close(index); 
 | 
            } 
 | 
        }, params); 
 | 
        self.modal.base(msg, params); 
 | 
    }; 
 | 
  
 | 
    self.modal.warn = function (title, msg, yes, params) { 
 | 
        params = params || {}; 
 | 
        params.titleIco = 'exclaimination'; 
 | 
        params.titleIcoColor = '#ffc107'; 
 | 
        params.titleValue = title; 
 | 
        params.shadeClose = false; 
 | 
        params = $.extend({ 
 | 
            btn: ['确定'] 
 | 
            , yes: function (index, layero) { 
 | 
                yes && (yes)(); 
 | 
                layer.close(index); 
 | 
            } 
 | 
        }, params); 
 | 
        self.modal.base(msg, params); 
 | 
    }; 
 | 
  
 | 
    self.modal.success = function (title, msg, yes, params) { 
 | 
        params = params || {}; 
 | 
        params.titleIco = 'ok'; 
 | 
        params.titleIcoColor = '#30d180'; 
 | 
        params.titleValue = title; 
 | 
        params.shadeClose = false; 
 | 
        params = $.extend({ 
 | 
            btn: ['确定'] 
 | 
            , yes: function (index, layero) { 
 | 
                yes && (yes)(); 
 | 
                layer.close(index); 
 | 
            } 
 | 
        }, params); 
 | 
        self.modal.base(msg, params); 
 | 
    }; 
 | 
  
 | 
    self.modal.error = function (title, msg, yes, params) { 
 | 
        params = params || {}; 
 | 
        params.titleIco = 'close'; 
 | 
        params.titleIcoColor = '#ff5652'; 
 | 
        params.titleValue = title; 
 | 
        params.shadeClose = false; 
 | 
        params = $.extend({ 
 | 
            btn: ['确定'] 
 | 
            , yes: function (index, layero) { 
 | 
                yes && (yes)(); 
 | 
                layer.close(index); 
 | 
            } 
 | 
        }, params); 
 | 
        self.modal.base(msg, params); 
 | 
    }; 
 | 
  
 | 
    self.modal.open = function (title, url, params) { 
 | 
        params = $.extend({ 
 | 
            url: url, 
 | 
            maxmin: true, 
 | 
            shadeClose: false, 
 | 
            title: [ 
 | 
                (title || '请填写头部信息'), 
 | 
                'font-size:16px;color:#08132b;line-height:46px;padding-bottom:0;border-bottom:1px solid #fcfcfc;background-color:#fcfcfc' 
 | 
            ] 
 | 
        }, params); 
 | 
        self.popup(params); 
 | 
    }; 
 | 
  
 | 
    self.modal.view = function (title, url, params) { 
 | 
        params = $.extend({ 
 | 
            url: url, 
 | 
            maxmin: false, 
 | 
            shadeClose: false, 
 | 
            title: [ 
 | 
                title, 
 | 
                'font-size:15px;color:#08132b;line-height:46px;height:48px;padding-bottom:0;background-color:#fff;border-bottom:none' 
 | 
            ], 
 | 
            area: $(window).width() <= 750 ? ['80%', '80%'] : ['50%', '60%'] 
 | 
        }, params); 
 | 
        self.popup(params); 
 | 
    }; 
 | 
  
 | 
    // 数据表封装 
 | 
    self.table = {}; 
 | 
    self.table.init = function (params) { 
 | 
        var defaultSetting = { 
 | 
            cellMinWidth: 80, 
 | 
            page: true, 
 | 
            skin: 'line row', 
 | 
            limit: 10, 
 | 
            limits: [5, 10, 20, 30, 40, 100], 
 | 
            autoSort: false, 
 | 
            request: { 
 | 
                pageName: 'pageNum', 
 | 
                limitName: 'pageSize' 
 | 
            }, 
 | 
            parseData: function (res) { 
 | 
                return { 
 | 
                    "code": res.code === 200 ? 0 : res.code, 
 | 
                    "count": res.data.total, 
 | 
                    "data": res.data.rows 
 | 
                } 
 | 
            } 
 | 
        }; 
 | 
        return layuiTable.render( 
 | 
            $.extend({}, defaultSetting, params) 
 | 
        ); 
 | 
    }; 
 | 
  
 | 
    // ajax get请求 
 | 
    self.get = function (url, params, success) { 
 | 
        if (params) { 
 | 
            params.invalidate_ie_cache = new Date(); 
 | 
        } 
 | 
        $.get(url, params, function (r) { 
 | 
            resolveResponse(r, success); 
 | 
        }) 
 | 
    }; 
 | 
  
 | 
    // ajax post请求 
 | 
    self.post = function (url, params, success) { 
 | 
        if (params) { 
 | 
            params.invalidate_ie_cache = new Date(); 
 | 
        } 
 | 
        $.post(url, params, function (r) { 
 | 
            resolveResponse(r, success); 
 | 
        }) 
 | 
    }; 
 | 
  
 | 
    self.postForJson = function (url, params, success) { 
 | 
        if (params) { 
 | 
            params.invalidate_ie_cache = new Date(); 
 | 
        } 
 | 
        $.post(url, params, function (r) { 
 | 
            resolveResponse(r, success); 
 | 
        }, "json") 
 | 
    }; 
 | 
  
 | 
    // 文件下载 
 | 
    self.download = function (url, params, fileName) { 
 | 
        self.view.loadBar.start(); 
 | 
        url += '?' + parseParams(params); 
 | 
        var xhr = new XMLHttpRequest(); 
 | 
        xhr.open('GET', url, true); 
 | 
        xhr.responseType = "blob"; 
 | 
        xhr.onload = function () { 
 | 
            if (this.status === 200) { 
 | 
                self.view.loadBar.finish(); 
 | 
                var fileType = this.response.type; 
 | 
                var blob = this.response; 
 | 
                var reader = new FileReader(); 
 | 
                reader.readAsDataURL(blob); 
 | 
                reader.onload = function (e) { 
 | 
                    if ('msSaveOrOpenBlob' in navigator) { // IE,Edge 
 | 
                        var base64file = e.target.result + ''; 
 | 
                        window.navigator.msSaveOrOpenBlob(createFile(base64file.replace('data:' + fileType + ';base64,', ''), fileType), fileName); 
 | 
                    } else { // chrome,firefox 
 | 
                        var link = document.createElement('a'); 
 | 
                        link.style.display = 'none'; 
 | 
                        link.href = e.target.result; 
 | 
                        link.setAttribute('download', fileName); 
 | 
                        document.body.appendChild(link); 
 | 
                        link.click(); 
 | 
                        $(link).remove(); 
 | 
                    } 
 | 
                } 
 | 
            } else { 
 | 
                self.view.loadBar.error(); 
 | 
                self.alert.error('下载失败'); 
 | 
            } 
 | 
        }; 
 | 
        xhr.send(); 
 | 
    }; 
 | 
  
 | 
    // 判断 a种的属性是否 b都有,并且弱相等 
 | 
    self.nativeEqual = function (a, b) { 
 | 
        var aProps = Object.getOwnPropertyNames(a); 
 | 
        var bProps = Object.getOwnPropertyNames(b); 
 | 
        for (var i = 0; i < aProps.length; i++) { 
 | 
            var propName = aProps[i]; 
 | 
            if (!compare(a[propName], b[propName])) { 
 | 
                return false; 
 | 
            } 
 | 
        } 
 | 
        return true; 
 | 
    }; 
 | 
  
 | 
    function resolveResponse(r, f) { 
 | 
        if (r.code === 200) { 
 | 
            f(r) && (f)(); 
 | 
        } else if (r.code === 401) { 
 | 
            self.modal.info('登录失效', '登录已失效,请重新登录', function () { 
 | 
                window.location.href = ctx + 'login'; 
 | 
            }); 
 | 
        } else if (r.code === 403) { 
 | 
            self.alert.warn('对不起,您暂无该操作权限'); 
 | 
        } else { 
 | 
            self.alert.error(r.message ? r.message : '操作失败'); 
 | 
            console.error(r); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    function compare(a, b) { 
 | 
        if (a === '' && b === null) { 
 | 
            return true; 
 | 
        } else if (a === null && b === '') { 
 | 
            return true; 
 | 
        } else { 
 | 
            return a == b; 
 | 
        } 
 | 
    } 
 | 
  
 | 
    function parseParams(param, key, encode) { 
 | 
        if (param == null) return ''; 
 | 
        var arr = []; 
 | 
        var t = typeof (param); 
 | 
        if (t === 'string' || t === 'number' || t === 'boolean') { 
 | 
            arr.push(key + '=' + ((encode == null || encode) ? encodeURIComponent(param) : param)); 
 | 
        } else { 
 | 
            for (var i in param) { 
 | 
                var k = key == null ? i : key + (param instanceof Array ? '[' + i + ']' : '.' + i); 
 | 
                arr.push(parseParams(param[i], k, encode)); 
 | 
            } 
 | 
        } 
 | 
        return arr.join("&"); 
 | 
    } 
 | 
  
 | 
    // 解析 BASE64文件内容 for IE,Edge 
 | 
    function createFile(urlData, fileType) { 
 | 
        var bytes = window.atob(urlData), 
 | 
            n = bytes.length, 
 | 
            u8arr = new Uint8Array(n); 
 | 
        while (n--) { 
 | 
            u8arr[n] = bytes.charCodeAt(n); 
 | 
        } 
 | 
        return new Blob([u8arr], {type: fileType}); 
 | 
    } 
 | 
  
 | 
    exports('febs', self) 
 | 
}); 
 |