QueryUtil.js 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. Ext.define('saas.util.QueryUtil', {
  2. BaseUtil: Ext.create('saas.util.BaseUtil'),
  3. /**
  4. * 获得form的字段查询条件
  5. * @param form: form组件
  6. * @returns Mode: 字段模式,默认MAIN 当f.fieldMode = "DETAIL",Mode->"DETAIL"
  7. */
  8. getStoreMode: function(form,Mode){
  9. var Mode = "MAIN";
  10. if(form.items.items.find(function(item) {
  11. return !Ext.isEmpty(item.value)&&item.fieldMode == "DETAIL";
  12. })) {
  13. Mode = "DETAIL";
  14. }
  15. return Mode;
  16. },
  17. turnRelativeGrid:function(grid,queryForm,queryMoreForm){
  18. var me = this,
  19. Mode = me.getStoreMode(queryForm);
  20. if(queryMoreForm){//更多查询
  21. if(Mode=="MAIN"){
  22. me.getStoreMode(queryMoreForm);
  23. }
  24. }
  25. if(Mode=="MAIN"){
  26. grid._Mode = Mode;
  27. grid.reconfigure(grid.store, grid._baseColumn);
  28. grid.store.loadPage(1);
  29. }else{
  30. //若明细字段含明细字段注意切换数据源 grid.reconfigure(store, columns);
  31. //关联viewName = 关联viewName+"-RelativeGrid" selModel
  32. //grid.selModel = '';
  33. grid._Mode = Mode;
  34. grid.reconfigure(grid.store, grid._relativeColumn);
  35. grid.store.loadPage(1);
  36. }
  37. },
  38. /**
  39. * 获得form的字段查询条件
  40. * @param form: form组件
  41. */
  42. getFormCondition: function(form){
  43. var condition = "",
  44. me = this;
  45. Ext.each(form.items.items, function(f){
  46. if((f.xtype == 'checkbox' || f.xtype == 'radio')&&f.logic){
  47. if(f.value == true) {
  48. if(condition == ''){
  49. condition += "("+f.logic+")";
  50. } else {
  51. condition += ' AND (' + f.logic+')';
  52. }
  53. }
  54. } else if (f.xtype == 'condatefield' && f.value != null ){
  55. if(f.value.from != null){
  56. if(condition == ''){
  57. condition += " ( date("+f.name+") between '"+Ext.Date.format(f.value.from,"Y-m-d H:i:s")+"' and '"+Ext.Date.format(f.value.to,"Y-m-d H:i:s")+"' )";
  58. } else {
  59. condition += " AND ( date("+f.name+") between '"+Ext.Date.format(f.value.from,"Y-m-d H:i:s")+"' and '"+Ext.Date.format(f.value.to,"Y-m-d H:i:s")+"' )";
  60. }
  61. }
  62. }else if(f.xtype == 'datefield' && f.value != null && f.value != '' ){
  63. var v = Ext.Date.format(new Date(f.value), 'Y-m-d');
  64. if(condition == ''){
  65. condition += "date("+f.name+")='"+v+"'";
  66. } else {
  67. condition += " AND date("+f.name+")='"+v+"'";
  68. }
  69. } else if(f.xtype == 'datetimefield' && f.value != null){
  70. var v = Ext.Date.format(new Date(f.value), 'Y-m-d H:i:s');
  71. if(condition == ''){
  72. condition += 'date('+f.name + ")= '" + v + "'";
  73. } else {
  74. condition += ' AND date('+f.name + ")= '" + v + "'";
  75. }
  76. } else if(f.xtype == 'numberfield' && f.value != null && f.value != ''){
  77. var endChar = '=';
  78. if(condition == ''){
  79. condition += f.name + endChar + f.value;
  80. } else {
  81. condition += ' AND ' + f.name + endChar + f.value;
  82. }
  83. } else if(f.xtype == 'combobox' ){
  84. if(f.value != '$ALL'&& f.value!=null){
  85. if(condition == ''){
  86. condition = f.name+" = '"+f.value+"' ";
  87. } else {
  88. condition += ' AND '+f.name+" = '"+f.value+"' ";
  89. }
  90. }
  91. } else if(f.xtype == 'multicombo' ){
  92. if(f.value && f.value.length > 0){
  93. var text = f.value.map(function(v) {
  94. return '\'' + v.value + '\'';
  95. }).join(',');
  96. if(condition == ''){
  97. condition = f.name + " in (" + text +")";
  98. } else {
  99. condition += ' AND ' + f.name + " in (" + text +")";
  100. }
  101. }
  102. } else {
  103. if(!Ext.isEmpty(f.value)){
  104. if(me.contains(f.value.toString(), 'BETWEEN', true) && me.contains(f.value.toString(), 'AND', true)){
  105. if(condition == ''){
  106. condition += f.name + " " + f.value;
  107. } else {
  108. condition += ' AND (' + f.name + " " + f.value + ")";
  109. }
  110. } else if(me.contains(f.value.toString(), '||', true)){
  111. var str = '';
  112. Ext.each(f.value.split('||'), function(v){
  113. if(v != null && v != ''){
  114. if(str == ''){
  115. str += f.name + "='" + v + "'";
  116. } else {
  117. str += ' OR ' + f.name + "='" + v + "'";
  118. }
  119. }
  120. });
  121. if(condition == ''){
  122. condition += "(" + str + ")";
  123. } else {
  124. condition += ' AND (' + str + ")";
  125. }
  126. } else if(f.value.toString().charAt(0) == '!'){
  127. if(condition == ''){
  128. condition += 'nvl(' + f.name + ",' ')<>'" + f.value.substr(1) + "'";
  129. } else {
  130. condition += ' AND (nvl(' + f.name + ",' ')<>'" + f.value.substr(1) + "')";
  131. }
  132. } else {
  133. if(f.value.toString().indexOf('%') >= 0) {
  134. if(condition == ''){
  135. condition += f.name + " like '" + f.value + "'";
  136. } else {
  137. condition += ' AND (' + f.name + " like '" + f.value + "')";
  138. }
  139. } else {
  140. if(f.queryType=='VAG'){
  141. if(condition == ''){
  142. if(me.contains(f.name.toString(), '#', true)){
  143. var nameArr = f.name.split("#");
  144. Ext.each(nameArr, function(nameItem,index) {
  145. if(index==0){
  146. condition = (nameItem+ " like '%" +f.value + "%'");
  147. }else{
  148. condition += " or "+nameItem+ " like '%" +f.value + "%' ";
  149. }
  150. });
  151. }else{
  152. condition += '('+ f.name + " like '%" + f.value + "%')";
  153. }
  154. } else {
  155. if(me.contains(f.name.toString(), '#', true)){
  156. var nameArr = f.name.split("#");
  157. Ext.each(nameArr, function(nameItem,index) {
  158. if(index==0){
  159. condition += ' AND ('+(nameItem+ " like '%" +f.value + "%'");
  160. }else{
  161. condition += " or "+nameItem+ " like '%" +f.value + "%' ";
  162. }
  163. });
  164. condition+=')';
  165. }else{
  166. condition += ' AND (' + f.name + " like '%" + f.value + "%')";
  167. }
  168. }
  169. }else{
  170. if(condition == ''){
  171. condition += '('+f.name + "='" + f.value + "')";
  172. } else {
  173. condition += ' AND (' + f.name + "='" + f.value + "')";
  174. }
  175. }
  176. }
  177. }
  178. }
  179. }
  180. });
  181. return condition;
  182. },
  183. /**
  184. * string:原始字符串
  185. * substr:子字符串
  186. * isIgnoreCase:忽略大小写
  187. */
  188. contains: function(string, substr, isIgnoreCase){
  189. if (string == null || substr == null) return false;
  190. if (isIgnoreCase === undefined || isIgnoreCase === true) {
  191. string = string.toLowerCase();
  192. substr = substr.toLowerCase();
  193. }
  194. return string.indexOf(substr) > -1;
  195. }
  196. });