/*! * B-JUI v1.2 (http://b-jui.com) * Git@OSC (http://git.oschina.net/xknaan/B-JUI) * Copyright 2014 K'naan (xknaan@163.com). * Licensed under Apache (http://www.apache.org/licenses/LICENSE-2.0) */ /* ======================================================================== * B-JUI: bjui-lookup.js v1.2 * @author K'naan (xknaan@163.com) * -- Modified from dwz.database.js (author:ZhangHuihua@msn.com) * http://git.oschina.net/xknaan/B-JUI/blob/master/BJUI/js/bjui-lookup.js * ======================================================================== * Copyright 2014 K'naan. * Licensed under Apache (http://www.apache.org/licenses/LICENSE-2.0) * ======================================================================== */ +function ($) { 'use strict'; // LOOKUP GLOBAL ELEMENTS // ====================== var group, suffix, $currentLookup // LOOKUP CLASS DEFINITION // ====================== var Lookup = function(element, options) { this.$element = $(element) this.options = options this.$lookBtn = null } Lookup.DEFAULTS = { url : null, id : null, mask : true, width : 600, height : 400, title : 'Lookup', maxable : true, resizable : true } Lookup.EVENTS = { afterChange : 'afterchange.bjui.lookup' } Lookup.prototype.init = function() { var that = this, options = this.options, tools = this.tools if (!options.url) { BJUI.debug('Lookup Plugin: Error trying open a lookup dialog, url is undefined!') return false } else { options.url = decodeURI(options.url).replacePlh(that.$element.closest('.unitBox')) if (!options.url.isFinishedTm()) { that.$element.alertmsg('error', (options.warn || FRAG.alertPlhMsg.replace('#plhmsg#', BJUI.regional.plhmsg))) BJUI.debug('Lookup Plugin: The lookup\'s url is incorrect, url:'+ options.url) return false } options.url = encodeURI(options.url) } group = this.options.group || null suffix = this.options.suffix || null $currentLookup = this.$element if (suffix) suffix = suffix.trim() this.open(that.$element) } Lookup.prototype.addBtn = function() { var that = this, $element = that.$element if (!this.$lookBtn && !$element.parent().hasClass('wrap_bjui_btn_box')) { this.$lookBtn = $(FRAG.lookupBtn) this.$element.css({'paddingRight':'15px'}).wrap('') var $box = this.$element.parent() var height = this.$element.addClass('form-control').innerHeight() $box.css({'position':'relative', 'display':'inline-block'}) $.each(that.options, function(key, val) { if (key != 'toggle') that.$lookBtn.data(key, val) }) this.$lookBtn.css({'height':height, 'lineHeight':height +'px'}).appendTo($box) this.$lookBtn.on('selectstart', function() { return false }) } } Lookup.prototype.open = function($obj) { var that = this, options = this.options $obj.dialog({id:options.id || 'lookup_dialog', url:options.url, title:options.title, width:options.width, height:options.height, mask:options.mask, maxable:options.maxable, resizable:options.resizable}) } Lookup.prototype.getField = function(key) { return (group ? (group +'.') : '') + (key) + (suffix ? suffix : '') } Lookup.prototype.setSingle = function(args,type) { if (typeof args == 'string') args = new Function('return '+ args)() this.setVal(args,type) } Lookup.prototype.setMult = function(id,type) { var args = {} var $unitBox = this.$element.closest('.unitBox') $unitBox.find('[name="'+ id +'"]').filter(':checked').each(function() { var _args = new Function('return '+ $(this).val())() for (var key in _args) { var value = args[key] ? args[key] +',' : '' args[key] = value + _args[key] } }) if ($.isEmptyObject(args)) { this.$element.alertmsg('error', this.$element.data('warn') || FRAG.alertSelectMsg) return } this.setVal(args,type) } Lookup.prototype.setVal = function(args, type) { var that = this var $box = $currentLookup.closest('.unitBox') var newValue /* @description 增加 @author 小策一喋 */ // for datagrid if ($currentLookup.data('customEvent')) { $currentLookup.trigger('customEvent.bjui.lookup', [args]) } else { $box.find(':input').each(function() { var $input = $(this), inputName = $input.attr('name') for (var key in args) { var name = that.getField(key) if (name == inputName) { /* @description 增加 追加参数 @author 小策一喋 */ if(type == 1) newValue = $input.val() ? $input.val() + ',' + args[key] : args[key] else newValue = args[key] $input .val(newValue) /* @description 修改 args[key] 为 newValue @author 小策一喋 */ .trigger(Lookup.EVENTS.afterChange, {value:args[key]}) break } } }) } this.$element.dialog('closeCurrent') } // LOOKUP PLUGIN DEFINITION // ======================= function Plugin(option) { var args = arguments var property = option return this.each(function () { var $this = $(this) var options = $.extend({}, Lookup.DEFAULTS, $this.data(), typeof option == 'object' && option) var data = $this.data('bjui.lookup') if (!data) { $this.data('bjui.lookup', (data = new Lookup(this, options))) } else if ($this.data('newurl')) { data.options.url = $this.data('newurl') $this.data('bjui.dialog', null) } if (typeof property == 'string' && $.isFunction(data[property])) { [].shift.apply(args) if (!args) data[property]() else data[property].apply(data, args) } else { data.init() } }) } var old = $.fn.lookup $.fn.lookup = Plugin $.fn.lookup.Constructor = Lookup // LOOKUP NO CONFLICT // ================= $.fn.lookup.noConflict = function () { $.fn.lookup = old return this } // LOOKUP DATA-API // ============== $(document).on(BJUI.eventType.initUI, function(e) { var $this = $(e.target).find('[data-toggle="lookup"]') if (!$this.length) return Plugin.call($this, 'addBtn') }) $(document).on('click.bjui.lookup.data-api', '[data-toggle="lookupbtn"]', function(e) { var $this = $(this) if ($this.attr('href') && !$this.data('url')) $this.attr('data-url', $this.attr('href')) if (!$this.data('title')) $this.attr('data-title', $this.text()) Plugin.call($this) e.preventDefault() }) $(document).on('click.bjui.lookupback.data-api', '[data-toggle="lookupback"]', function(e) { var $this = $(this) var args = $this.data('args') var mult = $this.data('lookupid') var type = $('input[name="lookupType"]:checked').val() /* @description 新增 获取是否追加框值 @author 小策一喋 */ if (args) Plugin.call($this, 'setSingle', args, type) /* @description 修改 增加type参数 @author 小策一喋 */ else if (mult) Plugin.call($this, 'setMult', mult, type) /* @description 修改 增加type参数 @author 小策一喋 */ e.preventDefault() }) }(jQuery);