layui.define(['element'], function(exports){ var element = layui.element(), $ = layui.jquery, layer = parent.layer === undefined ? layui.layer : parent.layer, module_name = 'navtab', globalTabIdIndex = 0, LarryTab = function(){ this.config ={ elem: undefined, closed: true }; }; var ELEM = {}; /** * [参数设置 options] */ LarryTab.prototype.set = function(options){ var _this = this; $.extend(true, _this.config, options); return _this; }; /** * [init 对象初始化] * @return {[type]} [返回对象初始化结果] */ LarryTab.prototype.init = function(){ var _this = this; var _config = _this.config; if(typeof(_config.elem) !== 'string' && typeof(_config.elem) !== 'object') { layer.alert('Tab选项卡错误提示: elem参数未定义或设置出错,具体设置格式请参考文档API.'); } var $container; if(typeof(_config.elem) === 'string') { $container = $('' + _config.elem + ''); //console.log($container); } if(typeof(_config.elem) === 'object') { $container = _config.elem; } if($container.length === 0) { layer.alert('Tab选项卡错误提示:找不到elem参数配置的容器,请检查.'); } var filter = $container.attr('lay-filter'); if(filter === undefined || filter === '') { layer.alert('Tab选项卡错误提示:请为elem容器设置一个lay-filter过滤器'); } _config.elem = $container; ELEM.titleBox = $container.children('ul.layui-tab-title'); ELEM.contentBox = $container.children('div.layui-tab-content'); ELEM.tabFilter = filter; return _this; }; /** * [exists 在layui-tab中检查对应layui-tab-title是否存在,如果存在则返回索引值,不存在返回-1] * @param {[type]} title [description] * @return {[type]} [description] */ LarryTab.prototype.exists = function(title){ var _this = ELEM.titleBox === undefined ? this.init() : this, tabIndex = -1; ELEM.titleBox.find('li').each(function(i, e) { var $em = $(this).children('em'); if($em.text() === title) { tabIndex = i; }; }); return tabIndex; }; /** * [tabAdd 增加选项卡,如果已存在则增加this样式] * @param {[type]} data [description] * @return {[type]} [description] */ LarryTab.prototype.tabAdd = function(data){ var _this = this; var tabIndex = _this.exists(data.title); // 若不存在 if(tabIndex === -1){ globalTabIdIndex++; var content = ''; var title = ''; // 若icon有定义 if(data.icon !== undefined){ if(data.icon.indexOf('fa-') !== -1) { title += ''; } else { title += '' + data.icon + ''; } } title += '' + data.title + ''; if(_this.config.closed) { title += ''; } //添加tab element.tabAdd(ELEM.tabFilter, { title: title, content: content }); //iframe 自适应 ELEM.contentBox.find('iframe[data-id=' + globalTabIdIndex + ']').each(function() { $(this).height(ELEM.contentBox.height()); }); if(_this.config.closed) { //监听关闭事件 ELEM.titleBox.find('li').children('i.layui-tab-close[data-id=' + globalTabIdIndex + ']').on('click', function() { element.tabDelete(ELEM.tabFilter, $(this).parent('li').index()).init(); }); }; //切换到当前打开的选项卡 element.tabChange(ELEM.tabFilter, ELEM.titleBox.find('li').length - 1); }else { element.tabChange(ELEM.tabFilter, tabIndex); } }; var navtab = new LarryTab(); exports(module_name, function(options) { return navtab.set(options); }); });