layui.define(['jquery'], function (exports) { var $ = layui.jquery; var CLS_DROPDOWN = 'layui-dropdown'; var CLS_DROPDOWN_RIGHT = 'layui-dropdown-direright'; var CLS_SELECT = 'layui-dropdown-select'; var CLS_OPTION = 'layui-dropdown-option'; var CLS_TITLE = 'layui-dropdown-title'; var CLS_ARROW = 'febs-arrow-up'; var HTML_DROPDOWN = '
'; var DEPTH = 0; var INDEX = 0; var Class = function (config) { this.config = $.extend({}, this.config, config); this.render(config) }; Class.prototype.config = { width: 150, trigger: 'click' }; Class.prototype.dropdownElem = ''; Class.prototype.exists = false; Class.prototype.depth = 0; Class.prototype.index = 0; Class.prototype.render = function (config) { var self = this; if (typeof this.config.elem == 'string') { $(document).on('click', this.config.elem, event) } else { this.config.elem.click(event) } function event(e) { e.stopPropagation(); if (self.dropdownElem === '') { INDEX += 1; self.index = INDEX; var dropdown = $(HTML_DROPDOWN).attr('lay-index', self.index); $('.' + CLS_DROPDOWN + '[lay-index="' + self.index + '"]').remove(); dropdown.html(self.createOptionsHtml(config)); $('body').prepend(dropdown); dropdown.on('click', '.' + CLS_OPTION, function (e) { e.stopPropagation(); if ($.isFunction(config.click)) { config.click($(this).attr('lay-name'), $(this), e); dropdown.hide() } }); self.dropdownElem = dropdown; self.dropdownSelect = dropdown.find('.' + CLS_SELECT) } var dropdown = self.dropdownElem; var top = $(this).offset().top + $(this).height() + 12; var left = $(this).offset().left - 5; dropdown.css({ top: top - 10 }); var offsetWidth = (self.depth + 1) * self.config.width; if (left + offsetWidth > $(window).width()) { dropdown .addClass('layui-dropdown-right') .css('left', left - dropdown.width() + $(this).width()); self.dropdownSelect.css({left: 'auto', right: self.config.width}) } else { dropdown.removeClass('layui-dropdown-right').css('left', left); self.dropdownSelect.css({right: 'auto', left: self.config.width}) } $('body').one('click', function (e) { dropdown.stop().animate( { top: '-=100000', opacity: 0 }, 1 ); }); dropdown .show() .stop() .animate( { top: '+=10', opacity: 1 }, 250 ) } }; Class.prototype.createOptionsHtml = function (data, depth) { depth = depth || 0; var self = this; var width = self.config.width + 'px;'; var html = '
'; if (depth === 0) { html += '
' } layui.each(data.options, function (i, option) { var paserHtml = false; var permissions = currentUser.permissionSet; var options = option.options || []; if (option.perms) { if (permissions.indexOf(option.perms) !== -1) { paserHtml = true; } } else { paserHtml = true; } if (paserHtml) { html += '

' + option.title + '

' + (options.length > 0 ? '' : ''); option.options = option.options || []; if (option.options.length > 0) html += self.createOptionsHtml(option, depth + 1); html += '
'; if (self.depth < depth) self.depth = depth } }); html += '
'; return html }; var self = { render: function (config) { new Class(config) } }; exports('dropdown', self) });