123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- /**
- * 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);
|