123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- /**
- * 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 = $('<div></div>');
- $.yvan.fillCommonProperties($window, dialogOptions);
- $window.attr('xtype', 'dialog');
- $window.attr('id', param.dialogId);
- var $power = $('<div></div>');
- $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);
|