'use strict'; var surl = ''; var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } /** * name: formSelects * 基于Layui Select多选 * version: 4.0.0.0910 * http://sun.faysunshine.com/layui/formSelects-v4/dist/formSelects-v4.js */ (function (layui, window, factory) { if ((typeof exports === 'undefined' ? 'undefined' : _typeof(exports)) === 'object') { // 支持 CommonJS module.exports = factory(); } else if (typeof define === 'function' && define.amd) { // 支持 AMD define(factory); } else if (window.layui && layui.define) { //layui加载 layui.define(['jquery'], function (exports) { exports('formSelects', factory()); }); } else { window.formSelects = factory(); } })(typeof layui == 'undefined' ? null : layui, window, function () { var v = '4.0.0.0910', NAME = 'xm-select', PNAME = 'xm-select-parent', INPUT = 'xm-select-input', TDIV = 'xm-select--suffix', THIS = 'xm-select-this', LABEL = 'xm-select-label', SEARCH = 'xm-select-search', SEARCH_TYPE = 'xm-select-search-type', CALL = 'xm-select-callback', CALLPARAM = 'xm-select-callback-param', SHOW_COUNT = 'xm-select-show-count', CREATE = 'xm-select-create', CREATE_LONG = 'xm-select-create-long', MAX = 'xm-select-max', SKIN = 'xm-select-skin', DIRECTION = "xm-select-direction", HEIGHT = 'xm-select-height', DISABLED = 'xm-dis-disabled', DIS = 'xm-select-dis', TEMP = 'xm-select-temp', RADIO = 'xm-select-radio', LINKAGE = 'xm-select-linkage', DL = 'xm-select-dl', DD_HIDE = 'xm-select-hide', HIDE_INPUT = 'xm-hide-input', SANJIAO = 'xm-select-sj', ICON_CLOSE = 'xm-icon-close', FORM_TITLE = 'xm-select-title', FORM_SELECT = 'xm-form-select', FORM_SELECTED = 'xm-form-selected', FORM_NONE = 'xm-select-none', FORM_EMPTY = 'xm-select-empty', FORM_INPUT = 'xm-input', FORM_DL_INPUT = 'xm-dl-input', FORM_SELECT_TIPS = 'xm-select-tips', FORM_SELECT_PH = 'xm-select-placeholder', CHECKBOX_YES = 'xm-iconfont', FORM_TEAM_PID = 'XM_PID_VALUE', CZ = 'xm-cz', CZ_GROUP = 'xm-cz-group', TIPS = '请选择', data = {}, events = { on: {}, endOn: {}, filter: {}, maxTips: {}, opened: {}, closed: {} }, ajax = { type: 'get', header: {}, first: true, data: {}, searchUrl: '', searchName: 'keyword', searchVal: null, keyName: 'name', keyVal: 'value', keySel: 'selected', keyDis: 'disabled', keyChildren: 'children', dataType: '', delay: 500, beforeSuccess: null, success: null, error: null, beforeSearch: null, response: { statusCode: 0, statusName: 'code', msgName: 'msg', dataName: 'data' }, tree: { nextClick: function nextClick(id, item, callback) { callback([]); }, folderChoose: true, lazy: true } }, quickBtns = [{ icon: 'xm-iconfont icon-quanxuan', name: '全选', click: function click(id, cm) { cm.selectAll(id, true, true); } }, { icon: 'xm-iconfont icon-qingkong', name: '清空', click: function click(id, cm) { cm.removeAll(id, true, true); } }, { icon: 'xm-iconfont icon-fanxuan', name: '反选', click: function click(id, cm) { cm.reverse(id, true, true); } }, { icon: 'xm-iconfont icon-pifu', name: '换肤', click: function click(id, cm) { cm.skin(id); } }], $ = window.$ || window.layui && window.layui.jquery, $win = $(window), ajaxs = {}, fsConfig = {}, fsConfigs = {}, FormSelects = function FormSelects(options) { var _this = this; this.config = { name: null, //xm-select="xxx" max: null, maxTips: function maxTips(id, vals, val, max) { var ipt = $('[xid="' + _this.config.name + '"]').prev().find('.' + NAME); if (ipt.parents('.layui-form-item[pane]').length) { ipt = ipt.parents('.layui-form-item[pane]'); } ipt.attr('style', 'border-color: red !important'); setTimeout(function () { ipt.removeAttr('style'); }, 300); }, init: null, //初始化的选择值, on: null, //select值发生变化 opened: null, closed: null, filter: function filter(id, inputVal, val, isDisabled) { return val.name.indexOf(inputVal) == -1; }, clearid: -1, direction: 'auto', height: null, isEmpty: false, btns: [quickBtns[0], quickBtns[1], quickBtns[2]], searchType: 0, create: function create(id, name) { return Date.now(); }, template: function template(id, item) { return item.name; }, showCount: 0, isCreate: false, placeholder: TIPS, clearInput: false }; this.select = null; this.values = []; $.extend(true, this.config, options, { searchUrl: options.isSearch ? options.searchUrl : null, placeholder: options.placeholder ? TIPS + options.placeholder : TIPS, btns: options.radio ? [quickBtns[1]] : [quickBtns[0], quickBtns[1], quickBtns[2]] }, fsConfigs[options.name] || fsConfig); this.config.searchUrl = options.searchUrl; if (isNaN(this.config.showCount) || this.config.showCount <= 0) { this.config.showCount = 19921012; } }; //一些简单的处理方法 var Common = function Common() { this.appender(); this.on(); this.onreset(); }; Common.prototype.appender = function () { //针对IE做的一些拓展 //拓展Array map方法 if (!Array.prototype.map) { Array.prototype.map = function (i, h) { var b, a, c, e = Object(this), f = e.length >>> 0;if (h) { b = h; }a = new Array(f);c = 0;while (c < f) { var d, g;if (c in e) { d = e[c];g = i.call(b, d, c, e);a[c] = g; }c++; }return a; }; }; //拓展Array foreach方法 if (!Array.prototype.forEach) { Array.prototype.forEach = function forEach(g, b) { var d, c;if (this == null) { throw new TypeError("this is null or not defined"); }var f = Object(this);var a = f.length >>> 0;if (typeof g !== "function") { throw new TypeError(g + " is not a function"); }if (arguments.length > 1) { d = b; }c = 0;while (c < a) { var e;if (c in f) { e = f[c];g.call(d, e, c, f); }c++; } }; }; //拓展Array filter方法 if (!Array.prototype.filter) { Array.prototype.filter = function (b) { if (this === void 0 || this === null) { throw new TypeError(); }var f = Object(this);var a = f.length >>> 0;if (typeof b !== "function") { throw new TypeError(); }var e = [];var d = arguments[1];for (var c = 0; c < a; c++) { if (c in f) { var g = f[c];if (b.call(d, g, c, f)) { e.push(g); } } }return e; }; }; }; Common.prototype.init = function (target) { var _this2 = this; //初始化页面上已有的select $(target ? target : 'select[' + NAME + ']').each(function (index, select) { var othis = $(select), id = othis.attr(NAME), hasLayuiRender = othis.next('.layui-form-select'), hasRender = othis.next('.' + PNAME), options = { name: id, disabled: select.disabled, max: othis.attr(MAX) - 0, isSearch: othis.attr(SEARCH) != undefined, searchUrl: othis.attr(SEARCH), callback: othis.attr(CALL), callbackParam: othis.attr(CALLPARAM), isCreate: othis.attr(CREATE) != undefined, radio: othis.attr(RADIO) != undefined, skin: othis.attr(SKIN), direction: othis.attr(DIRECTION), optionsFirst: select.options[0], placeholder: othis.attr(FORM_SELECT_PH), height: othis.attr(HEIGHT), formname: othis.attr('name') || othis.attr('_name'), layverify: othis.attr('lay-verify') || othis.attr('_lay-verify'), layverType: othis.attr('lay-verType'), searchType: othis.attr(SEARCH_TYPE) == 'dl' ? 1 : 0, showCount: othis.attr(SHOW_COUNT) - 0 }, value = othis.find('option[selected]').toArray().map(function (option) { //获取已选中的数据 return { name: option.innerHTML, value: option.value }; }), fs = new FormSelects(options); fs.values = value; if (fs.config.init) { fs.values = fs.config.init.map(function (item) { if ((typeof item === 'undefined' ? 'undefined' : _typeof(item)) == 'object') { return item; } return { name: othis.find('option[value="' + item + '"]').text(), value: item }; }).filter(function (item) { return item.name; }); fs.config.init = fs.values.concat([]); } else { fs.config.init = value.concat([]); } !fs.values && (fs.values = []); data[id] = fs; surl = fs.config.searchUrl; //先取消layui对select的渲染 hasLayuiRender[0] && hasLayuiRender.remove(); hasRender[0] && hasRender.remove(); //构造渲染div var dinfo = _this2.renderSelect(id, fs.config.placeholder, select); var heightStyle = !fs.config.height || fs.config.height == 'auto' ? '' : 'xm-hg style="height: 34px;"'; var inputHtml = ['
', '', '
']; var reElem = $('
\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t' + inputHtml.join('') + '\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t
' + dinfo + '
\n\t\t\t\t
'); var $parent = $('
'); $parent.append(reElem); othis.after($parent); othis.attr('lay-ignore', ''); othis.removeAttr('name') && othis.attr('_name', fs.config.formname); othis.removeAttr('lay-verify') && othis.attr('_lay-verify', fs.config.layverify); //如果可搜索, 加上事件 if (fs.config.isSearch) { ajaxs[id] = $.extend({}, ajax, { searchUrl: fs.config.searchUrl }, ajaxs[id]); ajaxs[id].searchUrl = fs.config.searchUrl; ajaxs[id].callback = fs.config.callback; ajaxs[id].callbackParam = fs.config.callbackParam; $(document).on('input', 'div.' + PNAME + '[FS_ID="' + id + '"] .' + INPUT, function (e) { _this2.search(id, e, fs.config.searchUrl); }); if (fs.config.searchUrl) { //触发第一次请求事件 _this2.triggerSearch(reElem, true); } } else { //隐藏第二个dl reElem.find('dl dd.' + FORM_DL_INPUT).css('display', 'none'); } }); }; Common.prototype.search = function (id, e, searchUrl, call) { var _this3 = this; var input = void 0; if (call) { input = call; } else { input = e.target; var keyCode = e.keyCode; if (keyCode === 9 || keyCode === 13 || keyCode === 37 || keyCode === 38 || keyCode === 39 || keyCode === 40) { return false; } } var inputValue = $.trim(input.value); //过滤一下tips this.changePlaceHolder($(input)); var ajaxConfig = ajaxs[id] ? ajaxs[id] : ajax; searchUrl = ajaxConfig.searchUrl || searchUrl; var fs = data[id], isCreate = fs.config.isCreate, reElem = $('dl[xid="' + id + '"]').parents('.' + FORM_SELECT); //如果开启了远程搜索 if (searchUrl) { if (ajaxConfig.searchVal) { inputValue = ajaxConfig.searchVal; ajaxConfig.searchVal = ''; } if (!ajaxConfig.beforeSearch || ajaxConfig.beforeSearch && ajaxConfig.beforeSearch instanceof Function && ajaxConfig.beforeSearch(id, searchUrl, inputValue)) { var delay = ajaxConfig.delay; if (ajaxConfig.first) { ajaxConfig.first = false; delay = 10; } clearTimeout(fs.clearid); fs.clearid = setTimeout(function () { //reElem.find('dl > *:not(.' + FORM_SELECT_TIPS + ')').remove(); //reElem.find('dd.' + FORM_NONE).addClass(FORM_EMPTY).text('请求中'); _this3.ajax(id, searchUrl, inputValue, false, null, true); }, delay); } } else { reElem.find('dl .' + DD_HIDE).removeClass(DD_HIDE); //遍历选项, 选择可以显示的值 reElem.find('dl dd:not(.' + FORM_SELECT_TIPS + ')').each(function (idx, item) { var _item = $(item); var searchFun = events.filter[id] || data[id].config.filter; if (searchFun && searchFun(id, inputValue, _this3.getItem(id, _item), _item.hasClass(DISABLED)) == true) { _item.addClass(DD_HIDE); } }); //控制分组名称 reElem.find('dl dt').each(function (index, item) { if (!$(item).nextUntil('dt', ':not(.' + DD_HIDE + ')').length) { $(item).addClass(DD_HIDE); } }); //动态创建 this.create(id, isCreate, inputValue); var shows = reElem.find('dl dd:not(.' + FORM_SELECT_TIPS + '):not(.' + DD_HIDE + ')'); if (!shows.length) { reElem.find('dd.' + FORM_NONE).addClass(FORM_EMPTY).text('无匹配项'); } else { reElem.find('dd.' + FORM_NONE).removeClass(FORM_EMPTY); } } }; Common.prototype.isArray = function (obj) { return Object.prototype.toString.call(obj) == "[object Array]"; }; Common.prototype.triggerSearch = function (div, isCall) { var _this4 = this; (div ? [div] : $('.' + FORM_SELECT).toArray()).forEach(function (reElem, index) { reElem = $(reElem); var id = reElem.find('dl').attr('xid'); if (id && data[id] && data[id].config.isEmpty || isCall) { _this4.search(id, null, null, data[id].config.searchType == 0 ? reElem.find('.' + LABEL + ' .' + INPUT) : reElem.find('dl .' + FORM_DL_INPUT + ' .' + INPUT)); } }); }; Common.prototype.clearInput = function (id) { var div = $('.' + PNAME + '[fs_id="' + id + '"]'); var input = data[id].config.searchType == 0 ? div.find('.' + LABEL + ' .' + INPUT) : div.find('dl .' + FORM_DL_INPUT + ' .' + INPUT); input.val(''); }; Common.prototype.ajax = function (id, searchUrl, inputValue, isLinkage, linkageWidth, isSearch, successCallback, isReplace) { var _this5 = this; var reElem = $('.' + PNAME + ' dl[xid="' + id + '"]').parents('.' + FORM_SELECT); if (!reElem[0] || !searchUrl) { return; } var ajaxConfig = ajaxs[id] ? ajaxs[id] : ajax; var ajaxData = $.extend(true, {}, ajaxConfig.data); ajaxData[ajaxConfig.searchName] = inputValue; if (searchUrl.indexOf('{') != -1) { var start = searchUrl.split('{'); var end = start[1].split('}'); searchUrl = start[0] + end[1]; if (end[0].indexOf(',')) { var param = end[0].split(','); } else { var param = []; param[0] = end[0]; } for (var i in param) { if (typeof(param[i]) == 'string') { var e = $('#update_'+param[i]); if (e.length > 1) { e.each(function() { if ($(this).get(0).checked) { ajaxData[param[i]] = $(this).val(); } }) } else { ajaxData[param[i]] = e.val(); } } } } //是否需要对ajax添加随机时间 //ajaxData['_'] = Date.now(); $.ajax({ type: ajaxConfig.type, headers: ajaxConfig.header, url: searchUrl, data: ajaxConfig.dataType == 'json' ? JSON.stringify(ajaxData) : ajaxData, success: function success(res) { if (typeof res == 'string') { res = JSON.parse(res); } ajaxConfig.beforeSuccess && ajaxConfig.beforeSuccess instanceof Function && (res = ajaxConfig.beforeSuccess(id, searchUrl, inputValue, res)); if (_this5.isArray(res)) { var newRes = {}; newRes[ajaxConfig.response.statusName] = ajaxConfig.response.statusCode; newRes[ajaxConfig.response.msgName] = ""; newRes[ajaxConfig.response.dataName] = res; res = newRes; } if (res[ajaxConfig.response.statusName] != ajaxConfig.response.statusCode) { reElem.find('dd.' + FORM_NONE).removeClass(FORM_EMPTY); _this5.renderData(id, [], isLinkage, linkageWidth, isSearch, isReplace); data[id].config.isEmpty = true; } else { reElem.find('dd.' + FORM_NONE).removeClass(FORM_EMPTY); _this5.renderData(id, res[ajaxConfig.response.dataName], isLinkage, linkageWidth, isSearch, isReplace); data[id].config.isEmpty = res[ajaxConfig.response.dataName].length == 0; } successCallback && successCallback(id); ajaxConfig.success && ajaxConfig.success instanceof Function && ajaxConfig.success(id, searchUrl, inputValue, res); }, error: function error(err) { reElem.find('dd[lay-value]:not(.' + FORM_SELECT_TIPS + ')').remove(); reElem.find('dd.' + FORM_NONE).addClass(FORM_EMPTY).text('服务异常'); ajaxConfig.error && ajaxConfig.error instanceof Function && ajaxConfig.error(id, searchUrl, inputValue, err); } }); }; Common.prototype.renderData = function (id, dataArr, linkage, linkageWidth, isSearch, isReplace) { var _this6 = this; if (linkage) { //渲染多级联动 this.renderLinkage(id, dataArr, linkageWidth); return; } if (isReplace) { this.renderReplace(id, dataArr); return; } var reElem = $('.' + PNAME + ' dl[xid="' + id + '"]').parents('.' + FORM_SELECT); var ajaxConfig = ajaxs[id] ? ajaxs[id] : ajax; var pcInput = reElem.find('.' + TDIV + ' input'); dataArr = this.exchangeData(id, dataArr); var values = []; reElem.find('dl').html(this.renderSelect(id, pcInput.attr('placeholder') || pcInput.attr('back'), dataArr.map(function (item) { var itemVal = $.extend({}, item, { innerHTML: item[ajaxConfig.keyName], value: item[ajaxConfig.keyVal], sel: item[ajaxConfig.keySel], disabled: item[ajaxConfig.keyDis], type: item.type, name: item[ajaxConfig.keyName] }); if (itemVal.sel) { values.push(itemVal); } return itemVal; }))); var label = reElem.find('.' + LABEL); var dl = reElem.find('dl[xid]'); if (isSearch) { //如果是远程搜索, 这里需要判重 var oldVal = data[id].values; oldVal.forEach(function (item, index) { dl.find('dd[lay-value="' + item.value + '"]').addClass(THIS); }); values.forEach(function (item, index) { if (_this6.indexOf(oldVal, item) == -1) { _this6.addLabel(id, label, item); dl.find('dd[lay-value="' + item.value + '"]').addClass(THIS); oldVal.push(item); } }); } else { values.forEach(function (item, index) { _this6.addLabel(id, label, item); dl.find('dd[lay-value="' + item.value + '"]').addClass(THIS); }); data[id].values = values; } this.commonHandler(id, label); }; Common.prototype.renderLinkage = function (id, dataArr, linkageWidth) { var result = [], index = 0, temp = { "0": dataArr }, ajaxConfig = ajaxs[id] ? ajaxs[id] : ajax; db[id] = {}; var _loop = function _loop() { var group = result[index++] = [], _temp = temp; temp = {}; $.each(_temp, function (pid, arr) { $.each(arr, function (idx, item) { var val = { pid: pid, name: item[ajaxConfig.keyName], value: item[ajaxConfig.keyVal] }; db[id][val.value] = $.extend(item, val); group.push(val); var children = item[ajaxConfig.keyChildren]; if (children && children.length) { temp[val.value] = children; } }); }); }; do { _loop(); } while (Object.getOwnPropertyNames(temp).length); var reElem = $('.' + PNAME + ' dl[xid="' + id + '"]').parents('.' + FORM_SELECT); var html = ['
']; $.each(result, function (idx, arr) { var groupDiv = ['
']; $.each(arr, function (idx2, item) { var span = '
  • ' + item.name + '
  • '; groupDiv.push(span); }); groupDiv.push('
    '); html = html.concat(groupDiv); }); html.push('
    '); html.push('
    '); reElem.find('dl').html(html.join('')); reElem.find('.' + INPUT).css('display', 'none'); //联动暂时不支持搜索 }; Common.prototype.renderReplace = function (id, dataArr) { var _this7 = this; var dl = $('.' + PNAME + ' dl[xid="' + id + '"]'); var ajaxConfig = ajaxs[id] ? ajaxs[id] : ajax; dataArr = this.exchangeData(id, dataArr); db[id] = dataArr; var html = dataArr.map(function (item) { var itemVal = $.extend({}, item, { innerHTML: item[ajaxConfig.keyName], value: item[ajaxConfig.keyVal], sel: item[ajaxConfig.keySel], disabled: item[ajaxConfig.keyDis], type: item.type, name: item[ajaxConfig.keyName] }); return _this7.createDD(id, itemVal); }).join(''); dl.find('dd:not(.' + FORM_SELECT_TIPS + '),dt:not([style])').remove(); dl.find('dt[style]').after($(html)); }; Common.prototype.exchangeData = function (id, arr) { //这里处理树形结构 var ajaxConfig = ajaxs[id] ? ajaxs[id] : ajax; var childrenName = ajaxConfig['keyChildren']; var disabledName = ajaxConfig['keyDis']; db[id] = {}; var result = this.getChildrenList(arr, childrenName, disabledName, [], false); return result; }; Common.prototype.getChildrenList = function (arr, childrenName, disabledName, pid, disabled) { var result = [], offset = 0; for (var a = 0; a < arr.length; a++) { var item = arr[a]; if (item.type && item.type == 'optgroup') { result.push(item); continue; } else { offset++; } var parentIds = pid.concat([]); parentIds.push(offset - 1 + '_E'); item[FORM_TEAM_PID] = JSON.stringify(parentIds); item[disabledName] = item[disabledName] || disabled; result.push(item); var child = item[childrenName]; if (child && common.isArray(child) && child.length) { item['XM_TREE_FOLDER'] = true; var pidArr = parentIds.concat([]); var childResult = this.getChildrenList(child, childrenName, disabledName, pidArr, item[disabledName]); result = result.concat(childResult); } } return result; }; Common.prototype.create = function (id, isCreate, inputValue) { if (isCreate && inputValue) { var fs = data[id], dl = $('[xid="' + id + '"]'), tips = dl.find('dd.' + FORM_SELECT_TIPS + '.' + FORM_DL_INPUT), tdd = null, temp = dl.find('dd.' + TEMP); dl.find('dd:not(.' + FORM_SELECT_TIPS + '):not(.' + TEMP + ')').each(function (index, item) { if (inputValue == $(item).find('span').attr('name')) { tdd = item; } }); if (!tdd) { //如果不存在, 则创建 var val = fs.config.create(id, inputValue); if (temp[0]) { temp.attr('lay-value', val); temp.find('span').text(inputValue); temp.find('span').attr("name", inputValue); temp.removeClass(DD_HIDE); } else { tips.after($(this.createDD(id, { name: inputValue, innerHTML: inputValue, value: val }, TEMP + ' ' + CREATE_LONG))); } } } else { $('[xid=' + id + '] dd.' + TEMP).remove(); } }; Common.prototype.createDD = function (id, item, clz) { var ajaxConfig = ajaxs[id] ? ajaxs[id] : ajax; var name = $.trim(item.innerHTML); db[id][item.value] = $(item).is('option') ? item = function () { var resultItem = {}; resultItem[ajaxConfig.keyName] = name; resultItem[ajaxConfig.keyVal] = item.value; resultItem[ajaxConfig.keyDis] = item.disabled; return resultItem; }() : item; var template = data[id].config.template(id, item); var pid = item[FORM_TEAM_PID]; pid ? pid = JSON.parse(pid) : pid = [-1]; var attr = pid[0] == -1 ? '' : 'tree-id="' + pid.join('-') + '" tree-folder="' + !!item['XM_TREE_FOLDER'] + '"'; return '
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t\t' + template + '\n\t\t\t\t\t
    \n\t\t\t\t
    '; }; Common.prototype.createQuickBtn = function (obj, right) { return '
    ' + obj.name + '
    '; }; Common.prototype.renderBtns = function (id, show, right) { var _this8 = this; var quickBtn = []; var dl = $('dl[xid="' + id + '"]'); quickBtn.push('
    '); $.each(data[id].config.btns, function (index, item) { quickBtn.push(_this8.createQuickBtn(item, right)); }); quickBtn.push('
    '); quickBtn.push(this.createQuickBtn({ icon: 'xm-iconfont icon-caidan', name: '' })); return quickBtn.join(''); }; Common.prototype.renderSelect = function (id, tips, select) { var _this9 = this; db[id] = {}; var arr = []; if (data[id].config.btns.length) { setTimeout(function () { var dl = $('dl[xid="' + id + '"]'); dl.parents('.' + FORM_SELECT).attr(SEARCH_TYPE, data[id].config.searchType); dl.find('.' + CZ_GROUP).css('max-width', dl.prev().width() - 54 + 'px'); }, 10); arr.push(['', '
    ', '', '', '
    '].join('')); } else { arr.push('
    ' + tips + '
    '); } if (this.isArray(select)) { $(select).each(function (index, item) { if (item) { if (item.type && item.type === 'optgroup') { arr.push('
    ' + item.name + '
    '); } else { arr.push(_this9.createDD(id, item)); } } }); } else { $(select).find('*').each(function (index, item) { if (item.tagName.toLowerCase() == 'option' && index == 0 && !item.value) { return; } if (item.tagName.toLowerCase() === 'optgroup') { arr.push('
    ' + item.label + '
    '); } else { arr.push(_this9.createDD(id, item)); } }); } arr.push('
    '); arr.push('
    \u6CA1\u6709\u9009\u9879
    '); return arr.join(''); }; Common.prototype.on = function () { var _this10 = this; //事件绑定 this.one(); $(document).on('click', function (e) { if (!$(e.target).parents('.' + FORM_TITLE)[0]) { //清空input中的值 $('.' + PNAME + ' dl .' + DD_HIDE).removeClass(DD_HIDE); $('.' + PNAME + ' dl dd.' + FORM_EMPTY).removeClass(FORM_EMPTY); $('.' + PNAME + ' dl dd.' + TEMP).remove(); $.each(data, function (key, fs) { _this10.clearInput(key); if (!fs.values.length) { _this10.changePlaceHolder($('div[FS_ID="' + key + '"] .' + LABEL)); } }); } $('.' + PNAME + ' .' + FORM_SELECTED).each(function (index, item) { _this10.changeShow($(item).find('.' + FORM_TITLE), false); }); }); }; Common.prototype.calcLabelLeft = function (label, w, call) { var pos = this.getPosition(label[0]); pos.y = pos.x + label[0].clientWidth; var left = label[0].offsetLeft; if (!label.find('span').length) { left = 0; } else if (call) { //校正归位 var span = label.find('span:last'); span.css('display') == 'none' ? span = span.prev()[0] : span = span[0]; var spos = this.getPosition(span); spos.y = spos.x + span.clientWidth; if (spos.y > pos.y) { left = left - (spos.y - pos.y) - 5; } else { left = 0; } } else { if (w < 0) { var _span = label.find(':last'); _span.css('display') == 'none' ? _span = _span.prev()[0] : _span = _span[0]; var _spos = this.getPosition(_span); _spos.y = _spos.x + _span.clientWidth; if (_spos.y > pos.y) { left -= 10; } } else { if (left < 0) { left += 10; } if (left > 0) { left = 0; } } } label.css('left', left + 'px'); }; Common.prototype.one = function (target) { var _this11 = this; //一次性事件绑定 $(target ? target : document).off('click', '.' + FORM_TITLE).on('click', '.' + FORM_TITLE, function (e) { var othis = $(e.target), title = othis.is(FORM_TITLE) ? othis : othis.parents('.' + FORM_TITLE), dl = title.next(), id = dl.attr('xid'); //清空非本select的input val $('dl[xid]').not(dl).each(function (index, item) { _this11.clearInput($(item).attr('xid')); }); $('dl[xid]').not(dl).find('dd.' + DD_HIDE).removeClass(DD_HIDE); //如果是disabled select if (title.hasClass(DIS)) { return false; } //如果点击的是右边的三角或者只读的input if (othis.is('.' + SANJIAO) || othis.is('.' + INPUT + '[readonly]')) { _this11.changeShow(title, !title.parents('.' + FORM_SELECT).hasClass(FORM_SELECTED)); return false; } //如果点击的是input的右边, focus一下 if (title.find('.' + INPUT + ':not(readonly)')[0]) { var input = title.find('.' + INPUT), epos = { x: e.pageX, y: e.pageY }, pos = _this11.getPosition(title[0]), width = title.width(); while (epos.x > pos.x) { if ($(document.elementFromPoint(epos.x, epos.y)).is(input)) { input.focus(); _this11.changeShow(title, true); return false; } epos.x -= 50; } } //如果点击的是可搜索的input if (othis.is('.' + INPUT)) { _this11.changeShow(title, true); return false; } //如果点击的是x按钮 if (othis.is('i[fsw="' + NAME + '"]')) { var val = _this11.getItem(id, othis), dd = dl.find('dd[lay-value=\'' + val.value + '\']'); if (dd.hasClass(DISABLED)) { //如果是disabled状态, 不可选, 不可删 return false; } _this11.handlerLabel(id, dd, false, val); return false; } _this11.changeShow(title, !title.parents('.' + FORM_SELECT).hasClass(FORM_SELECTED)); return false; }); $(target ? target : document).off('click', 'dl.' + DL).on('click', 'dl.' + DL, function (e) { var othis = $(e.target); if (othis.is('.' + LINKAGE) || othis.parents('.' + LINKAGE)[0]) { //linkage的处理 othis = othis.is('li') ? othis : othis.parents('li[xm-value]'); var _group = othis.parents('.xm-select-linkage-group'), _id = othis.parents('dl').attr('xid'); if (!_id) { return false; } //激活li _group.find('.xm-select-active').removeClass('xm-select-active'); othis.addClass('xm-select-active'); //激活下一个group, 激活前显示对应数据 _group.nextAll('.xm-select-linkage-group').addClass('xm-select-linkage-hide'); var nextGroup = _group.next('.xm-select-linkage-group'); nextGroup.find('li').addClass('xm-select-linkage-hide'); nextGroup.find('li[pid="' + othis.attr('xm-value') + '"]').removeClass('xm-select-linkage-hide'); //如果没有下一个group, 或没有对应的值 if (!nextGroup[0] || nextGroup.find('li:not(.xm-select-linkage-hide)').length == 0) { var vals = [], index = 0, isAdd = !othis.hasClass('xm-select-this'); if (data[_id].config.radio) { othis.parents('.xm-select-linkage').find('.xm-select-this').removeClass('xm-select-this'); } do { vals[index++] = { name: othis.find('span').text(), value: othis.attr('xm-value') }; othis = othis.parents('.xm-select-linkage-group').prev().find('li[xm-value="' + othis.attr('pid') + '"]'); } while (othis.length); vals.reverse(); var val = { name: vals.map(function (item) { return item.name; }).join('/'), value: vals.map(function (item) { return item.value; }).join('/') }; _this11.handlerLabel(_id, null, isAdd, val); } else { nextGroup.removeClass('xm-select-linkage-hide'); } return false; } if (othis.is('dl')) { return false; } if (othis.is('dt')) { othis.nextUntil('dt').each(function (index, item) { item = $(item); if (item.hasClass(DISABLED) || item.hasClass(THIS)) {} else { item.find('i:not(.icon-expand)').click(); } }); return false; } var dd = othis.is('dd') ? othis : othis.parents('dd'); var id = dd.parent('dl').attr('xid'); if (dd.hasClass(DISABLED)) { //被禁用选项的处理 return false; } //菜单功效 if (othis.is('i.icon-caidan')) { var opens = [], closes = []; othis.parents('dl').find('dd[tree-folder="true"]').each(function (index, item) { $(item).attr('xm-tree-hidn') == undefined ? opens.push(item) : closes.push(item); }); var arr = closes.length ? closes : opens; arr.forEach(function (item) { return item.click(); }); return false; } //树状结构的选择 var treeId = dd.attr('tree-id'); if (treeId) { //忽略右边的图标 if (othis.is('i:not(.icon-expand)')) { _this11.handlerLabel(id, dd, !dd.hasClass(THIS)); return false; } var ajaxConfig = ajaxs[id] || ajax; var treeConfig = ajaxConfig.tree; var childrens = dd.nextAll('dd[tree-id^="' + treeId + '"]'); if (childrens && childrens.length) { var len = childrens[0].clientHeight; len ? (_this11.addTreeHeight(dd, len), len = 0) : (len = dd.attr('xm-tree-hidn') || 36, dd.removeAttr('xm-tree-hidn'), dd.find('>i').remove(), childrens = childrens.filter(function (index, item) { return $(item).attr('tree-id').split('-').length - 1 == treeId.split('-').length; })); childrens.animate({ height: len }, 150); return false; } else { if (treeConfig.nextClick && treeConfig.nextClick instanceof Function) { treeConfig.nextClick(id, _this11.getItem(id, dd), function (res) { if (!res || !res.length) { _this11.handlerLabel(id, dd, !dd.hasClass(THIS)); } else { dd.attr('tree-folder', 'true'); var ddChilds = []; res.forEach(function (item, idx) { item.innerHTML = item[ajaxConfig.keyName]; item[FORM_TEAM_PID] = JSON.stringify(treeId.split('-').concat([idx])); ddChilds.push(_this11.createDD(id, item)); db[id][item[ajaxConfig.keyVal]] = item; }); dd.after(ddChilds.join('')); } }); return false; } } } if (dd.hasClass(FORM_SELECT_TIPS)) { //tips的处理 var btn = othis.is('.' + CZ) ? othis : othis.parents('.' + CZ); if (!btn[0]) { return false; } var method = btn.attr('method'); var obj = data[id].config.btns.filter(function (bean) { return bean.name == method; })[0]; obj && obj.click && obj.click instanceof Function && obj.click(id, _this11); return false; } _this11.handlerLabel(id, dd, !dd.hasClass(THIS)); return false; }); }; Common.prototype.addTreeHeight = function (dd, len) { var _this12 = this; var treeId = dd.attr('tree-id'); var childrens = dd.nextAll('dd[tree-id^="' + treeId + '"]'); if (childrens.length) { dd.append(''); dd.attr('xm-tree-hidn', len); childrens.each(function (index, item) { var that = $(item); _this12.addTreeHeight(that, len); }); } }; var db = {}; Common.prototype.getItem = function (id, value) { if (value instanceof $) { if (value.is('i[fsw="' + NAME + '"]')) { var span = value.parent(); return db[id][value] || { name: span.find('font').text(), value: span.attr('value') }; } var val = value.attr('lay-value'); return !db[id][val] ? db[id][val] = { name: value.find('span[name]').attr('name'), value: val } : db[id][val]; } else if (typeof value == 'string' && value.indexOf('/') != -1) { return db[id][value] || { name: this.valToName(id, value), value: value }; } return db[id][value]; }; Common.prototype.linkageAdd = function (id, val) { var dl = $('dl[xid="' + id + '"]'); dl.find('.xm-select-active').removeClass('xm-select-active'); var vs = val.value.split('/'); var pid = void 0, li = void 0, index = 0; var lis = []; do { pid = vs[index]; li = dl.find('.xm-select-linkage-group' + (index + 1) + ' li[xm-value="' + pid + '"]'); li[0] && lis.push(li); index++; } while (li.length && pid != undefined); if (lis.length == vs.length) { $.each(lis, function (idx, item) { item.addClass('xm-select-this'); }); } }; Common.prototype.linkageDel = function (id, val) { var dl = $('dl[xid="' + id + '"]'); var vs = val.value.split('/'); var pid = void 0, li = void 0, index = vs.length - 1; do { pid = vs[index]; li = dl.find('.xm-select-linkage-group' + (index + 1) + ' li[xm-value="' + pid + '"]'); if (!li.parent().next().find('li[pid=' + pid + '].xm-select-this').length) { li.removeClass('xm-select-this'); } index--; } while (li.length && pid != undefined); }; Common.prototype.valToName = function (id, val) { var dl = $('dl[xid="' + id + '"]'); var vs = (val + "").split('/'); if (!vs.length) { return null; } var names = []; $.each(vs, function (idx, item) { var name = dl.find('.xm-select-linkage-group' + (idx + 1) + ' li[xm-value="' + item + '"] span').text(); names.push(name); }); return names.length == vs.length ? names.join('/') : null; }; Common.prototype.commonHandler = function (key, label) { if (!label || !label[0]) { return; } this.checkHideSpan(key, label); //计算input的提示语 this.changePlaceHolder(label); //计算高度 this.retop(label.parents('.' + FORM_SELECT)); this.calcLabelLeft(label, 0, true); //表单默认值 this.setHidnVal(key, label); //title值 label.parents('.' + FORM_TITLE + ' .' + NAME).attr('title', data[key].values.map(function (val) { return val.name; }).join(',')); }; Common.prototype.initVal = function (id) { var _this13 = this; var target = {}; if (id) { target[id] = data[id]; } else { target = data; } $.each(target, function (key, val) { var values = val.values, div = $('dl[xid="' + key + '"]').parent(), label = div.find('.' + LABEL), dl = div.find('dl'); dl.find('dd.' + THIS).removeClass(THIS); var _vals = values.concat([]); _vals.concat([]).forEach(function (item, index) { _this13.addLabel(key, label, item); dl.find('dd[lay-value="' + item.value + '"]').addClass(THIS); }); if (val.config.radio) { _vals.length && values.push(_vals[_vals.length - 1]); } _this13.commonHandler(key, label); }); }; Common.prototype.setHidnVal = function (key, label) { if (!label || !label[0]) { return; } label.parents('.' + PNAME).find('.' + HIDE_INPUT).val(data[key].values.map(function (val) { return val.value; }).join(',')); }; Common.prototype.handlerLabel = function (id, dd, isAdd, oval, notOn) { var div = $('[xid="' + id + '"]').prev().find('.' + LABEL), val = dd && this.getItem(id, dd), vals = data[id].values, on = data[id].config.on || events.on[id], endOn = data[id].config.endOn || events.endOn[id]; if (oval) { val = oval; } var fs = data[id]; if (isAdd && fs.config.max && fs.values.length >= fs.config.max) { var maxTipsFun = events.maxTips[id] || data[id].config.maxTips; maxTipsFun && maxTipsFun(id, vals.concat([]), val, fs.config.max); return; } if (!notOn) { if (on && on instanceof Function && on(id, vals.concat([]), val, isAdd, dd && dd.hasClass(DISABLED)) == false) { return; } } var dl = $('dl[xid="' + id + '"]'); isAdd ? (dd && dd[0] ? (dd.addClass(THIS), dd.removeClass(TEMP)) : dl.find('.xm-select-linkage')[0] && this.linkageAdd(id, val), this.addLabel(id, div, val), vals.push(val)) : (dd && dd[0] ? dd.removeClass(THIS) : dl.find('.xm-select-linkage')[0] && this.linkageDel(id, val), this.delLabel(id, div, val), this.remove(vals, val)); if (!div[0]) return; //单选选完后直接关闭选择域 if (fs.config.radio) { this.changeShow(div, false); } //移除表单验证的红色边框 div.parents('.' + FORM_TITLE).prev().removeClass('layui-form-danger'); //清空搜索值 fs.config.clearInput && this.clearInput(id); this.commonHandler(id, div); var ajaxConfig = ajaxs[id] ? ajaxs[id] : ajax; if (ajaxConfig.callback) { $('#' + id).attr('v', val.id); var param = eval('(' + ajaxConfig.callbackParam + ')'); if (param['col']) { if (param['col'].indexOf(',') != -1) { var temp = param['col'].split(','); for (var i in temp) { if (val[temp[i]]) { param[temp[i]] = val[temp[i]]; } } } else if (val[param['col']]) { param[param['col']] = val[param['col']]; } } loading($('#' + id), param, 1); } !notOn && endOn && endOn instanceof Function && endOn(id, vals.concat([]), val, isAdd, dd && dd.hasClass(DISABLED)); }; Common.prototype.addLabel = function (id, div, val) { if (!val) return; var tips = 'fsw="' + NAME + '"'; var _ref = [$('' + val.name + ''), $('')], $label = _ref[0], $close = _ref[1]; $label.append($close); //如果是radio模式 var fs = data[id]; if (fs.config.radio) { fs.values.length = 0; $('dl[xid="' + id + '"]').find('dd.' + THIS + ':not([lay-value="' + val.value + '"])').removeClass(THIS); div.find('span').remove(); } //如果是固定高度 div.find('input').css('width', '50px'); div.find('input').before($label); }; Common.prototype.delLabel = function (id, div, val) { if (!val) return; div.find('span[value="' + val.value + '"]:first').remove(); }; Common.prototype.checkHideSpan = function (id, div) { var parentHeight = div.parents('.' + NAME)[0].offsetHeight + 5; div.find('span.xm-span-hide').removeClass('xm-span-hide'); div.find('span[style]').remove(); var count = data[id].config.showCount; div.find('span').each(function (index, item) { if (index >= count) { $(item).addClass('xm-span-hide'); } }); var prefix = div.find('span:eq(' + count + ')'); prefix[0] && prefix.before($(' + ' + (div.find('span').length - count) + '')); }; Common.prototype.retop = function (div) { //计算dl显示的位置 var dl = div.find('dl'), top = div.offset().top + div.outerHeight() + 5 - $win.scrollTop(), dlHeight = dl.outerHeight(); var up = div.hasClass('layui-form-selectup') || dl.css('top').indexOf('-') != -1 || top + dlHeight > $win.height() && top >= dlHeight; div = div.find('.' + NAME); var fs = data[dl.attr('xid')]; var base = dl.parents('.layui-form-pane')[0] && dl.prev()[0].clientHeight > 38 ? 14 : 10; if (fs && fs.config.direction == 'up' || up) { up = true; if (fs && fs.config.direction == 'down') { up = false; } } var reHeight = div[0].offsetTop + div.height() + base; if (up) { dl.css({ top: 'auto', bottom: reHeight + 3 + 'px' }); } else { dl.css({ top: reHeight + 'px', bottom: 'auto' }); } }; Common.prototype.changeShow = function (children, isShow) { //显示于隐藏 $('.layui-form-selected').removeClass('layui-form-selected'); var top = children.parents('.' + FORM_SELECT), realShow = top.hasClass(FORM_SELECTED), id = top.find('dl').attr('xid'); $('.' + PNAME + ' .' + FORM_SELECT).not(top).removeClass(FORM_SELECTED); if (isShow) { this.retop(top); top.addClass(FORM_SELECTED); top.find('.' + INPUT).focus(); var searchUrl = surl; if (searchUrl.indexOf('{') != -1) { this.triggerSearch(top, true); } if (!top.find('dl dd[lay-value]:not(.' + FORM_SELECT_TIPS + ')').length) { top.find('dl .' + FORM_NONE).addClass(FORM_EMPTY); } } else { top.removeClass(FORM_SELECTED); this.clearInput(id); top.find('dl .' + FORM_EMPTY).removeClass(FORM_EMPTY); top.find('dl dd.' + DD_HIDE).removeClass(DD_HIDE); top.find('dl dd.' + TEMP).remove(); //计算ajax数据是否为空, 然后重新请求数据 if (id && data[id] && data[id].config.isEmpty) { this.triggerSearch(top); } this.changePlaceHolder(top.find('.' + LABEL)); } if (isShow != realShow) { var openFun = data[id].config.opened || events.opened[id]; isShow && openFun && openFun instanceof Function && openFun(id); var closeFun = data[id].config.closed || events.closed[id]; !isShow && closeFun && closeFun instanceof Function && closeFun(id); } }; Common.prototype.changePlaceHolder = function (div) { //显示于隐藏提示语 //调整pane模式下的高度 var title = div.parents('.' + FORM_TITLE); title[0] || (title = div.parents('dl').prev()); if (!title[0]) { return; } var id = div.parents('.' + PNAME).find('dl[xid]').attr('xid'); if (data[id] && data[id].config.height) {//既然固定高度了, 那就看着办吧 } else { var height = title.find('.' + NAME)[0].clientHeight; //title.css('height', (height > 36 ? height + 4 : height) + 'px'); //如果是layui pane模式, 处理label的高度 var label = title.parents('.' + PNAME).parent().prev(); if (label.is('.layui-form-label') && title.parents('.layui-form-pane')[0]) { height = height > 36 ? height + 4 : height; //title.css('height', height + 'px'); label.css({ height: height + 2 + 'px', lineHeight: height - 18 + 'px' }); } } var input = title.find('.' + TDIV + ' input'), isShow = !div.find('span:last')[0] && !title.find('.' + INPUT).val(); if (isShow) { var ph = input.attr('back'); input.removeAttr('back'); input.attr('placeholder', ph); } else { var _ph = input.attr('placeholder'); input.removeAttr('placeholder'); input.attr('back', _ph); } }; Common.prototype.indexOf = function (arr, val) { for (var i = 0; i < arr.length; i++) { if (arr[i].value == val || arr[i].value == (val ? val.value : val) || arr[i] == val || JSON.stringify(arr[i]) == JSON.stringify(val)) { return i; } } return -1; }; Common.prototype.remove = function (arr, val) { var idx = this.indexOf(arr, val ? val.value : val); if (idx > -1) { arr.splice(idx, 1); return true; } return false; }; Common.prototype.selectAll = function (id, isOn, skipDis) { var _this14 = this; var dl = $('[xid="' + id + '"]'); if (!dl[0]) { return; } if (dl.find('.xm-select-linkage')[0]) { return; } dl.find('dd[lay-value]:not(.' + FORM_SELECT_TIPS + '):not(.' + THIS + ')' + (skipDis ? ':not(.' + DISABLED + ')' : '')).each(function (index, item) { item = $(item); var val = _this14.getItem(id, item); _this14.handlerLabel(id, dl.find('dd[lay-value="' + val.value + '"]'), true, val, !isOn); }); }; Common.prototype.removeAll = function (id, isOn, skipDis) { var _this15 = this; var dl = $('[xid="' + id + '"]'); if (!dl[0]) { return; } if (dl.find('.xm-select-linkage')[0]) { //针对多级联动的处理 data[id].values.concat([]).forEach(function (item, idx) { var vs = item.value.split('/'); var pid = void 0, li = void 0, index = 0; do { pid = vs[index++]; li = dl.find('.xm-select-linkage-group' + index + ':not(.xm-select-linkage-hide) li[xm-value="' + pid + '"]'); li.click(); } while (li.length && pid != undefined); }); return; } data[id].values.concat([]).forEach(function (item, index) { if (skipDis && dl.find('dd[lay-value="' + item.value + '"]').hasClass(DISABLED)) {} else { _this15.handlerLabel(id, dl.find('dd[lay-value="' + item.value + '"]'), false, item, !isOn); } }); }; Common.prototype.reverse = function (id, isOn, skipDis) { var _this16 = this; var dl = $('[xid="' + id + '"]'); if (!dl[0]) { return; } if (dl.find('.xm-select-linkage')[0]) { return; } dl.find('dd[lay-value]:not(.' + FORM_SELECT_TIPS + ')' + (skipDis ? ':not(.' + DISABLED + ')' : '')).each(function (index, item) { item = $(item); var val = _this16.getItem(id, item); _this16.handlerLabel(id, dl.find('dd[lay-value="' + val.value + '"]'), !item.hasClass(THIS), val, !isOn); }); }; Common.prototype.skin = function (id) { var skins = ['default', 'primary', 'normal', 'warm', 'danger']; var skin = skins[Math.floor(Math.random() * skins.length)]; $('dl[xid="' + id + '"]').parents('.' + PNAME).find('.' + FORM_SELECT).attr('xm-select-skin', skin); this.check(id) && this.commonHandler(id, $('dl[xid="' + id + '"]').parents('.' + PNAME).find('.' + LABEL)); }; Common.prototype.getPosition = function (e) { var x = 0, y = 0; while (e != null) { x += e.offsetLeft; y += e.offsetTop; e = e.offsetParent; } return { x: x, y: y }; }; Common.prototype.onreset = function () { //监听reset按钮, 然后重置多选 $(document).on('click', '[type=reset]', function (e) { $(e.target).parents('form').find('.' + PNAME + ' dl[xid]').each(function (index, item) { var id = item.getAttribute('xid'), dl = $(item), dd = void 0, temp = {}; common.removeAll(id); data[id].config.init.forEach(function (val, idx) { if (val && (!temp[val] || data[id].config.repeat) && (dd = dl.find('dd[lay-value="' + val.value + '"]'))[0]) { common.handlerLabel(id, dd, true); temp[val] = 1; } }); }); }); }; Common.prototype.bindEvent = function (name, id, fun) { if (id && id instanceof Function) { fun = id; id = null; } if (fun && fun instanceof Function) { if (!id) { $.each(data, function (id, val) { data[id] ? data[id].config[name] = fun : events[name][id] = fun; }); } else { data[id] ? (data[id].config[name] = fun, delete events[name][id]) : events[name][id] = fun; } } }; Common.prototype.check = function (id, notAutoRender) { if ($('dl[xid="' + id + '"]').length) { return true; } else if ($('select[xm-select="' + id + '"]').length) { if (!notAutoRender) { this.render(id, $('select[xm-select="' + id + '"]')); return true; } } else { delete data[id]; return false; } }; Common.prototype.render = function (id, select) { common.init(select); common.one($('dl[xid="' + id + '"]').parents('.' + PNAME)); common.initVal(id); }; Common.prototype.log = function (obj) { console.log(obj); }; var Select4 = function Select4() { this.v = v; this.render(); }; var common = new Common(); Select4.prototype.value = function (id, type, isAppend) { if (typeof id != 'string') { return []; } var fs = data[id]; if (!common.check(id)) { return []; } if (typeof type == 'string' || type == undefined) { var arr = fs.values.concat([]) || []; if (type == 'val') { return arr.map(function (val) { return val.value; }); } if (type == 'valStr') { return arr.map(function (val) { return val.value; }).join(','); } if (type == 'name') { return arr.map(function (val) { return val.name; }); } if (type == 'nameStr') { return arr.map(function (val) { return val.name; }).join(','); } return arr; } if (common.isArray(type)) { var dl = $('[xid="' + id + '"]'), temp = {}, dd = void 0, isAdd = true; if (isAppend == false) { //删除传入的数组 isAdd = false; } else if (isAppend == true) { //追加模式 isAdd = true; } else { //删除原有的数据 common.removeAll(id); } if (isAdd) { fs.values.forEach(function (val, index) { temp[val.value] = 1; }); } type.forEach(function (val, index) { if (val && (!temp[val] || fs.config.repeat)) { if ((dd = dl.find('dd[lay-value="' + val + '"]'))[0]) { common.handlerLabel(id, dd, isAdd, null, true); temp[val] = 1; } else { var name = common.valToName(id, val); if (name) { common.handlerLabel(id, dd, isAdd, common.getItem(id, val), true); temp[val] = 1; } } } }); } }; Select4.prototype.on = function (id, fun, isEnd) { common.bindEvent(isEnd ? 'endOn' : 'on', id, fun); return this; }; Select4.prototype.filter = function (id, fun) { common.bindEvent('filter', id, fun); return this; }; Select4.prototype.maxTips = function (id, fun) { common.bindEvent('maxTips', id, fun); return this; }; Select4.prototype.opened = function (id, fun) { common.bindEvent('opened', id, fun); return this; }; Select4.prototype.closed = function (id, fun) { common.bindEvent('closed', id, fun); return this; }; Select4.prototype.config = function (id, config, isJson) { if (id && (typeof id === 'undefined' ? 'undefined' : _typeof(id)) == 'object') { isJson = config == true; config = id; id = null; } if (config && (typeof config === 'undefined' ? 'undefined' : _typeof(config)) == 'object') { if (isJson) { config.header || (config.header = {}); config.header['Content-Type'] = 'application/json; charset=UTF-8'; config.dataType = 'json'; } id ? (ajaxs[id] = $.extend(true, {}, ajaxs[id] || ajax, config), !common.check(id) && this.render(id), data[id] && config.direction && (data[id].config.direction = config.direction), data[id] && config.clearInput && (data[id].config.clearInput = true), config.searchUrl && data[id] && common.triggerSearch($('.' + PNAME + ' dl[xid="' + id + '"]').parents('.' + FORM_SELECT), true)) : ($.extend(true, ajax, config), $.each(ajaxs, function (key, item) { $.extend(true, item, config); })); } return this; }; Select4.prototype.render = function (id, options) { var _ref2; if (id && (typeof id === 'undefined' ? 'undefined' : _typeof(id)) == 'object') { options = id; id = null; } var config = options ? (_ref2 = { init: options.init, disabled: options.disabled, max: options.max, isSearch: options.isSearch, searchUrl: options.searchUrl, callback: options.callback, callbackParam: options.callbackParam, isCreate: options.isCreate, radio: options.radio, skin: options.skin, direction: options.direction, height: options.height, formname: options.formname, layverify: options.layverify, layverType: options.layverType, showCount: options.showCount, placeholder: options.placeholder, create: options.create, filter: options.filter, maxTips: options.maxTips, on: options.on }, _defineProperty(_ref2, 'on', options.on), _defineProperty(_ref2, 'opened', options.opened), _defineProperty(_ref2, 'closed', options.closed), _defineProperty(_ref2, 'template', options.template), _defineProperty(_ref2, 'clearInput', options.clearInput), _ref2) : {}; options && options.searchType != undefined && (config.searchType = options.searchType == 'dl' ? 1 : 0); if (id) { fsConfigs[id] = {}; $.extend(fsConfigs[id], data[id] ? data[id].config : {}, config); } else { $.extend(fsConfig, config); } ($('select[' + NAME + '="' + id + '"]')[0] ? $('select[' + NAME + '="' + id + '"]') : $('select[' + NAME + ']')).each(function (index, select) { var sid = select.getAttribute(NAME); common.render(sid, select); setTimeout(function () { return common.setHidnVal(sid, $('select[xm-select="' + sid + '"] + div.' + PNAME + ' .' + LABEL)); }, 10); }); return this; }; Select4.prototype.disabled = function (id) { var target = {}; id ? common.check(id) && (target[id] = data[id]) : target = data; $.each(target, function (key, val) { $('dl[xid="' + key + '"]').prev().addClass(DIS); }); return this; }; Select4.prototype.undisabled = function (id) { var target = {}; id ? common.check(id) && (target[id] = data[id]) : target = data; $.each(target, function (key, val) { $('dl[xid="' + key + '"]').prev().removeClass(DIS); }); return this; }; Select4.prototype.data = function (id, type, config) { if (!id || !type || !config) { common.log('id: ' + id + ' param error !!!'); return this; } if (!common.check(id)) { common.log('id: ' + id + ' not render !!!'); return this; } this.value(id, []); this.config(id, config); if (type == 'local') { common.renderData(id, config.arr, config.linkage == true, config.linkageWidth ? config.linkageWidth : '100'); } else if (type == 'server') { common.ajax(id, config.url, config.keyword, config.linkage == true, config.linkageWidth ? config.linkageWidth : '100'); } return this; }; Select4.prototype.btns = function (id, btns, config) { if (id && common.isArray(id)) { btns = id; id = null; } if (!btns || !common.isArray(btns)) { return this; }; var target = {}; id ? common.check(id) && (target[id] = data[id]) : target = data; btns = btns.map(function (obj) { if (typeof obj == 'string') { if (obj == 'select') { return quickBtns[0]; } if (obj == 'remove') { return quickBtns[1]; } if (obj == 'reverse') { return quickBtns[2]; } if (obj == 'skin') { return quickBtns[3]; } } return obj; }); $.each(target, function (key, val) { val.config.btns = btns; var dd = $('dl[xid="' + key + '"]').find('.' + FORM_SELECT_TIPS + ':first'); if (btns.length) { var show = config && config.show && (config.show == 'name' || config.show == 'icon') ? config.show : ''; var html = common.renderBtns(key, show, config && config.space ? config.space : '30px'); dd.html(html); } else { var pcInput = dd.parents('.' + FORM_SELECT).find('.' + TDIV + ' input'); var _html = pcInput.attr('placeholder') || pcInput.attr('back'); dd.html(_html); dd.removeAttr('style'); } }); return this; }; Select4.prototype.search = function (id, val) { if (id && common.check(id)) { ajaxs[id] = $.extend(true, {}, ajaxs[id] || ajax, { first: true, searchVal: val }); common.triggerSearch($('dl[xid="' + id + '"]').parents('.' + FORM_SELECT), true); } return this; }; Select4.prototype.replace = function (id, type, config) { var _this17 = this; if (!id || !type || !config) { common.log('id: ' + id + ' param error !!!'); return this; } if (!common.check(id, true)) { common.log('id: ' + id + ' not render !!!'); return this; } var oldVals = this.value(id, 'val'); this.value(id, []); this.config(id, config); if (type == 'local') { common.renderData(id, config.arr, config.linkage == true, config.linkageWidth ? config.linkageWidth : '100', false, true); this.value(id, oldVals, true); } else if (type == 'server') { common.ajax(id, config.url, config.keyword, config.linkage == true, config.linkageWidth ? config.linkageWidth : '100', false, function (id) { _this17.value(id, oldVals, true); }, true); } }; return new Select4(); });