|
@@ -0,0 +1,422 @@
|
|
|
+Ext.define('uas.view.trigger.DbfindTrigger', {
|
|
|
+ extend: 'Ext.form.ComboBox',
|
|
|
+ xtype: 'dbfindtrigger',
|
|
|
+ triggerCls: Ext.baseCSSPrefix + 'form-search-trigger',
|
|
|
+ queryMode: 'local',
|
|
|
+ displayField: 'dispaly',
|
|
|
+ valueField: 'value',
|
|
|
+ minChars: 1,
|
|
|
+ tpl: '',
|
|
|
+ enableKeyEvents: true,
|
|
|
+ initComponent: function () {
|
|
|
+ var me = this;
|
|
|
+ Ext.apply(me, me.applyConfig());
|
|
|
+ me.callParent();
|
|
|
+ },
|
|
|
+ applyConfig: function() {
|
|
|
+ var me = this,
|
|
|
+ dbtpls = me.dbtpls || [],
|
|
|
+ fields = [],
|
|
|
+ minWidth = 0,
|
|
|
+ cols = '';
|
|
|
+
|
|
|
+ for(let x = 0; x < dbtpls.length; x++) {
|
|
|
+ let dbtpl = dbtpls[x],
|
|
|
+ width = dbtpl.width || 100,
|
|
|
+ field = dbtpl.field;
|
|
|
+
|
|
|
+ fields.push(field);
|
|
|
+ minWidth += width;
|
|
|
+ cols += '<span style="padding:0 10px 0 10px;width:' + width + 'px;overflow: hidden;white-space: nowrap;text-overflow: ellipsis;float:left;">{' + field + '}</span>';
|
|
|
+ }
|
|
|
+
|
|
|
+ minWidth += 15;
|
|
|
+
|
|
|
+ cfg = {
|
|
|
+ store: Ext.create('Ext.data.Store', {
|
|
|
+ fields: fields,
|
|
|
+ data: []
|
|
|
+ }),
|
|
|
+ listConfig: {
|
|
|
+ minWidth: minWidth,
|
|
|
+ width: minWidth,
|
|
|
+ maxHeight: 210,
|
|
|
+ autoScroll: true
|
|
|
+ },
|
|
|
+ tpl: Ext.create('Ext.XTemplate',
|
|
|
+ '<ul style="padding-left: 0px;"><tpl for=".">',
|
|
|
+ '<li role="option" class="x-boundlist-item" style="list-style:none; padding: 0;">',
|
|
|
+ '<div style="height:30px;">',
|
|
|
+ '' + cols + '',
|
|
|
+ '</li>',
|
|
|
+ '</tpl></ul>'
|
|
|
+ )
|
|
|
+ };
|
|
|
+
|
|
|
+ return cfg;
|
|
|
+ },
|
|
|
+
|
|
|
+
|
|
|
+ doQuery: function (queryString, forceAll, rawQuery) {
|
|
|
+ if (!this.fireEvent('beforequery', this)) {
|
|
|
+ return;
|
|
|
+ };
|
|
|
+ queryString = queryString || '';
|
|
|
+ var me = this;
|
|
|
+ if (me.lastQueryValue != queryString) {
|
|
|
+ me.judge(me);
|
|
|
+ me.lastQueryValue = queryString;
|
|
|
+ if (queryString.trim() == '') {
|
|
|
+ me.collapse();
|
|
|
+ } else {
|
|
|
+
|
|
|
+ var data, dbfinds = me.dbfinds, dbCondition = [];
|
|
|
+ if (dbfinds) {
|
|
|
+ var dbtplcondition = "";
|
|
|
+ for (let index = 0; index < dbfinds.length; index++) {
|
|
|
+ var item = dbfinds[index].from;
|
|
|
+ if (!dbfinds[index].ignore) {
|
|
|
+ dbtplcondition += "upper(" + item + ") like '%" + queryString.toUpperCase() + "%' or ";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ dbtplcondition = "(" + dbtplcondition.substring(0, dbtplcondition.length - 4) + ")";
|
|
|
+ if (dbtplcondition.length > 0) {
|
|
|
+ dbCondition = [{
|
|
|
+ type: 'condition',
|
|
|
+ value: dbtplcondition
|
|
|
+ }];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (me.defaultCondition) {
|
|
|
+ dbCondition.push({
|
|
|
+ type: 'condition',
|
|
|
+ value: me.defaultCondition
|
|
|
+ });
|
|
|
+ }
|
|
|
+ Ext.Ajax.request({
|
|
|
+ url: me.dataUrl,
|
|
|
+ params: {
|
|
|
+ number: 1,
|
|
|
+ size: 10,
|
|
|
+ condition: JSON.stringify(dbCondition),
|
|
|
+ page: 1,
|
|
|
+ start: 0,
|
|
|
+ limit: 10
|
|
|
+ },
|
|
|
+ method: 'GET',
|
|
|
+ success: function (response, opts) {
|
|
|
+ data = Ext.decode(response.responseText);
|
|
|
+ data = data.data ? data.data.list : [];
|
|
|
+ if (data != null && data.length > 0 && me.store) {
|
|
|
+ me.store.loadData(data, false);
|
|
|
+ me.expand();
|
|
|
+ } else {
|
|
|
+ me.store.removeAll();
|
|
|
+ me.collapse();
|
|
|
+ }
|
|
|
+ },
|
|
|
+ failure: function (response, opts) {}
|
|
|
+ });
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ } else {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ onTriggerClick: function (f) {
|
|
|
+ var me = this;
|
|
|
+ if (!this.fireEvent('beforetriggerclick', this)) {
|
|
|
+ return;
|
|
|
+ };
|
|
|
+ f.blur(f,null,null,true);
|
|
|
+
|
|
|
+ f.judge(f);
|
|
|
+ var panel = f.up('content-panel') || Ext.getCmp('content-panel'),
|
|
|
+ panelEl;
|
|
|
+ if (!f.column && f.ownerCt.ownerCt.id.indexOf('window-') > -1 && f.ownerCt.ownerCt.id.indexOf('document-') <0) {
|
|
|
+ panelEl = f.ownerCt.ownerCt.getEl()
|
|
|
+ } else {
|
|
|
+ panelEl = panel.getEl()
|
|
|
+ }
|
|
|
+ var box = panelEl.getBox();
|
|
|
+ var height = box.height;
|
|
|
+ var width = box.width;
|
|
|
+
|
|
|
+ var dbItem = {
|
|
|
+ xtype: 'dbfindtriggerpanel',
|
|
|
+ columns: f.dbColumns,
|
|
|
+ dataUrl: f.dataUrl,
|
|
|
+ searchUrl: f.searchUrl,
|
|
|
+ dbfinds: f.dbfinds,
|
|
|
+ belong: f.belong,
|
|
|
+ dbSearchFields: f.dbSearchFields ? f.dbSearchFields : [],
|
|
|
+ dbfindtrigger: f,
|
|
|
+ };
|
|
|
+
|
|
|
+ if (me.onAddClick) {
|
|
|
+ dbItem.onAddClick = me.onAddClick;
|
|
|
+ }
|
|
|
+
|
|
|
+ var win = panel.add(Ext.create('Ext.window.Window', {
|
|
|
+ cls: 'x-window-dbfind',
|
|
|
+ trigger: f,
|
|
|
+ belong: f.ownerCt,
|
|
|
+ modal: true,
|
|
|
+ height: height * 0.9,
|
|
|
+ width: width * 0.9,
|
|
|
+ title: '查找' + f.addTitle,
|
|
|
+ scrollable: true,
|
|
|
+ bodyPadding: 10,
|
|
|
+ constrain: true,
|
|
|
+ closable: true,
|
|
|
+ layout: 'fit',
|
|
|
+ renderTo: panel.getEl(),
|
|
|
+ items: [dbItem]
|
|
|
+ }));
|
|
|
+ win.show();
|
|
|
+ },
|
|
|
+
|
|
|
+ judge: function (f) {
|
|
|
+ if (f.ownerCt.xtype.trim().toUpperCase().indexOf('QUERYFORMPANEL') > -1 ||
|
|
|
+ (f.ownerCt.ownerCt && (f.ownerCt.ownerCt.xtype.trim().toUpperCase().indexOf('BASEPANEL') > -1 ||
|
|
|
+ f.ownerCt.ownerCt.xtype.trim().toUpperCase().indexOf('EDITDATALIST') > -1))) {
|
|
|
+ f.belong = 'form';
|
|
|
+ return f.ownerCt.ownerCt
|
|
|
+ } else if (f.ownerCt.xtype.trim().toUpperCase().indexOf('FORM') > -1) {
|
|
|
+ f.belong = 'form';
|
|
|
+ return f.ownerCt
|
|
|
+ } else if (f.column) {
|
|
|
+ f.belong = 'grid';
|
|
|
+ return f.column.ownerCt.ownerCt.ownerCt
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ listeners: {
|
|
|
+ blur: function (f, e, op, isTrigger) {
|
|
|
+ return true;
|
|
|
+ var me = f;
|
|
|
+ var dbfinds = me.dbfinds,
|
|
|
+ data;
|
|
|
+ if (f.value && f.value != '') {
|
|
|
+
|
|
|
+ var searchField = null;
|
|
|
+ var dbCondition = [];
|
|
|
+ if (me.defaultCondition) {
|
|
|
+ dbCondition.push({
|
|
|
+ type: 'condition',
|
|
|
+ value: me.defaultCondition
|
|
|
+ });
|
|
|
+ }
|
|
|
+ for (let index = 0; index < dbfinds.length; index++) {
|
|
|
+ var item = dbfinds[index].to;
|
|
|
+ if (item == me.name) {
|
|
|
+ searchField = dbfinds[index].from;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ dbCondition.push({
|
|
|
+ type: 'condition',
|
|
|
+ value: searchField + "='" + me.value + "'"
|
|
|
+ });
|
|
|
+ Ext.Ajax.request({
|
|
|
+ url: me.dataUrl,
|
|
|
+ async: false,
|
|
|
+ params: {
|
|
|
+ number: 1,
|
|
|
+ size: 1,
|
|
|
+ condition: JSON.stringify(dbCondition),
|
|
|
+ page: 1,
|
|
|
+ start: 0,
|
|
|
+ limit: 10
|
|
|
+ },
|
|
|
+ method: 'GET',
|
|
|
+ success: function (response, opts) {
|
|
|
+ data = Ext.decode(response.responseText);
|
|
|
+ data = data.data ? data.data.list : [];
|
|
|
+ },
|
|
|
+ failure: function (response, opts) {}
|
|
|
+ });
|
|
|
+ }
|
|
|
+ if (!f.value || f.value == '' || data.length > 1 || data.length == 0) {
|
|
|
+ me.dbValues = {};
|
|
|
+ if (dbfinds && dbfinds.length > 0) {
|
|
|
+ if (me.belong == 'grid') {
|
|
|
+ for (let index = 0; index < dbfinds.length; index++) {
|
|
|
+ var item = dbfinds[index];
|
|
|
+ var rec = me.column.ownerCt.ownerCt.selModel.getLastSelected();
|
|
|
+ var nowRec = me.column.ownerCt.ownerCt.store.getData().getByKey(rec.id);
|
|
|
+ if (nowRec.get(item.to) && nowRec.get(item.to) != "") {
|
|
|
+ nowRec.set(item.to, null);
|
|
|
+ delete nowRec.modified[item.to];
|
|
|
+ }
|
|
|
+ if (me.name == item.to) {
|
|
|
+ me.column.getEditor().setValue('');
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else if (me.belong == 'form') {
|
|
|
+ for (let index = 0; index < dbfinds.length; index++) {
|
|
|
+ var item = dbfinds[index];
|
|
|
+ var field = me.ownerCt.down('[name=' + item.to + ']');
|
|
|
+ if (field) {
|
|
|
+ let xtypes = field.getXTypes().split('/');
|
|
|
+ if (xtypes.indexOf('dbfindtrigger') != -1) {
|
|
|
+ field.setValue(null);
|
|
|
+ field.lastTriggerValue = null;
|
|
|
+ } else {
|
|
|
+ field.setValue(null);
|
|
|
+ field.publishState('value', null);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ me.setValue(null);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(!isTrigger){
|
|
|
+ let rec = {
|
|
|
+ data:{},
|
|
|
+ get:function(name){
|
|
|
+ return this.data[name]
|
|
|
+ }
|
|
|
+ }
|
|
|
+ f.aftertrigger(f,rec);
|
|
|
+ }
|
|
|
+ } else if (data.length == 1) {
|
|
|
+ me.dbValues = data[0];
|
|
|
+ var dbfinds = me.dbfinds;
|
|
|
+ if (dbfinds && dbfinds.length > 0) {
|
|
|
+ if (me.belong == 'grid') {
|
|
|
+ for (let index = 0; index < dbfinds.length; index++) {
|
|
|
+ var item = dbfinds[index];
|
|
|
+ var rec = me.column.ownerCt.ownerCt.selModel.getLastSelected();
|
|
|
+ var nowRec = me.column.ownerCt.ownerCt.store.getData().getByKey(rec.id);
|
|
|
+ nowRec.set(item.to, data[0][item.from]);
|
|
|
+ if (me.name == item.to) {
|
|
|
+ me.column.getEditor().setValue(data[0][item.from]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else if (me.belong == 'form') {
|
|
|
+ for (let index = 0; index < dbfinds.length; index++) {
|
|
|
+ var item = dbfinds[index];
|
|
|
+ var field = me.ownerCt.down('[name=' + item.to + ']');
|
|
|
+ if (field) {
|
|
|
+ var val = data[0][item.from];
|
|
|
+ if (field.xtype == 'dbfindtrigger') {
|
|
|
+ field.setRawValue(val);
|
|
|
+ field.setValue(val);
|
|
|
+ field.value = val;
|
|
|
+ field.lastTriggerValue = val;
|
|
|
+ } else {
|
|
|
+ field.setValue(val);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(!isTrigger){
|
|
|
+ let rec = {
|
|
|
+ data:data[0],
|
|
|
+ get:function(name){
|
|
|
+ return this.data[name]
|
|
|
+ }
|
|
|
+ }
|
|
|
+ f.aftertrigger(f,rec);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ select: function (combo, record, eOpts) {
|
|
|
+ var me = combo;
|
|
|
+ var dbfinds = me.dbfinds;
|
|
|
+ me.dbValues = record.data;
|
|
|
+ if (dbfinds && dbfinds.length > 0) {
|
|
|
+ if (me.belong == 'grid') {
|
|
|
+ for (let index = 0; index < dbfinds.length; index++) {
|
|
|
+ var item = dbfinds[index];
|
|
|
+ var rec = me.column.ownerCt.ownerCt.selModel.getLastSelected();
|
|
|
+ var nowRec = me.column.ownerCt.ownerCt.store.getData().getByKey(rec.id);
|
|
|
+ nowRec.set(item.to, record.get(item.from));
|
|
|
+ if (me.name == item.to) {
|
|
|
+ me.column.getEditor().setValue(record.get(item.from));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else if (me.belong == 'form') {
|
|
|
+ for (let index = 0; index < dbfinds.length; index++) {
|
|
|
+ var item = dbfinds[index];
|
|
|
+ var field = me.ownerCt.down('[name=' + item.to + ']');
|
|
|
+ if (field) {
|
|
|
+ var val = record.get(item.from);
|
|
|
+ if (field.xtype == 'dbfindtrigger') {
|
|
|
+ field.setRawValue(val);
|
|
|
+ field.setValue(val);
|
|
|
+ field.value = val;
|
|
|
+ field.lastTriggerValue = val;
|
|
|
+ } else {
|
|
|
+ field.setValue(val);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ var dbfind = Ext.Array.findBy(dbfinds, function(d) {
|
|
|
+ return d.to = me.name;
|
|
|
+ });
|
|
|
+ if(dbfind) {
|
|
|
+ me.setValue(record.get(dbfind.from));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ me.aftertrigger(me, record);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ aftertrigger: function (f) {
|
|
|
+ return true;
|
|
|
+ },
|
|
|
+
|
|
|
+ setValue: function (v) {
|
|
|
+ this.callParent(arguments);
|
|
|
+ this.publishState('value', v);
|
|
|
+ },
|
|
|
+
|
|
|
+ getValue: function (f) {
|
|
|
+ var me = this,
|
|
|
+ val = me.rawToValue(me.processRawValue(me.getRawValue()));
|
|
|
+ me.value = val;
|
|
|
+ return val;
|
|
|
+ },
|
|
|
+
|
|
|
+ autoSetValue: function (combo, record) {
|
|
|
+ var me = combo;
|
|
|
+ var dbfinds = me.dbfinds;
|
|
|
+ if (dbfinds && dbfinds.length > 0) {
|
|
|
+ if (me.belong == 'grid') {
|
|
|
+ for (let index = 0; index < dbfinds.length; index++) {
|
|
|
+ var item = dbfinds[index];
|
|
|
+ var rec = me.column.ownerCt.ownerCt.selModel.getLastSelected();
|
|
|
+ var nowRec = me.column.ownerCt.ownerCt.store.getData().getByKey(rec.id);
|
|
|
+ nowRec.set(item.to, record.get(item.from));
|
|
|
+ if (me.name == item.to) {
|
|
|
+ me.column.getEditor().setValue(record.get(item.from));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else if (me.belong == 'form') {
|
|
|
+ for (let index = 0; index < dbfinds.length; index++) {
|
|
|
+ var item = dbfinds[index];
|
|
|
+ var field = me.ownerCt.down('[name=' + item.to + ']');
|
|
|
+ if (field) {
|
|
|
+ var val = record.get(item.from);
|
|
|
+ if (field.xtype == 'dbfindtrigger') {
|
|
|
+ field.setRawValue(val);
|
|
|
+ field.setValue(val);
|
|
|
+ field.value = val;
|
|
|
+ field.lastTriggerValue = val;
|
|
|
+ } else {
|
|
|
+ field.setValue(val);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ me.aftertrigger(me, record);
|
|
|
+ }
|
|
|
+ }
|
|
|
+});
|