DbfindTrigger.js 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422
  1. Ext.define('uas.view.trigger.DbfindTrigger', {
  2. extend: 'Ext.form.ComboBox',
  3. xtype: 'dbfindtrigger',
  4. triggerCls: Ext.baseCSSPrefix + 'form-search-trigger',
  5. queryMode: 'local',
  6. displayField: 'dispaly',
  7. valueField: 'value',
  8. minChars: 1, // 设置用户输入字符多少时触发查询
  9. tpl: '',
  10. enableKeyEvents: true,
  11. initComponent: function () {
  12. var me = this;
  13. Ext.apply(me, me.applyConfig());
  14. me.callParent();
  15. },
  16. applyConfig: function() {
  17. var me = this,
  18. dbtpls = me.dbtpls || [],
  19. fields = [],
  20. minWidth = 0,
  21. cols = '';
  22. for(let x = 0; x < dbtpls.length; x++) {
  23. let dbtpl = dbtpls[x],
  24. width = dbtpl.width || 100,
  25. field = dbtpl.field;
  26. fields.push(field);
  27. minWidth += width;
  28. cols += '<span style="padding:0 10px 0 10px;width:' + width + 'px;overflow: hidden;white-space: nowrap;text-overflow: ellipsis;float:left;">{' + field + '}</span>';
  29. }
  30. minWidth += 15;
  31. cfg = {
  32. store: Ext.create('Ext.data.Store', {
  33. fields: fields,
  34. data: []
  35. }),
  36. listConfig: {
  37. minWidth: minWidth,
  38. width: minWidth,
  39. maxHeight: 210,
  40. autoScroll: true
  41. },
  42. tpl: Ext.create('Ext.XTemplate',
  43. '<ul style="padding-left: 0px;"><tpl for=".">',
  44. '<li role="option" class="x-boundlist-item" style="list-style:none; padding: 0;">',
  45. '<div style="height:30px;">',
  46. '' + cols + '',
  47. '</li>',
  48. '</tpl></ul>'
  49. )
  50. };
  51. return cfg;
  52. },
  53. //输入值之后进行模糊查询
  54. doQuery: function (queryString, forceAll, rawQuery) {
  55. if (!this.fireEvent('beforequery', this)) {
  56. return;
  57. };
  58. queryString = queryString || '';
  59. var me = this;
  60. if (me.lastQueryValue != queryString) {
  61. me.judge(me);
  62. me.lastQueryValue = queryString;
  63. if (queryString.trim() == '') {
  64. me.collapse();
  65. } else {
  66. //加载数据
  67. var data, dbfinds = me.dbfinds, dbCondition = [];
  68. if (dbfinds) {
  69. var dbtplcondition = "";
  70. for (let index = 0; index < dbfinds.length; index++) {
  71. var item = dbfinds[index].from;
  72. if (!dbfinds[index].ignore) {
  73. dbtplcondition += "upper(" + item + ") like '%" + queryString.toUpperCase() + "%' or ";
  74. }
  75. }
  76. dbtplcondition = "(" + dbtplcondition.substring(0, dbtplcondition.length - 4) + ")";
  77. if (dbtplcondition.length > 0) {
  78. dbCondition = [{
  79. type: 'condition',
  80. value: dbtplcondition
  81. }];
  82. }
  83. }
  84. //添加默认条件
  85. if (me.defaultCondition) {
  86. dbCondition.push({
  87. type: 'condition',
  88. value: me.defaultCondition
  89. });
  90. }
  91. Ext.Ajax.request({
  92. url: me.dataUrl,
  93. params: {
  94. number: 1,
  95. size: 10,
  96. condition: JSON.stringify(dbCondition),
  97. page: 1,
  98. start: 0,
  99. limit: 10
  100. },
  101. method: 'GET',
  102. success: function (response, opts) {
  103. data = Ext.decode(response.responseText);
  104. data = data.data ? data.data.list : [];
  105. if (data != null && data.length > 0 && me.store) {
  106. me.store.loadData(data, false);
  107. me.expand();
  108. } else {
  109. me.store.removeAll();
  110. me.collapse();
  111. }
  112. },
  113. failure: function (response, opts) {}
  114. });
  115. }
  116. return true;
  117. } else {
  118. return false;
  119. }
  120. },
  121. onTriggerClick: function (f) {
  122. var me = this;
  123. if (!this.fireEvent('beforetriggerclick', this)) {
  124. return;
  125. };
  126. f.blur(f,null,null,true);
  127. //判断dbfindtrigger归属
  128. f.judge(f); //form
  129. var panel = f.up('content-panel') || Ext.getCmp('content-panel'),
  130. panelEl;
  131. if (!f.column && f.ownerCt.ownerCt.id.indexOf('window-') > -1 && f.ownerCt.ownerCt.id.indexOf('document-') <0) {
  132. panelEl = f.ownerCt.ownerCt.getEl()
  133. } else {
  134. panelEl = panel.getEl()
  135. }
  136. var box = panelEl.getBox();
  137. var height = box.height;
  138. var width = box.width;
  139. var dbItem = {
  140. xtype: 'dbfindtriggerpanel',
  141. columns: f.dbColumns,
  142. dataUrl: f.dataUrl,
  143. searchUrl: f.searchUrl,
  144. dbfinds: f.dbfinds,
  145. belong: f.belong,
  146. dbSearchFields: f.dbSearchFields ? f.dbSearchFields : [],
  147. dbfindtrigger: f,
  148. };
  149. if (me.onAddClick) {
  150. dbItem.onAddClick = me.onAddClick;
  151. }
  152. var win = panel.add(Ext.create('Ext.window.Window', {
  153. cls: 'x-window-dbfind',
  154. trigger: f,
  155. belong: f.ownerCt,
  156. modal: true,
  157. height: height * 0.9,
  158. width: width * 0.9,
  159. title: '查找' + f.addTitle,
  160. scrollable: true,
  161. bodyPadding: 10,
  162. constrain: true,
  163. closable: true,
  164. layout: 'fit',
  165. renderTo: panel.getEl(),
  166. items: [dbItem]
  167. }));
  168. win.show();
  169. },
  170. judge: function (f) {
  171. if (f.ownerCt.xtype.trim().toUpperCase().indexOf('QUERYFORMPANEL') > -1 ||
  172. (f.ownerCt.ownerCt && (f.ownerCt.ownerCt.xtype.trim().toUpperCase().indexOf('BASEPANEL') > -1 ||
  173. f.ownerCt.ownerCt.xtype.trim().toUpperCase().indexOf('EDITDATALIST') > -1))) {
  174. f.belong = 'form';
  175. return f.ownerCt.ownerCt
  176. } else if (f.ownerCt.xtype.trim().toUpperCase().indexOf('FORM') > -1) {
  177. f.belong = 'form';
  178. return f.ownerCt
  179. } else if (f.column) {
  180. f.belong = 'grid';
  181. return f.column.ownerCt.ownerCt.ownerCt
  182. }
  183. },
  184. listeners: {
  185. blur: function (f, e, op, isTrigger) {
  186. return true;//先不使用
  187. var me = f;
  188. var dbfinds = me.dbfinds,
  189. data;
  190. if (f.value && f.value != '') {
  191. //添加默认条件
  192. var searchField = null;
  193. var dbCondition = [];
  194. if (me.defaultCondition) {
  195. dbCondition.push({
  196. type: 'condition',
  197. value: me.defaultCondition
  198. });
  199. }
  200. for (let index = 0; index < dbfinds.length; index++) {
  201. var item = dbfinds[index].to;
  202. if (item == me.name) {
  203. searchField = dbfinds[index].from;
  204. }
  205. }
  206. dbCondition.push({
  207. type: 'condition',
  208. value: searchField + "='" + me.value + "'"
  209. });
  210. Ext.Ajax.request({
  211. url: me.dataUrl,
  212. async: false,
  213. params: {
  214. number: 1,
  215. size: 1,
  216. condition: JSON.stringify(dbCondition),
  217. page: 1,
  218. start: 0,
  219. limit: 10
  220. },
  221. method: 'GET',
  222. success: function (response, opts) {
  223. data = Ext.decode(response.responseText);
  224. data = data.data ? data.data.list : [];
  225. },
  226. failure: function (response, opts) {}
  227. });
  228. }
  229. if (!f.value || f.value == '' || data.length > 1 || data.length == 0) {
  230. me.dbValues = {};
  231. if (dbfinds && dbfinds.length > 0) {
  232. if (me.belong == 'grid') {
  233. for (let index = 0; index < dbfinds.length; index++) {
  234. var item = dbfinds[index];
  235. var rec = me.column.ownerCt.ownerCt.selModel.getLastSelected();
  236. var nowRec = me.column.ownerCt.ownerCt.store.getData().getByKey(rec.id);
  237. if (nowRec.get(item.to) && nowRec.get(item.to) != "") {
  238. nowRec.set(item.to, null);
  239. delete nowRec.modified[item.to];
  240. }
  241. if (me.name == item.to) {
  242. me.column.getEditor().setValue('');
  243. }
  244. }
  245. } else if (me.belong == 'form') {
  246. for (let index = 0; index < dbfinds.length; index++) {
  247. var item = dbfinds[index];
  248. var field = me.ownerCt.down('[name=' + item.to + ']');
  249. if (field) {
  250. let xtypes = field.getXTypes().split('/');
  251. if (xtypes.indexOf('dbfindtrigger') != -1) {
  252. field.setValue(null);
  253. field.lastTriggerValue = null;
  254. } else {
  255. field.setValue(null);
  256. field.publishState('value', null);
  257. }
  258. }
  259. }
  260. }else {
  261. me.setValue(null);
  262. }
  263. }
  264. if(!isTrigger){
  265. let rec = {
  266. data:{},
  267. get:function(name){
  268. return this.data[name]
  269. }
  270. }
  271. f.aftertrigger(f,rec);
  272. }
  273. } else if (data.length == 1) {
  274. me.dbValues = data[0];
  275. var dbfinds = me.dbfinds;
  276. if (dbfinds && dbfinds.length > 0) {
  277. if (me.belong == 'grid') {
  278. for (let index = 0; index < dbfinds.length; index++) {
  279. var item = dbfinds[index];
  280. var rec = me.column.ownerCt.ownerCt.selModel.getLastSelected();
  281. var nowRec = me.column.ownerCt.ownerCt.store.getData().getByKey(rec.id);
  282. nowRec.set(item.to, data[0][item.from]);
  283. if (me.name == item.to) {
  284. me.column.getEditor().setValue(data[0][item.from]);
  285. }
  286. }
  287. } else if (me.belong == 'form') {
  288. for (let index = 0; index < dbfinds.length; index++) {
  289. var item = dbfinds[index];
  290. var field = me.ownerCt.down('[name=' + item.to + ']');
  291. if (field) {
  292. var val = data[0][item.from];
  293. if (field.xtype == 'dbfindtrigger') {
  294. field.setRawValue(val);
  295. field.setValue(val);
  296. field.value = val;
  297. field.lastTriggerValue = val;
  298. } else {
  299. field.setValue(val);
  300. }
  301. }
  302. }
  303. }
  304. }
  305. if(!isTrigger){
  306. let rec = {
  307. data:data[0],
  308. get:function(name){
  309. return this.data[name]
  310. }
  311. }
  312. f.aftertrigger(f,rec);
  313. }
  314. }
  315. },
  316. select: function (combo, record, eOpts) {
  317. var me = combo;
  318. var dbfinds = me.dbfinds;
  319. me.dbValues = record.data;
  320. if (dbfinds && dbfinds.length > 0) {
  321. if (me.belong == 'grid') {
  322. for (let index = 0; index < dbfinds.length; index++) {
  323. var item = dbfinds[index];
  324. var rec = me.column.ownerCt.ownerCt.selModel.getLastSelected();
  325. var nowRec = me.column.ownerCt.ownerCt.store.getData().getByKey(rec.id);
  326. nowRec.set(item.to, record.get(item.from));
  327. if (me.name == item.to) {
  328. me.column.getEditor().setValue(record.get(item.from));
  329. }
  330. }
  331. } else if (me.belong == 'form') {
  332. for (let index = 0; index < dbfinds.length; index++) {
  333. var item = dbfinds[index];
  334. var field = me.ownerCt.down('[name=' + item.to + ']');
  335. if (field) {
  336. var val = record.get(item.from);
  337. if (field.xtype == 'dbfindtrigger') {
  338. field.setRawValue(val);
  339. field.setValue(val);
  340. field.value = val;
  341. field.lastTriggerValue = val;
  342. } else {
  343. field.setValue(val);
  344. }
  345. }
  346. }
  347. }else {
  348. var dbfind = Ext.Array.findBy(dbfinds, function(d) {
  349. return d.to = me.name;
  350. });
  351. if(dbfind) {
  352. me.setValue(record.get(dbfind.from));
  353. }
  354. }
  355. me.aftertrigger(me, record);
  356. }
  357. }
  358. },
  359. aftertrigger: function (f) {
  360. return true;
  361. },
  362. setValue: function (v) {
  363. this.callParent(arguments);
  364. this.publishState('value', v);
  365. },
  366. getValue: function (f) {
  367. var me = this,
  368. val = me.rawToValue(me.processRawValue(me.getRawValue()));
  369. me.value = val;
  370. return val;
  371. },
  372. autoSetValue: function (combo, record) {
  373. var me = combo;
  374. var dbfinds = me.dbfinds;
  375. if (dbfinds && dbfinds.length > 0) {
  376. if (me.belong == 'grid') {
  377. for (let index = 0; index < dbfinds.length; index++) {
  378. var item = dbfinds[index];
  379. var rec = me.column.ownerCt.ownerCt.selModel.getLastSelected();
  380. var nowRec = me.column.ownerCt.ownerCt.store.getData().getByKey(rec.id);
  381. nowRec.set(item.to, record.get(item.from));
  382. if (me.name == item.to) {
  383. me.column.getEditor().setValue(record.get(item.from));
  384. }
  385. }
  386. } else if (me.belong == 'form') {
  387. for (let index = 0; index < dbfinds.length; index++) {
  388. var item = dbfinds[index];
  389. var field = me.ownerCt.down('[name=' + item.to + ']');
  390. if (field) {
  391. var val = record.get(item.from);
  392. if (field.xtype == 'dbfindtrigger') {
  393. field.setRawValue(val);
  394. field.setValue(val);
  395. field.value = val;
  396. field.lastTriggerValue = val;
  397. } else {
  398. field.setValue(val);
  399. }
  400. }
  401. }
  402. }
  403. me.aftertrigger(me, record);
  404. }
  405. }
  406. });