/** * power * @author luoyifan * 2018-11-30 22:45:00 */ (function ($) { "use strict"; $.extend($.yvan, { showDialog: function ($sender, param) { //克隆参数 if ($.type(param) === 'string') { param = {dialogId: param}; } if (!param.hasOwnProperty('dialogId')) { console.error('请指定 showDialog.dialogId'); return; } $sender = $($sender); //对话框渲染位置 var $target = $sender.closest('.bizWindow'); //沿路线上找对话框的定义 var $power = $sender; var dialogOptions; while (true) { $power = $power.up('power'); if ($power.length <= 0) { break; } if (!$power.data('power').hasOwnProperty('options')) { $power = $power.parent(); continue; } var options = $power.data('power').options; if (options.hasOwnProperty('dialogs') && options.dialogs.hasOwnProperty(param.dialogId)) { dialogOptions = options.dialogs[param.dialogId]; break; } else { $power = $power.parent(); continue; } } //填充缺省参数,并复制 dialogOptions dialogOptions = $.extend(true, {}, $.fn.power.dialogs.defaults, dialogOptions, param); //解决底部按钮,需要 onBeforeRender 进行按需加载的问题 if ($.type(dialogOptions.buttons) === 'array') { for (var i = dialogOptions.buttons.length - 1; i >= 0; i--) { var b = dialogOptions.buttons[i]; if ($.type(b.onBeforeRender) === 'function') { if (b.onBeforeRender.call(dialogOptions) === false) { dialogOptions.buttons.splice(i, 1); } } } } //dialog 内容是函数,则调用函数,并获取结果 if ($.type(dialogOptions) === 'function') { dialogOptions = dialogOptions.call(this, param); } //对话框定义中没有 center 的定义 if (!dialogOptions.hasOwnProperty('center')) { console.error('dialog ' + param.dialogId + ' not exists!'); return; } if (dialogOptions.hasOwnProperty('$target')) { $target = dialogOptions.$target; } //记录旧的 focus 控件 var oldFocus = document.activeElement; //target 下面构建一个 window , window 下构建一个 power var $window = $('
'); $.yvan.fillCommonProperties($window, dialogOptions); $window.attr('xtype', 'dialog'); $window.attr('id', param.dialogId); var $power = $(''); $window.append($power); $target.append($window); $power.progress(); $window.power('processToolbar', { $target: $window, item: dialogOptions, context: param }); $window.power('processFooter', { $target: $window, item: dialogOptions, context: param }); $window.dialog($.extend({}, dialogOptions, { onOpen: function () { //计算窗口位置 var $w = $(this).parent(); var iframeWidth = $w.parent().width(); var iframeHeight = $w.parent().height(); var windowWidth = $w.width(); var windowHeight = $w.height(); var setWidth = (iframeWidth - windowWidth) / 2; var setHeight = (iframeHeight - windowHeight) / 2; if (iframeHeight < windowHeight || setHeight < 0) { setHeight = 0; } if (iframeWidth < windowWidth || setWidth < 0) { setWidth = 0; } $w.css({left: setWidth, top: setHeight}); //注册快捷键,存放焦点 if (window.hasOwnProperty('shortcut')) { shortcut.createContainer($power, dialogOptions); shortcut.registe($power, 'esc', function () { $window.window('close'); }); } //不能随意改变focus,searchbox 的 widgetTmpValue 会被无理由触发 //setTimeout(function () { // $power[0].focus(); //}, 10); $power.power($.yvan.props(dialogOptions, ['north', 'center', 'west', 'east', 'south']), dialogOptions); if (dialogOptions.onOpen) { return dialogOptions.onOpen.apply(this, arguments); } $power.progress('close'); }, onClose: function () { if (dialogOptions.onClose) { var ss = dialogOptions.onClose.apply(this, arguments); //删除元素,否则有多个 $("#" + param.dialogId).remove(); return ss; } $power.remove(); $window.window('destroy'); //还原旧焦点 if (oldFocus) { setTimeout(function () { oldFocus.focus(); }, 10); } $("#" + param.dialogId).remove(); }, onMove: function (left, top) { //防止越界 var $w = $(this); if (left < 0) { $w.window("move", {left: 0}); } if (top < 0) { $w.window("move", {top: 0}); } if (dialogOptions.onMove) { return dialogOptions.onMove.apply(this, arguments); } } })); //实时拖动 $window.window('window').draggable({ onStartDrag: function () { }, onDrag: function (e) { $window.window('move', { left: e.data.left, top: e.data.top }); }, onStopDrag: function (e) { $window.window('move', { left: e.data.left, top: e.data.top }); } }); return $window; } }); })(jQuery);