QueryUtil.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323
  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.store.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.store.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.logic + "='" + d.data.value + "'";
  98. } else {
  99. _a += ' OR ' + f.logic + "='" + d.data.value + "'";
  100. }
  101. }
  102. });
  103. condition += _a + ')';
  104. }
  105. } else if(f.xtype == 'multicombo' ){
  106. if(f.value){
  107. if(condition == ''){
  108. condition += f.name + " in (" + f.value+")";
  109. } else {
  110. condition += ' AND ' + f.name + " in (" + f.value+")";
  111. }
  112. }
  113. } else {
  114. if(!Ext.isEmpty(f.value)){
  115. if(me.contains(f.value.toString(), 'BETWEEN', true) && me.contains(f.value.toString(), 'AND', true)){
  116. if(condition == ''){
  117. condition += f.name + " " + f.value;
  118. } else {
  119. condition += ' AND (' + f.name + " " + f.value + ")";
  120. }
  121. } else if(me.contains(f.value.toString(), '||', true)){
  122. var str = '';
  123. Ext.each(f.value.split('||'), function(v){
  124. if(v != null && v != ''){
  125. if(str == ''){
  126. str += f.name + "='" + v + "'";
  127. } else {
  128. str += ' OR ' + f.name + "='" + v + "'";
  129. }
  130. }
  131. });
  132. if(condition == ''){
  133. condition += "(" + str + ")";
  134. } else {
  135. condition += ' AND (' + str + ")";
  136. }
  137. } else if(f.value.toString().charAt(0) == '!'){
  138. if(condition == ''){
  139. condition += 'nvl(' + f.name + ",' ')<>'" + f.value.substr(1) + "'";
  140. } else {
  141. condition += ' AND (nvl(' + f.name + ",' ')<>'" + f.value.substr(1) + "')";
  142. }
  143. } else {
  144. if(f.value.toString().indexOf('%') >= 0) {
  145. if(condition == ''){
  146. condition += f.name + " like '" + f.value + "'";
  147. } else {
  148. condition += ' AND (' + f.name + " like '" + f.value + "')";
  149. }
  150. } else {
  151. if(f.queryType=='VAG'){
  152. if(condition == ''){
  153. if(me.contains(f.name.toString(), '#', true)){
  154. var nameArr = f.name.split("#");
  155. Ext.each(nameArr, function(nameItem,index) {
  156. if(index==0){
  157. condition = (nameItem+ " like '%" +f.value + "%'");
  158. }else{
  159. condition += " or "+nameItem+ " like '%" +f.value + "%' ";
  160. }
  161. });
  162. }else{
  163. condition += '('+ f.name + " like '%" + f.value + "%')";
  164. }
  165. } else {
  166. if(me.contains(f.name.toString(), '#', true)){
  167. var nameArr = f.name.split("#");
  168. Ext.each(nameArr, function(nameItem,index) {
  169. if(index==0){
  170. condition = ' AND ('+(nameItem+ " like '%" +f.value + "%'");
  171. }else{
  172. condition += " or "+nameItem+ " like '%" +f.value + "%' ";
  173. }
  174. });
  175. condition+=')';
  176. }else{
  177. condition += ' AND (' + f.name + " like '%" + f.value + "%')";
  178. }
  179. }
  180. }else{
  181. if(condition == ''){
  182. condition += '('+f.name + "='" + f.value + "')";
  183. } else {
  184. condition += ' AND (' + f.name + "='" + f.value + "')";
  185. }
  186. }
  187. }
  188. }
  189. }
  190. }
  191. });
  192. return condition;
  193. },
  194. /**
  195. * string:原始字符串
  196. * substr:子字符串
  197. * isIgnoreCase:忽略大小写
  198. */
  199. contains: function(string, substr, isIgnoreCase){
  200. if (string == null || substr == null) return false;
  201. if (isIgnoreCase === undefined || isIgnoreCase === true) {
  202. string = string.toLowerCase();
  203. substr = substr.toLowerCase();
  204. }
  205. return string.indexOf(substr) > -1;
  206. },
  207. /**
  208. *
  209. */
  210. queryData: function(grid,condition){
  211. // var me = this;
  212. // if(Ext.isEmpty(condition)){
  213. // condition =" 1=1 ";
  214. // }
  215. // var params = { keyword: condition,number:1,size:15 };
  216. // var dataRes = {
  217. // url :grid.listUrl,
  218. // async:false,
  219. // params:params
  220. // };
  221. // me.BaseUtil.request(dataRes)
  222. // .then(function(response) {
  223. // var res = Ext.decode(response.responseText);
  224. // if(res.success) {
  225. // var data = res.data;
  226. // console.log(data);
  227. // grid.getStore().loadData(data.list);
  228. // grid.fireEvent('afterLoadData', grid, data.list);
  229. // }
  230. // })
  231. // .catch(function(response) {
  232. // console.log(response);
  233. // // something...
  234. // });
  235. },
  236. onQuery: function(parentForm,queryMoreForm){
  237. var me = this,
  238. grid = parentForm.down('grid'),
  239. queryForm = parentForm.down('form'),
  240. condition = me.getFormCondition(queryForm),
  241. Mode = me.getStoreMode(queryForm);
  242. if(queryMoreForm){//更多查询
  243. if(!Ext.isEmpty(condition)){
  244. condition = " and ( "+me.getStoreMode(queryMoreForm)+" ) ";
  245. }else{
  246. condition = me.getStoreMode(queryMoreForm);
  247. }
  248. if(Mode=="MAIN"){
  249. me.getStoreMode(queryMoreForm);
  250. }
  251. }
  252. console.log("condition:"+condition);
  253. condition = " 1=1 ";
  254. if(Mode=="MAIN"){
  255. console.log("Mode:"+Mode+",查询当前列表");
  256. grid.loadPage(1);
  257. }else{
  258. console.log("Mode:"+Mode+",查询当前关联列表");
  259. //若明细字段含明细字段注意切换数据源 grid.reconfigure(store, columns);
  260. //关联viewName = 关联viewName+"-RelativeGrid"
  261. grid.loadPage(1);
  262. }
  263. },
  264. add10EmptyRow: function(grid) {
  265. var store = grid.getStore(),
  266. selectedRecord = grid.selModel.lastSelected,
  267. datas = [];
  268. Ext.Array.each(new Array(10), function() {
  269. datas.push({});
  270. })
  271. store.insert(store.indexOf(selectedRecord) + 1, datas);
  272. },
  273. /**
  274. * 获取grid被选数据
  275. * grid:原始字符串
  276. */
  277. getGridSelected:function(grid){
  278. var items = grid.selModel.getSelection(),
  279. data = new Array();
  280. Ext.each(items, function(item, index){
  281. if(!Ext.isEmpty(item.data[grid._idField])&&!Ext.isEmpty(item.data[grid._codeField])){
  282. var o = new Object();
  283. if(grid._idField){
  284. o['id'] = item.data[grid._idField];
  285. }
  286. if(grid._codeField){
  287. o['code'] = item.data[grid._codeField];
  288. }
  289. o['name'] = '';
  290. data.push(o);
  291. }
  292. });
  293. return data;
  294. },
  295. /**
  296. * 发起批量操作请求
  297. * grid:原始字符串
  298. */
  299. vastRes:function(url,params){
  300. console.log("params",params);
  301. var me = this,
  302. pp ={baseDTOs:params} ;
  303. console.log("pp",pp);
  304. me.BaseUtil.request({
  305. url: url,
  306. params: JSON.stringify(pp),
  307. method: 'POST',
  308. })
  309. .then(function() {
  310. Ext.Msg.alert('提示','操作成功');
  311. })
  312. .catch(function(response) {
  313. console.log(response);
  314. Ext.Msg.alert('提示','操作失败');
  315. });
  316. }
  317. });