/** * yvan.yvsearch.widget.js * @author luoyifan * 2019-07-14 22:23:00 */ 'use strict'; (function ($) { $.extend($.fn.yvsearch.methods, { open: function (jq, option, event) { var state = $.data(jq[0], 'yvsearch'); if (state.isOpened === true) { $.yvan.msg('请不要频繁操作'); return; } option = $.extend(state.options, option); option = option.widget; state.isOpened = true; var $grid, $dlg; var sender = jq[0]; var $sender = $(sender); var query = $sender.yvsearch('getQuery'); seajs.use([option.url], function (widgetWindowOption) { /** * ========== data:为二级弹出初始化查询数据 ============ */ { var onLoadData = option['onWidgetLoadData'] || option.bind; var data; if ($.type(onLoadData) === 'function') { //自定义 onLoadData data = onLoadData.call($sender, option); } else { var vs = onLoadData; var $parentGrid = $sender.up('yvgrid'); var row; if ($grid.length > 0) { //表格带回值 row = $parentGrid.yvgrid('getEditRow', sender); } data = {}; if ($.type(vs) === 'array') { //数组,直接读取 $.each(vs, function (index, name) { data[name] = row[name]; }); } else { //对象调用, 建立映射关系 for (var prop in vs) { if (!vs.hasOwnProperty(prop)) continue; if (!row.hasOwnProperty(prop)) { console.error('yvsearch 没有属性' + prop, row); continue; } data[vs[prop]] = row[prop]; } } } //数据准备好之后 if (widgetWindowOption.hasOwnProperty('onWidgetLoadData')) { widgetWindowOption.onWidgetLoadData(sender, data); } // widget 是方法, 直接调用该方法 // 获取到 xtype:widget 的窗口 if ($.type(widgetWindowOption) === 'function') { widgetWindowOption = widgetWindowOption($.extend(data, { sender: $sender, query: query })); } //如果调用前,onBeforeShow 返回 false,就取消打开窗口 if ($.type(option.onBeforeShow) === 'function') { if (!option.onBeforeShow.call(this, sender, option, widgetWindowOption)) { return; } } ; } /** * ========== 构建 dlgOption 展示界面 ============ */ var dlgId = $.yvan.createId('widgetDialog'); state.dlgId = dlgId; var dlgOpt = { xtype: 'dialog', dialogId: dlgId, title: widgetWindowOption.title || '匿名对话框', width: widgetWindowOption.width || 900, height: widgetWindowOption.height || 400, center: { items: $.extend(widgetWindowOption.grid, { xtype: 'yvgrid', toolbar: { xtype: 'toolbar', height: 40, items: [ { text: '确认', iconCls: 'fa fa-save', onClick: function () { //发出确认 var row = $grid.yvgrid('rowData'); if (row) { $sender.yvsearch('confirm', row); } } }, { text: '取消', iconCls: 'fa fa-times', onClick: function () { $dlg.window('close'); } }, { xtype: 'textbox', onRender: function () { var textbox = $(this).textbox('textbox'); setTimeout(function () { var state = $.data(sender, 'yvsearch'); state.isWidgetOpen = true; textbox.focus(); state.isWidgetOpen = false; }, 50); } } ] }, onRender: function () { //默认1秒后 grid 获取焦点 $grid = $(this); $grid.yvgrid('reload', { url: url }); }, onKeyDown: function (e) { if (e.keyCode === 13) { //如果按下回车键,就发出确认 var row = $grid.yvgrid('rowData'); if (row) { $sender.yvsearch('confirm', row); } return true; } }, onDblClickRow: function (rowid, iRow, iCol, e) { //双击表格的行,发出确认 var row = $grid.yvgrid('rowData', rowid); $sender.yvsearch('confirm', row); }, loadComplete: function () { if (!$grid) return; var data = $grid.yvgrid('getData'); if (data.length <= 0) { $.yvan.msg('没有符合要求的数据'); $dlg.window('close'); } else if (data.length === 1) { //唯一数据行 $sender.yvsearch('confirm', data[0]); } } }) }, onClose: function () { $sender.yvsearch('focus'); state.isOpened = false; } }; var url = dlgOpt.center.items.url; delete dlgOpt.center.items.url; $dlg = $.yvan.showDialog(sender, dlgOpt); });//use } }); })(jQuery);