(function ($, zou) { "use strict"; $.lrselect = { htmlToData: function ($self) { var dfop = $self[0]._lrselect.dfop; var $ul = $self.find('ul'); dfop.data = []; $ul.find('li').each(function () { var $li = $(this); var point = { id: $li.attr('data-value'), text: $li.html() } dfop.data.push(point); }); $ul.remove(); $ul = null; dfop = null; }, initRender: function (dfop, $self) { var $option = $('
'); var $optionContent = $('
'); var $ul = $(''); $optionContent.css('max-height', dfop.maxHeight + 'px'); $option.hide(); $optionContent.html($ul); $option.prepend($optionContent); if (dfop.allowSearch) { var $search = $(''); $option.append($search); $option.css('padding-bottom', '25px'); $search.on('click', function () { return false; }); $search.find('input').on("keypress", function (e) { if (event.keyCode == "13") { var $this = $(this); var keyword = $this.val(); var $select = $this.parents('.z-select'); var dfop = $select[0]._lrselect.dfop; if (dfop.type == "tree" || dfop.type == "treemultiple") { var $optionContent = $this.parent().prev(); $optionContent.lrtreeSet('search', { keyword: keyword }); } else if (dfop.type == "default" || dfop.type == "multiple") { for (var i = 0, l = dfop.data.length; i < l; i++) { var _item = dfop.data[i]; if (!keyword || _item[dfop.text].indexOf(keyword) != -1) { _item._lrhide = false; } else { _item._lrhide = true; } } $.lrselect.render(dfop); } } }); } $self.append($option); $self.append('
==' + dfop.placeholder + '==
'); $self.attr('type', 'lrselect').addClass('z-select'); if (dfop.type != 'tree') { $optionContent.mCustomScrollbar({ // 优化滚动条 theme: "minimal-dark" }); } }, render: function (dfop) { switch (dfop.type) { case 'default': $.lrselect.defaultRender(dfop); break; case 'tree': case 'treemultiple': $.lrselect.treeRender(dfop); break; case 'gird': break; case 'multiple': $.lrselect.multipleRender(dfop); break; default: break; } dfop.isrender = true; }, defaultRender: function (dfop) { var $ul = $('#zou_select_option_content' + dfop.id); $ul.html(""); if (!!dfop.placeholder) { $ul.append('
  • ==' + dfop.placeholder + '==
  • '); } for (var i = 0, l = dfop.data.length; i < l; i++) { var item = dfop.data[i]; if (!item._lrhide) { var $li = $('
  • ' + item[dfop.text] + '
  • '); $ul.append($li); } } }, multipleRender: function (dfop) { var $ul = $('#zou_select_option_content' + dfop.id); $ul.html(""); if (!!dfop.placeholder) { $ul.append('
  • ==' + dfop.placeholder + '==
  • '); } for (var i = 0, l = dfop.data.length; i < l; i++) { var item = dfop.data[i]; if (!item._lrhide) { if (!!dfop.multipleMapValue && dfop.multipleMapValue[i] != undefined) { var $li = $('
  • ' + item[dfop.text] + '
  • '); $ul.append($li); } else { var $li = $('
  • ' + item[dfop.text] + '
  • '); $ul.append($li); } } } }, treeRender: function (dfop) { var $option = $('#zou_select_option_' + dfop.id); $option.find('.z-select-option-content').remove(); var $optionContent = $('
    '); $option.prepend($optionContent); $optionContent.css('max-height', dfop.maxHeight + 'px'); dfop.data.unshift({ "id": "-1", "text": '==' + dfop.placeholder + '==', "value": "-1", "icon": "-1", "parentnodes": "0", "showcheck": false, "isexpand": false, "complete": true, "hasChildren": false, "ChildNodes": [] }); var treeop = { data: dfop.data, nodeClick: $.lrselect.treeNodeClick }; if (dfop.type == 'treemultiple') { treeop.nodeClick = $.lrselect.treeNodeClick2; treeop.nodeCheck = $.lrselect.treeNodeCheck; } $optionContent.lrtree(treeop); }, bindEvent: function ($self) { $self.unbind('click'); $self.on('click', $.lrselect.click); $(document).click(function (e) { $('.z-select-option').slideUp(150); $('.z-select').removeClass('z-select-focus'); }); }, click: function (e) { var $this = $(this); if ($this.attr('readonly') == 'readonly' || $this.attr('disabled') == 'disabled') { return false; } var dfop = $this[0]._lrselect.dfop; if (!dfop.isload) { return false; } if (!dfop.isrender) { $.lrselect.render(dfop); } // 选中下拉框的某一项 var et = e.target || e.srcElement; var $et = $(et); var $option = $('#zou_select_option_' + dfop.id); if ($option.is(":hidden")) { $('.z-select-option').slideUp(150); $('.z-select').removeClass('z-select-focus'); $this.addClass('z-select-focus'); var width = dfop.width || $this.parent().width(); $option.css('width', width).show(); $option.find('.z-select-option-search').find('input').select(); } else { if (dfop.type != 'multiple') { $option.slideUp(150); $this.removeClass('z-select-focus'); } } if (dfop.type != 'multiple') { if ($et.hasClass('z-selectitem-li')) { var _index = $et.attr('data-value'); if (dfop._index != _index) { var $inputText = $this.find('.z-select-placeholder'); if (_index == -1) { $inputText.css('color', '#999'); $inputText.html('==' + dfop.placeholder + '=='); } else { $inputText.css('color', '#000'); $inputText.html(dfop.data[_index][dfop.text]); } $et.addClass('selected'); if (dfop._index != undefined && dfop._index != null) { $option.find('.z-selectitem-li[data-value="' + dfop._index + '"]').removeClass('selected'); } dfop._index = _index; $this.trigger("change"); if (!!dfop.select) { dfop.select(dfop.data[_index]); } } } } else { if ($et.hasClass('z-selectitem-li') || $et.hasClass('z-select-node-cb')) { var $inputText = $this.find('.z-select-placeholder'); var $cbobj = $et.find('.z-select-node-cb');; var _index = $et.attr('data-value'); if ($et.hasClass('z-select-node-cb')) { $cbobj = $et; _index = $et.parent().attr('data-value'); } dfop.multipleMapValue = dfop.multipleMapValue || {}; dfop.multipleValue = dfop.multipleValue || []; dfop.multipleText = dfop.multipleText || []; if (dfop._index != undefined && dfop._index != null) { $option.find('.z-selectitem-li[data-value="' + dfop._index + '"]').removeClass('selected'); } if (_index == -1) { $inputText.css('color', '#999'); $inputText.html('==' + dfop.placeholder + '=='); dfop.multipleMapValue = {}; dfop.multipleValue = []; dfop.multipleText = []; $option.find('.z-select-node-cb[src$="checkbox_1.png"]').attr('src', '/Content/images/zoutree/checkbox_0.png'); $option.slideUp(150); $this.removeClass('z-select-focus'); } else { var selected = true; if (dfop.multipleMapValue[_index] == undefined) { $inputText.css('color', '#000'); dfop.multipleValue.push(dfop.data[_index][dfop.value]); dfop.multipleText.push(dfop.data[_index][dfop.text]); dfop.multipleMapValue[_index] = dfop.multipleText.length - 1; $inputText.html(String(dfop.multipleText)); $cbobj.attr('src', '/Content/images/zoutree/checkbox_1.png'); } else { dfop.multipleText.splice(dfop.multipleMapValue[_index], 1); dfop.multipleValue.splice(dfop.multipleMapValue[_index], 1); delete dfop.multipleMapValue[_index]; if (dfop.multipleText.length == 0) { $inputText.css('color', '#999'); $inputText.html('==' + dfop.placeholder + '=='); } else { $inputText.html(String(dfop.multipleText)); } selected = false; $cbobj.attr('src', '/Content/images/zoutree/checkbox_0.png'); } $this.trigger("change"); if (!!dfop.select) { dfop.select(dfop.data[_index], selected, $this); } } } } dfop = null; e.stopPropagation(); }, treeNodeClick:function(item,$item){ $item.parents('.z-select-option').slideUp(150); var $select = $item.parents('.z-select'); var dfop = $select[0]._lrselect.dfop; $select.removeClass('z-select-focus'); dfop.currtentItem = item; var $inputText = $select.find('.z-select-placeholder'); $inputText.html(dfop.currtentItem.text); if (item.value == '-1') { $inputText.css('color', '#999'); } else { $inputText.css('color', '#000'); } $select.trigger("change"); if (!!dfop.select) { dfop.select(dfop.currtentItem); } }, treeNodeClick2: function (item, $item) { $tree = $item.parents('.z-select-option-content'); var $select = $item.parents('.z-select'); var dfop = $select[0]._lrselect.dfop; $select.removeClass('z-select-focus'); dfop.currtentItems = []; if (item.value == '-1') { $item.parents('.z-select-option').slideUp(150); $tree.lrtreeSet('allNoCheck'); var $inputText = $select.find('.z-select-placeholder'); $inputText.html(item.text); $inputText.css('color', '#999'); $select.trigger("change"); if (!!dfop.select) { dfop.select([]); } } }, treeNodeCheck: function (item, $item) { $tree = $item.parents('.z-select-option-content'); var $select = $item.parents('.z-select'); var $inputText = $select.find('.z-select-placeholder'); $select.removeClass('z-select-focus'); var dfop = $select[0]._lrselect.dfop; var data = $tree.lrtreeSet('getCheckNodesEx'); dfop.currtentItems = data; var text = ""; for (var i = 0, l = data.length; i < l; i++) { var one = data[i]; if (text != "") { text += ","; } text += one.text; } if (text == "") { $inputText.html("==" + dfop.placeholder + "=="); $inputText.css('color', '#999'); } else { $inputText.text(text); $inputText.css('color', '#000'); } $select.trigger("change"); if (!!dfop.select) { dfop.select(dfop.currtentItems); } }, defaultValue: function ($self) { var dfop = $self[0]._lrselect.dfop; dfop.currtentItem = null; dfop._index = -1; var $inputText = $self.find('.z-select-placeholder'); $inputText.css('color', '#999'); $inputText.html('==' + dfop.placeholder + '=='); $self.trigger("change"); } }; $.fn.lrselect = function (op) { var dfop = { // 请选择 placeholder: "请选择", // 类型 type: 'default',// default,tree,treemultiple,gird,multiple // 字段 value: "id", text: "text", title: "title", // 展开最大高度 maxHeight: 200, // 宽度 width: false, // 是否允许搜索 allowSearch: false, // 访问数据接口地址 url: false, data: false, // 访问数据接口参数 param: null, // 接口请求的方法 method: "GET", //选择事件 select: false, isload: false, // 数据是否加载完成 isrender: false// 选项是否渲染完成 }; $.extend(dfop, op || {}); var $self = $(this); if ($self.length == 0) { return $self; } dfop.id = $self.attr('id'); if (!dfop.id) { return false; } if (!!$self[0]._lrselect) { return $self; } $self[0]._lrselect = { dfop: dfop }; // 基础信息渲染 $.lrselect.bindEvent($self); // 数据获取方式有三种:url,data,html // url优先级最高 if (!!dfop.url) { zou.httpAsync(dfop.method, dfop.url, dfop.param, function (data) { $self[0]._lrselect.dfop.data = data || []; $self[0]._lrselect.dfop.backdata = data || []; dfop.isload = true; }); } else if (!!dfop.data) { dfop.isload = true; dfop.backdata = dfop.data; } else {// 最后是html方式获取(只适合数据比较少的情况) $.lrselect.htmlToData($self); dfop.isload = true; dfop.backdata = dfop.data; } $.lrselect.initRender(dfop, $self); return $self; }; $.fn.lrselectRefresh = function (op) { var $self = $(this); if ($self.length == 0) { return $self; } if (!$self[0]._lrselect) { return false; } var dfop = $self[0]._lrselect.dfop; if (!dfop) { return false; } $.extend(dfop, op || {}); dfop.isload = false; dfop.isrender = false; if (!!dfop.url) { zou.httpAsync(dfop.method, dfop.url, dfop.param, function (data) { $self[0]._lrselect.dfop.data = data || []; $self[0]._lrselect.dfop.backdata = data || []; dfop.isload = true; }); } else if (!!dfop.data) { dfop.isload = true; dfop.backdata = dfop.data; } $.lrselect.defaultValue($self); if (dfop._setValue != null && dfop._setValue != undefined) { $self.lrselectSet(dfop._setValue); } } $.fn.lrselectGet = function () { var $this = $(this); if ($this.length == 0) { return $this; } var dfop = $this[0]._lrselect.dfop; var value = ''; switch (dfop.type) { case 'default': if (!!dfop.data[dfop._index]) { value = dfop.data[dfop._index][dfop.value]; } break; case 'tree': if (!!dfop.currtentItem) { value = dfop.currtentItem[dfop.value]; } break; case 'treemultiple': if (!!dfop.currtentItems) { for (var i = 0, l = dfop.currtentItems.length; i < l; i++) { if (value != "") { value += ","; } value += dfop.currtentItems[i][dfop.value]; } } break; case 'gird': break; case 'multiple': dfop.multipleValue = dfop.multipleValue || []; return String(dfop.multipleValue); break; default: break; } return value; }; $.fn.lrselectSet = function (value) { // 设置数据的值 var $this = $(this); if ($this.length == 0) { return $this; } value = value + ''; if (value == '' || value == undefined || value == null) { $.lrselect.defaultValue($this); return $this; } var dfop = $this[0]._lrselect.dfop; dfop._setValue = null; if (!dfop) { return $this; } function _fn(dfop) { if (dfop.isload == false) { setTimeout(function () { _fn(dfop); }, 100); } else if (dfop.isload == true) { var _currtentItem; switch (dfop.type) { case 'default': for (var i = 0, l = dfop.data.length; i < l; i++) { if (dfop.data[i][dfop.value] == value) { dfop._index = i; _currtentItem = dfop.data[i]; break; } } break; case 'tree': _currtentItem = $.lrtree.findItem(dfop.data, dfop.value, value); dfop.currtentItem = _currtentItem; break; case 'treemultiple': $.lrselect.render(dfop); $this.find('.z-select-option-content').lrtreeSet('setCheck', value.split(',')); return false; break; case 'gird': break; case 'multiple': dfop.multipleMapValue = {}; dfop.multipleValue = []; dfop.multipleText = []; if (dfop.isrender) { $this.find('.z-select-node-cb[src$="checkbox_1.png"]').attr('src', '/Content/images/zoutree/checkbox_0.png'); } var _valuellist = value.split(','); for (var i = 0, l = dfop.data.length; i < l; i++) { var _arrayIndex = $.inArray(dfop.data[i][dfop.value], _valuellist); if (_arrayIndex != -1) { dfop.multipleMapValue[i] = _arrayIndex; dfop.multipleValue.push(dfop.data[i][dfop.value]); dfop.multipleText.push(dfop.data[i][dfop.text]); if (dfop.isrender) { $this.find('[data-value="' + i + '"] .z-select-node-cb').attr('src', '/Content/images/zoutree/checkbox_1.png'); } if (!!dfop.select) { dfop.select(dfop.data[i], true, $this); } } } if (dfop.multipleText.length > 0) { _currtentItem = dfop.multipleText; } break; default: break; } if (!!_currtentItem) { if (dfop.type == 'multiple') { var $inputText = $this.find('.z-select-placeholder'); if (dfop.multipleText.length > 0) { $inputText.css('color', '#000'); } else { $inputText.css('color', '#999'); } $inputText.html(String(dfop.multipleText)); $this.trigger("change"); } else { var $inputText = $this.find('.z-select-placeholder'); $inputText.html(_currtentItem[dfop.text]); $inputText.css('color', '#000'); $this.trigger("change"); if (!!dfop.select) { dfop.select(_currtentItem); } } } else { dfop._setValue = value; } } } _fn(dfop); return $this; }; })(jQuery, top.zou);