/** * widget searchbox 查找框 * @author luoyifan * 2018-12-01 14:00:00 */ "use strict"; (function ($) { //默认 searchbox $.extend($.fn.searchbox.defaults, { prompt: '回车搜索', icons: [{ iconCls: 'icon-clear', handler: function (e) { var $me = $(e.data.target); $me.textbox('clear').textbox('textbox').focus(); if ($me.textbox('options').widget) { widget.clear(e); } } }], searcher: function () { var opts = $(this).searchbox('options'); var option = opts.dialog || opts.widget; if (option) { widget.show(option, this); } } }); })(jQuery); var widget = { show: function (option, sender) { var $sender = $(sender); var $power = $(sender).up('power'); $power.progress(); seajs.use([option.url], function (widgetWindowOption) { if ($.type(widgetWindowOption) === 'function') { widgetWindowOption = widgetWindowOption(); } $power.progress('close'); if ($.type(option.onBeforeShow) === 'function') { if (!option.onBeforeShow.call(this, sender,option, widgetWindowOption)) { return; } } //============ 展示出界面 var $dlg = $.yvan.showDialog(sender, widgetWindowOption); //============ 为二级弹出初始化查询数据 var onLoadData = option['onWidgetLoadData'] || option.bind; var data; if ($.type(onLoadData) === 'function') { data = onLoadData.call($sender, option); } else { var vs = onLoadData; var $grid = $sender.up('grid'); var row; if ($grid.length > 0) { //表格带回值 row = $grid.getEditRow(); } else { //窗体带回值 row = $sender.findForm().formGet(); } if ($.type(vs) === "string") { vs = [vs]; } 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.log('searchbox没有属性' + prop, row); continue; } data[vs[prop]] = row[prop]; } } } if (widgetWindowOption.hasOwnProperty('onWidgetLoadData')) { widgetWindowOption.onWidgetLoadData(sender, data); } //============ 二级窗确认事件 $dlg.data({ confirm: function (row) { var successOpt = option['success'] || option.bind; if (!successOpt) { //没有配置,只写自己 if ($sender.name && row.hasOwnProperty($sender.name)) { $sender.searchbox('setValue', row[$sender.name]); return true; } } if ($.type(successOpt) === "function") { //是函数,调函数 return successOpt.apply(this, arguments); } //字符串或数组,直接调用数组 if ($.type(successOpt) === "string") { successOpt = [successOpt]; } var obj = {}; if ($.type(successOpt) === 'array') { //数组,根据名字逐个写入 $.each(successOpt, function (index, name) { obj[name] = row[name]; }); } else if ($.type(successOpt) === 'object') { //对象,根据映射关系写入 var vs = successOpt; for (var prop in vs) { if (!vs.hasOwnProperty(prop)) continue; if (!row.hasOwnProperty(vs[prop])) { console.error('弹出框没有属性' + vs[prop], row); continue; } obj[prop] = row[vs[prop]]; } } var $grid = $sender.up('grid'); if ($grid.length > 0) { //表格内编辑 $grid.setEditRow(obj); } else { //窗体编辑 $sender.findForm().form('load', obj); } if ($.type(option['afterConfirm']) === 'function') { option['afterConfirm'](obj); } return true; } }); }); }, clear: function (e) { var $me = $(e.data.target); $me.textbox('clear').textbox('textbox').focus(); if (!$me.textbox('options').widget) return; var widget = $me.textbox('options').widget; var clear = widget.clear || widget.bind; if (typeof clear === "function") { widget.clear(); } if ($.type(clear) === "string") { clear = [clear]; } var obj = {}; var vs = clear; if ($.type(vs) === 'array') { //数组清空 $.each(vs, function (index, name) { obj[name] = ''; }); } else { //对象,按名字清空 for (var prop in vs) { if (!vs.hasOwnProperty(prop)) continue; obj[prop] = ''; } } var $grid = $me.up('grid'); if ($grid.length > 0) { //表格内编辑 $grid.setEditRow(obj); } else { //窗体编辑 $me.findForm().form('load', obj); } } };