BasePanel.js 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  1. Ext.define('saas.view.core.base.BasePanel', {
  2. extend: 'Ext.form.Panel',
  3. xtype: 'core-base-basepanel',
  4. controller: 'core-base-basepanel',
  5. viewModel: 'core-base-basepanel',
  6. cls:'core-base-basepanel',
  7. //基础属性
  8. frame:false,
  9. autoScroll: true,
  10. border: 0,
  11. bodyPadding: 0,
  12. layout: 'fit',
  13. fieldDefaults: {
  14. margin: '0 5 5 0',
  15. labelAlign: 'right',
  16. labelWidth: 90,
  17. columnWidth: 0.25,
  18. blankText: '该字段不能为空'
  19. },
  20. searchField:[],
  21. gridColumns: [],
  22. deleteMoreMsg: '确认删除所选单据?',
  23. deleteOneMsg: '确认删除该单据?',
  24. initComponent: function() {
  25. var me = this,
  26. gridConfig = me.gridConfig,
  27. gridColumns = Ext.Array.clone(gridConfig.columns);
  28. var gridcfg = {
  29. layout: 'fit',
  30. xtype: 'core-base-gridpanel',
  31. padding: '8 12',
  32. _columns: gridColumns.map(function(c) {
  33. return Object.assign({}, c);
  34. }),
  35. };
  36. Ext.apply(gridcfg ,me.gridConfig);
  37. Ext.apply(me, {
  38. dockedItems: [{
  39. frame:false,
  40. xtype: 'toolbar',
  41. dock: 'top',
  42. layout: 'column',
  43. style: {
  44. margin: '0 0 12px 0',
  45. padding: '10px 0 14px 8px',
  46. },
  47. items: me.searchField.concat([{
  48. xtype: 'button',
  49. text: '查询',
  50. handler: function() {
  51. me.onQuery()
  52. }
  53. }])
  54. }],
  55. items: [gridcfg]
  56. });
  57. me.callParent(arguments);
  58. },
  59. listeners: {
  60. beforerender: function(form) {
  61. var items = form.dockedItems.items[0].items.items,
  62. searchField = form.searchField;
  63. Ext.Array.each(searchField, function(f) {
  64. var name = f.name;
  65. var field = form.getForm().findField(name);
  66. if(field) {
  67. field.enableKeyEvents = true;
  68. field.on && field.on({
  69. keydown: {
  70. fn: function(th, e, eOpts) {
  71. if(e.keyCode == 13) {
  72. form.onQuery()
  73. }
  74. }
  75. }
  76. });
  77. }
  78. });
  79. }
  80. },
  81. onQuery: function() {
  82. var me = this;
  83. var grid = me.down('core-base-gridpanel');
  84. grid.store.loadPage(1);
  85. },
  86. /**
  87. * 获得过滤条件
  88. */
  89. getConditions: function() {
  90. var me = this;
  91. var items = me.dockedItems.items[0].items.items;
  92. var conditions = [];
  93. for(let i = 0; i < items.length; i++) {
  94. var item = items[i];
  95. var field = item.name,
  96. func = item.getCondition,
  97. value = item.value,
  98. condition;
  99. if(value&&value!=''){
  100. if(typeof func == 'function') {
  101. condition = {
  102. type: 'condition',
  103. value: func(value)
  104. }
  105. }else {
  106. var type = item.fieldType || me.getDefaultFieldType(item),
  107. operation = item.operation || me.getDefaultFieldOperation(item),
  108. conditionValue = me.getConditionValue(item, value);
  109. if(!conditionValue) {
  110. continue;
  111. }
  112. condition = {
  113. type: type,
  114. field: field,
  115. operation: operation,
  116. value: conditionValue
  117. }
  118. }
  119. conditions.push(condition);
  120. }
  121. }
  122. return conditions;
  123. },
  124. /**
  125. * 只要arr1和arr2中存在相同项即返回真
  126. */
  127. isContainsAny: function (arr1, arr2) {
  128. for (var i = 0; i < arr2.length; i++) {
  129. var a2 = arr2[i];
  130. if (!!arr1.find(function (a1) {
  131. return a1 == a2
  132. })) {
  133. return true;
  134. }
  135. }
  136. return false;
  137. },
  138. getDefaultFieldType: function (field) {
  139. var me = this,
  140. xtypes = field.getXTypes().split('/'),
  141. type;
  142. if (me.isContainsAny(xtypes, ['numberfield'])) {
  143. type = 'number';
  144. } else if (me.isContainsAny(xtypes, ['datefield', 'condatefield', 'conmonthfield'])) {
  145. type = 'date';
  146. } else if (me.isContainsAny(xtypes, ['dbfindtrigger'])) {
  147. type = 'enum';
  148. } else if (me.isContainsAny(xtypes, ['combobox', 'multicombo', 'combo', 'radiofield', 'radio'])) {
  149. type = 'enum';
  150. } else {
  151. type = 'string';
  152. }
  153. return type;
  154. },
  155. getDefaultFieldOperation: function (field) {
  156. var me = this,
  157. xtypes = field.getXTypes().split('/'),
  158. operation;
  159. if (me.isContainsAny(xtypes, ['numberfield', 'datefield', 'dbfindtrigger'])) {
  160. operation = '=';
  161. } else if (me.isContainsAny(xtypes, ['condatefield', 'conmonthfield'])) {
  162. operation = 'between';
  163. } else if (me.isContainsAny(xtypes, ['multidbfindtrigger', 'combobox', 'multicombo', 'combo'])) {
  164. operation = 'in';
  165. } else {
  166. operation = 'like';
  167. }
  168. return operation;
  169. },
  170. /**
  171. * 处理部分字段值
  172. */
  173. getConditionValue: function (field, value) {
  174. var me = this,
  175. xtypes = field.getXTypes().split('/'),
  176. conditionValue;
  177. if (me.isContainsAny(xtypes, ['datefield'])) {
  178. conditionValue = Ext.Date.format(new Date(from), 'Y-m-d H:i:s');
  179. } else if (me.isContainsAny(xtypes, ['conmonthfield'])) {
  180. var from = value.from,
  181. to = value.to;
  182. conditionValue = from + ',' + to;
  183. } else if (me.isContainsAny(xtypes, ['condatefield'])) {
  184. var from = value.from,
  185. to = value.to;
  186. conditionValue = Ext.Date.format(new Date(from), 'Y-m-d 00:00:00') + ',' + Ext.Date.format(new Date(to), 'Y-m-d 23:59:59');
  187. } else if (me.isContainsAny(xtypes, ['dbfindtrigger'])) {
  188. conditionValue = value;
  189. } else if (me.isContainsAny(xtypes, ['combobox', 'combo'])) {
  190. conditionValue = '\'' + value + '\'';
  191. } else if (me.isContainsAny(xtypes, ['multicombo'])) {
  192. conditionValue = value.map ? value.map(function (v) {
  193. return '\'' + v.value + '\'';
  194. }).join(',') : '';
  195. } else {
  196. conditionValue = value;
  197. }
  198. return conditionValue;
  199. },
  200. getExtraParams: function(store, op, condition) {
  201. return {
  202. number: store.exportNumber?store.exportNumber:op._page,
  203. size: store.exportPageSize?store.exportPageSize:store.pageSize,
  204. condition: JSON.stringify(condition)
  205. };
  206. },
  207. refresh: function () {
  208. this.items.items[0].store.load()
  209. },
  210. refreshViewConfig: function() {
  211. var me = this;
  212. var grid = me.items.items[0];
  213. grid.refreshColumns();
  214. }
  215. });