(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);