/** * power * @author luoyifan * 2018-11-22 17:32:00 */ "use strict"; $.parser.auto = false; (function ($) { function processFooter($target, item, context) { if (!item.hasOwnProperty('footer')) { return; } if ($.type(item.footer) === 'array') { var $toolbar = $('
'); $target.append($toolbar); $toolbar = renderDispatch($toolbar, { xtype: 'toolbar', items: item.toolbar }, context); item.footer = $toolbar; return $toolbar; } if (($.type(item.footer) === 'object') || $.type(item.footer) === 'string') { if (!item.footer.id) { item.footer.id = $.yvan.createId(); } var $toolbar = renderDispatch($target, item.footer, context); item.footer = $toolbar; return $toolbar; } } function processToolbar($target, item, context) { if (!item.hasOwnProperty('toolbar')) { return; } if ($.type(item.toolbar) === 'array') { var $toolbar = $(''); $target.append($toolbar); $toolbar = renderDispatch($toolbar, { xtype: 'toolbar', items: item.toolbar }, context); item.toolbar = $toolbar; return $toolbar; } if ($.type(item.toolbar) === 'object') { if (!item.toolbar.id) { item.toolbar.id = $.yvan.createId(); } var $toolbar = renderDispatch($target, item.toolbar, context); item.toolbar = $toolbar; return $toolbar; } } function beforeRender($target, opts, context) { if ($.type(opts.onBeforeRender) === 'function') { var r = opts.onBeforeRender.apply(this, arguments); if (r === false) { return false; } } var funs = $.fn.power.defaults.beforeRender; for (var i = 0; i < funs.length; i++) { var fun = funs[i]; if ($.type(fun) === 'function') { var r = fun.call(this, $target, opts, context); if (r === false) { return false; } } } return true; } function afterRender($target, opts, context) { var funs = $.fn.power.defaults.afterRender; for (var i = 0; i < funs.length; i++) { var fun = funs[i]; if ($.type(fun) === 'function') { fun.apply(this, arguments); } } if ($.type(opts.onRender) === 'function') { opts.onRender.apply(this, arguments); } } function renderDispatch($target, item, context, parent) { if (!item) { return; } if ($.type(item) === 'array') { //元素是数组,用 row 隔开 var $row = $(''); $target.append($row); renderEach($row, item, context, parent); return; } if ($.type(item) === 'string') { //元素是字符串,直接输出html $target.append(item); return; } if ($.type(item) === 'function') { //item 是函数 var r = item.apply(this, context); renderDispatch($target, r, context); return; } // yvTreeGrid 专用方法 function resizeMe() { var $panel = $(this).parent(); var d = $panel.height() - 50; $target.css({ "height": d + 'px' }); } //if (item.importUrl) { // //带有url, 需要 ajax 获取配置内容 // var $dom = $(''); //带一个占位符 // $target.append($dom); // $.yvan.readyJs({ // url: item.importUrl, // success: function (data) { // var vv = eval(data); // var importBack = data.importUrl; // //扩展到当前属性 // data = $.extend({}, vv(), item); // if (importBack) { // //配置 ajax 结果中带有 importUrl 属性,需要继续 importUrl // data.importUrl = importBack; // } else { // delete data.importUrl; // } // renderDispatch($dom, data, context); // } // }); // return; //} item.xtype = item.xtype || 'textbox'; switch (item.xtype) { case 'textbox': case 'combobox': case 'searchbox': case 'datebox': case 'numberbox': case 'combotree': case 'combotreegrid': case 'combogrid': case 'datetimebox': case 'tagbox': case 'yvselect': case 'maskedbox': case 'passwordbox': case 'filebox': case 'numberspinner': if (beforeRender.call(this, $target, item, context) === false) { return; } var css = 'easyui-' + item.xtype; //宽度计算 if (!item.width) { item.span = item.span || 1; if (item.span === 1) { item.width = 280; } else if (item.span === 2) { item.width = 560; } else if (item.span === 3) { item.width = 840; } } //生成DOM var $dom = $(''); if(typeof(item.ff) === 'number'){ $dom.attr('ff', item.ff) } $.yvan.fillCommonProperties($dom, item); $target.append($('').append($dom)); if ($.inArray(item.xtype, ['textbox']) >= 0 && item.widget) { item.icons = [ { iconCls: 'icon-clear', handler: widget.clear }, { iconCls: 'icon-search', handler: function (e) { widget.show(item.widget, this); } }]; } if ($.inArray(item.xtype, ['textbox']) >= 0 && item.dialog) { item.icons = [ { iconCls: 'icon-clear', handler: widget.clear }, { iconCls: 'icon-search', handler: function (e) { var me = this; $.yvan.showDialog(me, item.dialog); } }]; } if (window.hasOwnProperty('shortcut')) { shortcut.processInput($dom, item, context); } if (parent) { //代入上级给的 subLabelWidth/subControlWidth if (parent.hasOwnProperty('subLabelWidth') && !item.hasOwnProperty('labelWidth')) { item.labelWidth = parent.subLabelWidth; } if (parent.hasOwnProperty('subControlWidth') && !item.hasOwnProperty('width')) { item.width = parent.subControlWidth; } } //初始化元素 $dom[item.xtype](item); if(item.labelWidth!=='auto' && item.labelWrap===true){ var labelDOM = $dom.prev(); if(labelDOM.is('label')){ labelDOM.css({ 'line-height': '16px', 'white-space': 'pre-wrap' }) } } if (item.xtype === 'searchbox') { $dom.searchbox('onSysRender'); } if (item.xtype === 'maskedbox') { var $c = $dom.maskedbox('textbox'); $c.css({ height: '30px', lineHeight: '30px' }); $c.parent().css({ height: '30px' }); } if (item.hasOwnProperty('maxlength') && $.type(item.maxlength) === 'number') { setTimeout(function () { if ($dom.data().hasOwnProperty('textbox')) { $dom.textbox('textbox').attr('maxlength', item.maxlength); } }); } if (window.hasOwnProperty('shortcut')) { shortcut.processInputAfter($dom, item, context); } if (item.readonly) { //只读框,为span 增加一个 tooltip 属性 var $span = $dom.next(); $span.tooltip({ position: 'bottom', onShow: function () { var value = $dom.val(); if (!value || $.trim(value).length <= 10) { $(this).tooltip('destroy'); } else { $(this).tooltip({ content: value }).tooltip('tip').css({ color: 'rgb(255, 255, 255)', 'background-color': 'rgb(255, 126, 0)' }); } } }); } if (item.xtype === 'combobox') { //combobox 点击后自动下拉 $dom.next().on('click', 'input', function () { if (!$dom.combobox('options').readonly) { $dom.combobox("showPanel"); } }); item.isFirstLoad = true; $dom.combobox({ onSelect: function (data) { if (item.onSelect && $.type(item.onSelect) === 'function') { item.onSelect(data); } setTimeout(function () { if (item.isFirstLoad && item.onValue && $.type(item.onValue) === 'function') { item.onValue(data); } item.isFirstLoad = false; }, 100); } }); $dom.combobox({ onChange: function (data, value) { if (item.onChange && $.type(item.onChange) === 'function') { item.onChange(data, value); } if (item.onValue && $.type(item.onValue) === 'function') { item.isFirstLoad = false; item.onValue(data, value); } } }); //.bind('focus', function () { // $dom.combobox("showPanel"); //}) //.bind('blur', function () { // $dom.combobox("hidePanel"); //}); } if (item.xtype === 'datebox') { //datebox 点击后自动下拉 $dom.textbox("textbox").bind('click', function () { if (!$dom.datebox('options').readonly) { $dom.datebox("showPanel"); } }); } if (item.xtype === 'datetimebox') { //datetimebox 点击后自动下拉 $dom.textbox("textbox").bind('click', function () { if (!$dom.datebox('options').readonly) { $dom.datebox("showPanel"); } }); } afterRender.call($dom[0], $target, item, context); return $dom; case 'offset': if (beforeRender.call(this, $target, item, context) === false) { return; } var $dom = $(''); $.yvan.fillCommonProperties($dom, item); $target.append($dom); if (parent) { //代入上级给的 subLabelWidth/subControlWidth if (parent.hasOwnProperty('subLabelWidth') && !item.hasOwnProperty('labelWidth')) { $dom.css({ width: parent.subLabelWidth }); } } afterRender.call($dom[0], $target, item, context); return $dom; case 'menu': var $dom = $(' '); $.yvan.fillCommonProperties($dom, item); var items = $.yvan.getItems(item); for (var i = 0; i < items.length; i++) { var $item = $(''); var $a = '' + items[i].text + ''; var $icon = ''; $item.append($a); $a.append($icon); $dom.append($item); } return $dom; case 'checkgroup': if (beforeRender.call(this, $target, item, context) === false) { return; } var $dom = $(''); $.yvan.fillCommonProperties($dom, item); $target.append($dom); $dom.checkgroup(item); afterRender.call($dom[0], $target, item, context); return $dom; case 'radiogroup': if (beforeRender.call(this, $target, item, context) === false) { return; } var $dom = $(''); $.yvan.fillCommonProperties($dom, item); $target.append($dom); $dom.radiogroup(item); afterRender.call($dom[0], $target, item, context); return $dom; case 'checkbox': if (beforeRender.call(this, $target, item, context) === false) { return; } var $dom = $(''); $.yvan.fillCommonProperties($dom, item); if (item.hasOwnProperty('name')) { $dom.attr('name', item.name); } if (item.hasOwnProperty('checked')) { $dom.attr('checked', item.checked); } if (item.hasOwnProperty('disable')) { $dom.attr('disable', item.disable); } if (item.hasOwnProperty('primary')) { $dom.attr('primary', item.primary); } $target.append($dom); $dom.checkbox(item); afterRender.call($dom[0], $target, item, context); return $dom; case 'radiobutton': if (beforeRender.call(this, $target, item, context) === false) { return; } var $dom = $(''); $.yvan.fillCommonProperties($dom, item); if (item.hasOwnProperty('name')) { $dom.attr('name', item.name); } if (item.hasOwnProperty('checked')) { $dom.attr('checked', item.checked); } if (item.hasOwnProperty('disable')) { $dom.attr('disable', item.disable); } $target.append($dom); $dom.radiobutton(item); afterRender.call($dom[0], $target, item, context); return $dom; case 'hidden': if (beforeRender.call(this, $target, item, context) === false) { return; } var $dom = $(''); $.yvan.fillCommonProperties($dom, item); $dom.data({ options: item }); if (item.hasOwnProperty('value')) { $dom.val(item.value); } $target.append($dom); afterRender.call($dom[0], $target, item, context); return $dom; case 'dialog': //对话框本身不增加任何DOM元素,但要在Power级别记录Options if (!context.options.hasOwnProperty('dialogs')) { context.options.dialogs = {}; } context.options.dialogs[item.dialogId] = item; break; case 'div': if (beforeRender.call(this, $target, item, context) === false) { return; } var $dom = $(''); $.yvan.fillCommonProperties($dom, item); $target.append($dom); renderEach($dom, $.yvan.getItems(item), context); afterRender.call($dom[0], $target, item, context); return $dom; case 'layout': if (beforeRender.call(this, $target, item, context) === false) { return; } //布局 var $dom = $(''); $.yvan.fillCommonProperties($dom, item); $target.append($dom); layoutRender($dom, item, context, item); afterRender.call($dom[0], $target, item, context); break; case 'panel': if (beforeRender.call(this, $target, item, context) === false) { return; } var $dom = $(''); $.yvan.fillCommonProperties($dom, item); $target.append($dom); $dom.panel($.extend({ border: false }, item)); afterRender.call($dom[0], $target, item, context); return $dom; case 'group': if (beforeRender.call(this, $target, item, context) === false) { return; } //表单分组 var $dom = $(''); $.yvan.fillCommonProperties($dom, item); var $group = $(''); $dom.append($group); if (item.title) { $group.append($('')); } $target.append($dom); renderEach($group, $.yvan.getItems(item), context, item); afterRender.call($dom[0], $target, item, context); return $dom; case 'form': if (beforeRender.call(this, $target, item, context) === false) { return; } var $dom = $(''); if ($.trim(item.name)) { $dom.attr('name', item.name); } $.yvan.fillCommonProperties($dom, item); $target.append($dom); //枚举下级所有元素 renderEach($dom, $.yvan.getItems(item), context, item); afterRender.call($dom[0], $target, item, context); return $dom; case 'formgroup': if (beforeRender.call(this, $target, item, context) === false) { return; } var $dom = $(''); $.yvan.fillCommonProperties($dom, item); if ($.trim(item.name)) { $dom.attr('name', item.name); } var $group = $(''); $dom.append($group); if (item.title) { $group.append($('')); } $target.append($dom); renderEach($group, $.yvan.getItems(item), context, item); afterRender.call($dom[0], $target, item, context); return $dom; case 'toolbar': if (beforeRender.call(this, $target, item, context) === false) { return; } var $dom = $(''); $.yvan.fillCommonProperties($dom, item); $target.append($dom); $dom.toolbar(item, context); afterRender.call($dom[0], $target, item, context); return $dom; case 'grid': if (!$.jgrid || !$.jgrid.yvanui) { return; } if (beforeRender.call(this, $target, item, context) === false) { return; } var $dom = $.jgrid.createDom($target, item, context); afterRender.call($dom[0], $target, item, context); return $dom; case 'egrid': if (beforeRender.call(this, $target, item, context) === false) { return; } var $dom = $('