QueryUtil.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315
  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. console.log("Mode:"+Mode);
  26. if(Mode=="MAIN"){
  27. grid.reconfigure(grid.store, grid._baseColumn);
  28. grid.loadPage(1);
  29. }else{
  30. //若明细字段含明细字段注意切换数据源 grid.reconfigure(store, columns);
  31. //关联viewName = 关联viewName+"-RelativeGrid" selModel
  32. //grid.selModel = '';
  33. Ext.apply(store.proxy.extraParams, {
  34. mode: Mode
  35. });
  36. grid.reconfigure(grid.store, grid._relativeColumn);
  37. grid.loadPage(1);
  38. }
  39. },
  40. /**
  41. * 获得form的字段查询条件
  42. * @param form: form组件
  43. */
  44. getFormCondition: function(form){
  45. var condition = "",
  46. me = this;
  47. Ext.each(form.items.items, function(f){
  48. if((f.xtype == 'checkbox' || f.xtype == 'radio')&&f.logic){
  49. if(f.value == true) {
  50. if(condition == ''){
  51. condition += "("+f.logic+")";
  52. } else {
  53. condition += ' AND (' + f.logic+')';
  54. }
  55. }
  56. } else if (f.xtype == 'condatefield' && f.value != null ){
  57. if(f.value.from != null){
  58. if(condition == ''){
  59. condition += " date("+f.name+") between '"+f.value.from+"' and '"+f.value.to+"' ";
  60. } else {
  61. condition += " AND date("+f.name+") between '"+f.value.from+"' and '"+f.value.to+"' ";
  62. }
  63. }
  64. }else if(f.xtype == 'datefield' && f.value != null && f.value != '' ){
  65. debugger;
  66. var v = Ext.Date.format(new Date(f.value), 'Y-m-d');
  67. if(condition == ''){
  68. condition += "date("+f.name+")='"+v+"'";
  69. } else {
  70. condition += " AND date("+f.name+")='"+v+"'";
  71. }
  72. } else if(f.xtype == 'datetimefield' && f.value != null){
  73. var v = Ext.Date.format(new Date(f.value), 'Y-m-d H:i:s');
  74. debugger;
  75. if(condition == ''){
  76. condition += 'date('+f.name + ")= '" + v + "'";
  77. } else {
  78. condition += ' AND date('+f.name + ")= '" + v + "'";
  79. }
  80. } else if(f.xtype == 'numberfield' && f.value != null && f.value != ''){
  81. var endChar = '=';
  82. if(condition == ''){
  83. condition += f.name + endChar + f.value;
  84. } else {
  85. condition += ' AND ' + f.name + endChar + f.value;
  86. }
  87. } else if(f.xtype == 'combo' && f.value != '$ALL'){
  88. if(f.store.data.length > 1) {
  89. if(condition == ''){
  90. condition += '(';
  91. } else {
  92. condition += ' AND (';
  93. }
  94. var _a = '';
  95. f.store.each(function(d, idx){
  96. if(d.data.value != '$ALL') {
  97. if(_a == ''){
  98. _a += f.name +' '+ d.data.value+' ' ;
  99. } else {
  100. _a += ' OR ' + f.name +' '+ d.data.value +' ';
  101. }
  102. }
  103. });
  104. condition += _a + ')';
  105. }
  106. } else {
  107. if(!Ext.isEmpty(f.value)){
  108. if(me.contains(f.value.toString(), 'BETWEEN', true) && me.contains(f.value.toString(), 'AND', true)){
  109. if(condition == ''){
  110. condition += f.name + " " + f.value;
  111. } else {
  112. condition += ' AND (' + f.name + " " + f.value + ")";
  113. }
  114. } else if(me.contains(f.value.toString(), '||', true)){
  115. var str = '';
  116. Ext.each(f.value.split('||'), function(v){
  117. if(v != null && v != ''){
  118. if(str == ''){
  119. str += f.name + "='" + v + "'";
  120. } else {
  121. str += ' OR ' + f.name + "='" + v + "'";
  122. }
  123. }
  124. });
  125. if(condition == ''){
  126. condition += "(" + str + ")";
  127. } else {
  128. condition += ' AND (' + str + ")";
  129. }
  130. } else if(f.value.toString().charAt(0) == '!'){
  131. if(condition == ''){
  132. condition += 'nvl(' + f.name + ",' ')<>'" + f.value.substr(1) + "'";
  133. } else {
  134. condition += ' AND (nvl(' + f.name + ",' ')<>'" + f.value.substr(1) + "')";
  135. }
  136. } else {
  137. if(f.value.toString().indexOf('%') >= 0) {
  138. if(condition == ''){
  139. condition += f.name + " like '" + f.value + "'";
  140. } else {
  141. condition += ' AND (' + f.name + " like '" + f.value + "')";
  142. }
  143. } else {
  144. if(f.queryType=='VAG'){
  145. if(condition == ''){
  146. if(me.contains(f.name.toString(), '#', true)){
  147. var nameArr = f.name.split("#");
  148. Ext.each(nameArr, function(nameItem,index) {
  149. if(index==0){
  150. condition = (nameItem+ " like '%" +f.value + "%'");
  151. }else{
  152. condition += " or "+nameItem+ " like '%" +f.value + "%' ";
  153. }
  154. });
  155. }else{
  156. condition += '('+ f.name + " like '%" + f.value + "%')";
  157. }
  158. } else {
  159. if(me.contains(f.name.toString(), '#', true)){
  160. var nameArr = f.name.split("#");
  161. Ext.each(nameArr, function(nameItem,index) {
  162. if(index==0){
  163. condition = ' AND ('+(nameItem+ " like '%" +f.value + "%'");
  164. }else{
  165. condition += " or "+nameItem+ " like '%" +f.value + "%' ";
  166. }
  167. });
  168. condition+=')';
  169. }else{
  170. condition += ' AND (' + f.name + " like '%" + f.value + "%')";
  171. }
  172. }
  173. }else{
  174. if(condition == ''){
  175. condition += '('+f.name + "='" + f.value + "')";
  176. } else {
  177. condition += ' AND (' + f.name + "='" + f.value + "')";
  178. }
  179. }
  180. }
  181. }
  182. }
  183. }
  184. });
  185. return condition;
  186. },
  187. /**
  188. * string:原始字符串
  189. * substr:子字符串
  190. * isIgnoreCase:忽略大小写
  191. */
  192. contains: function(string, substr, isIgnoreCase){
  193. if (string == null || substr == null) return false;
  194. if (isIgnoreCase === undefined || isIgnoreCase === true) {
  195. string = string.toLowerCase();
  196. substr = substr.toLowerCase();
  197. }
  198. return string.indexOf(substr) > -1;
  199. },
  200. /**
  201. *
  202. */
  203. queryData: function(grid,condition){
  204. // var me = this;
  205. // if(Ext.isEmpty(condition)){
  206. // condition =" 1=1 ";
  207. // }
  208. // var params = { keyword: condition,number:1,size:15 };
  209. // var dataRes = {
  210. // url :grid.listUrl,
  211. // async:false,
  212. // params:params
  213. // };
  214. // me.BaseUtil.request(dataRes)
  215. // .then(function(response) {
  216. // var res = Ext.decode(response.responseText);
  217. // if(res.success) {
  218. // var data = res.data;
  219. // console.log(data);
  220. // grid.getStore().loadData(data.list);
  221. // grid.fireEvent('afterLoadData', grid, data.list);
  222. // }
  223. // })
  224. // .catch(function(response) {
  225. // console.log(response);
  226. // // something...
  227. // });
  228. },
  229. onQuery: function(parentForm,queryMoreForm){
  230. var me = this,
  231. grid = parentForm.down('grid'),
  232. queryForm = parentForm.down('form'),
  233. condition = me.getFormCondition(queryForm),
  234. Mode = me.getStoreMode(queryForm);
  235. if(queryMoreForm){//更多查询
  236. if(!Ext.isEmpty(condition)){
  237. condition = " and ( "+me.getStoreMode(queryMoreForm)+" ) ";
  238. }else{
  239. condition = me.getStoreMode(queryMoreForm);
  240. }
  241. if(Mode=="MAIN"){
  242. me.getStoreMode(queryMoreForm);
  243. }
  244. }
  245. console.log("condition:"+condition);
  246. condition = " 1=1 ";
  247. if(Mode=="MAIN"){
  248. console.log("Mode:"+Mode+",查询当前列表");
  249. grid.loadPage(1);
  250. }else{
  251. console.log("Mode:"+Mode+",查询当前关联列表");
  252. //若明细字段含明细字段注意切换数据源 grid.reconfigure(store, columns);
  253. //关联viewName = 关联viewName+"-RelativeGrid"
  254. grid.loadPage(1);
  255. }
  256. },
  257. add10EmptyRow: function(grid) {
  258. var store = grid.getStore(),
  259. selectedRecord = grid.selModel.lastSelected,
  260. datas = [];
  261. Ext.Array.each(new Array(10), function() {
  262. datas.push({});
  263. })
  264. store.insert(store.indexOf(selectedRecord) + 1, datas);
  265. },
  266. /**
  267. * 获取grid被选数据
  268. * grid:原始字符串
  269. */
  270. getGridSelected:function(grid){
  271. var items = grid.selModel.getSelection(),
  272. data = new Array();
  273. Ext.each(items, function(item, index){
  274. if(!Ext.isEmpty(item.data[grid._idField])&&!Ext.isEmpty(item.data[grid._codeField])){
  275. var o = new Object();
  276. if(grid._idField){
  277. o['id'] = item.data[grid._idField];
  278. }
  279. if(grid._codeField){
  280. o['code'] = item.data[grid._codeField];
  281. }
  282. o['name'] = '';
  283. data.push(o);
  284. }
  285. });
  286. return data;
  287. },
  288. /**
  289. * 发起批量操作请求
  290. * grid:原始字符串
  291. */
  292. vastRes:function(url,params){
  293. console.log("params",params);
  294. var me = this,
  295. pp ={baseDTOs:params} ;
  296. console.log("pp",pp);
  297. me.BaseUtil.request({
  298. url: url,
  299. params: JSON.stringify(pp),
  300. method: 'POST',
  301. })
  302. .then(function() {
  303. Ext.Msg.alert('提示','操作成功');
  304. })
  305. .catch(function(response) {
  306. console.log(response);
  307. Ext.Msg.alert('提示','操作失败');
  308. });
  309. }
  310. });