yvanui.widget2.js 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. /**
  2. * widget searchbox 查找框
  3. * @author luoyifan
  4. * 2018-12-01 14:00:00
  5. */
  6. "use strict";
  7. (function ($) {
  8. //默认 searchbox
  9. $.extend($.fn.searchbox.defaults, {
  10. prompt: '回车搜索',
  11. icons: [{
  12. iconCls: 'icon-clear',
  13. handler: function (e) {
  14. var $me = $(e.data.target);
  15. $me.textbox('clear').textbox('textbox').focus();
  16. if ($me.textbox('options').widget) {
  17. widget.clear(e);
  18. }
  19. }
  20. }],
  21. searcher: function () {
  22. var opts = $(this).searchbox('options');
  23. var option = opts.dialog || opts.widget;
  24. if (option) {
  25. widget.show(option, this);
  26. }
  27. }
  28. });
  29. })(jQuery);
  30. var widget = {
  31. show: function (option, sender) {
  32. var $sender = $(sender);
  33. var $power = $(sender).up('power');
  34. $power.progress();
  35. seajs.use([option.url], function (widgetWindowOption) {
  36. if ($.type(widgetWindowOption) === 'function') {
  37. widgetWindowOption = widgetWindowOption();
  38. }
  39. $power.progress('close');
  40. if ($.type(option.onBeforeShow) === 'function') {
  41. if (!option.onBeforeShow.call(this, sender,option, widgetWindowOption)) {
  42. return;
  43. }
  44. }
  45. //============ 展示出界面
  46. var $dlg = $.yvan.showDialog(sender, widgetWindowOption);
  47. //============ 为二级弹出初始化查询数据
  48. var onLoadData = option['onWidgetLoadData'] || option.bind;
  49. var data;
  50. if ($.type(onLoadData) === 'function') {
  51. data = onLoadData.call($sender, option);
  52. } else {
  53. var vs = onLoadData;
  54. var $grid = $sender.up('grid');
  55. var row;
  56. if ($grid.length > 0) {
  57. //表格带回值
  58. row = $grid.getEditRow();
  59. } else {
  60. //窗体带回值
  61. row = $sender.findForm().formGet();
  62. }
  63. if ($.type(vs) === "string") {
  64. vs = [vs];
  65. }
  66. data = {};
  67. if ($.type(vs) === 'array') {
  68. //数组,直接读取
  69. $.each(vs, function (index, name) {
  70. data[name] = row[name];
  71. });
  72. } else {
  73. //对象调用, 建立映射关系
  74. for (var prop in vs) {
  75. if (!vs.hasOwnProperty(prop)) continue;
  76. if (!row.hasOwnProperty(prop)) {
  77. console.log('searchbox没有属性' + prop, row);
  78. continue;
  79. }
  80. data[vs[prop]] = row[prop];
  81. }
  82. }
  83. }
  84. if (widgetWindowOption.hasOwnProperty('onWidgetLoadData')) {
  85. widgetWindowOption.onWidgetLoadData(sender, data);
  86. }
  87. //============ 二级窗确认事件
  88. $dlg.data({
  89. confirm: function (row) {
  90. var successOpt = option['success'] || option.bind;
  91. if (!successOpt) {
  92. //没有配置,只写自己
  93. if ($sender.name && row.hasOwnProperty($sender.name)) {
  94. $sender.searchbox('setValue', row[$sender.name]);
  95. return true;
  96. }
  97. }
  98. if ($.type(successOpt) === "function") {
  99. //是函数,调函数
  100. return successOpt.apply(this, arguments);
  101. }
  102. //字符串或数组,直接调用数组
  103. if ($.type(successOpt) === "string") {
  104. successOpt = [successOpt];
  105. }
  106. var obj = {};
  107. if ($.type(successOpt) === 'array') {
  108. //数组,根据名字逐个写入
  109. $.each(successOpt, function (index, name) {
  110. obj[name] = row[name];
  111. });
  112. } else if ($.type(successOpt) === 'object') {
  113. //对象,根据映射关系写入
  114. var vs = successOpt;
  115. for (var prop in vs) {
  116. if (!vs.hasOwnProperty(prop)) continue;
  117. if (!row.hasOwnProperty(vs[prop])) {
  118. console.error('弹出框没有属性' + vs[prop], row);
  119. continue;
  120. }
  121. obj[prop] = row[vs[prop]];
  122. }
  123. }
  124. var $grid = $sender.up('grid');
  125. if ($grid.length > 0) {
  126. //表格内编辑
  127. $grid.setEditRow(obj);
  128. } else {
  129. //窗体编辑
  130. $sender.findForm().form('load', obj);
  131. }
  132. if ($.type(option['afterConfirm']) === 'function') {
  133. option['afterConfirm'](obj);
  134. }
  135. return true;
  136. }
  137. });
  138. });
  139. },
  140. clear: function (e) {
  141. var $me = $(e.data.target);
  142. $me.textbox('clear').textbox('textbox').focus();
  143. if (!$me.textbox('options').widget)
  144. return;
  145. var widget = $me.textbox('options').widget;
  146. var clear = widget.clear || widget.bind;
  147. if (typeof clear === "function") {
  148. widget.clear();
  149. }
  150. if ($.type(clear) === "string") {
  151. clear = [clear];
  152. }
  153. var obj = {};
  154. var vs = clear;
  155. if ($.type(vs) === 'array') {
  156. //数组清空
  157. $.each(vs, function (index, name) {
  158. obj[name] = '';
  159. });
  160. } else {
  161. //对象,按名字清空
  162. for (var prop in vs) {
  163. if (!vs.hasOwnProperty(prop)) continue;
  164. obj[prop] = '';
  165. }
  166. }
  167. var $grid = $me.up('grid');
  168. if ($grid.length > 0) {
  169. //表格内编辑
  170. $grid.setEditRow(obj);
  171. } else {
  172. //窗体编辑
  173. $me.findForm().form('load', obj);
  174. }
  175. }
  176. };