QueryUtil.js 12 KB

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