QueryUtil.js 14 KB

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