Browse Source

Merge branch 'dev' of ssh://10.10.100.21/source/smartschool-platform into dev

zhaoy 6 years ago
parent
commit
9478a816db

+ 37 - 1
frontend/pc-web/app/view/basic/class/ClassDetail.js

@@ -141,7 +141,43 @@ Ext.define('school.view.basic.class.ClassDetail', {
                     text: '任课教师',
                     dataIndex: 'teacher_name',
                     editor: {
-                        xtype: 'textfield'
+                        addTitle: '教师',
+                        xtype: 'dbfindtrigger',
+                        //数据接口
+                        dataUrl:'/api/school/mirror/findTeacher',
+                        //联想设置
+                        dbtpls:[{
+                            field:'teacher_name',width:150
+                        }],
+                        dbfinds:[{
+                            from:'teacher_name',to:'teacher_name'
+                        }],
+                        defaultCondition: "1=1",
+                        dbSearchFields:[{
+                            emptyText:'请输入教师工号或姓名',
+                            xtype : "textfield", 
+                            name : "search", 
+                            getCondition: function(v) {
+                                return "(upper(teacher_name) like '%"+v.toUpperCase()+"%' or upper(teacher_number) like '%"+v.toUpperCase()+"%')";
+                            },
+                            allowBlank : true, 
+                            width:300
+                        }],
+                        //放大镜窗口列表
+                        dbColumns:[{
+                            text: "ID",
+                            dataIndex: "teacher_id",
+                            hidden:true,
+                            xtype: "numbercolumn"
+                        }, {
+                            text: '工号',
+                            dataIndex: 'teacher_number',
+                            width: 110
+                        }, {
+                            text: "姓名",
+                            dataIndex: "teacher_name",
+                            width: 110
+                        }]
                     }
                 }]
             }]

+ 3 - 3
frontend/pc-web/app/view/core/form/FormPanel.js

@@ -76,9 +76,9 @@ Ext.define('school.view.core.form.FormPanel', {
             xtype: 'button',
             text: '复制',
             handler: 'onCopy',
-            bind: {
-                hidden: '{!showCopyBtn || !'+ me._idField + '}',
-            }
+            // bind: {
+            //     hidden: '{!showCopyBtn || !'+ me._idField + '}',
+            // }
         }, Ext.apply({
             hidden: true,
             xtype: 'button',

+ 307 - 0
frontend/pc-web/app/view/core/form/field/dbfind/GridPanel.js

@@ -0,0 +1,307 @@
+Ext.define('school.view.core.dbfind.GridPanel', {
+    extend: 'Ext.grid.Panel',
+    xtype: 'dbfindgridpanel',
+    dataUrl: '',
+    dbSearchFields: [],
+    condition:'',
+
+    initComponent: function() {
+        var me = this;
+        me.initColumns();
+        if(me.columns){
+            var fields = me.columns.map(column => column.dataIndex);
+            me.store = Ext.create('Ext.data.Store',{
+                fields:fields,
+                autoLoad: true,
+                pageSize: 6,
+                data: [],
+                proxy: {
+                    type: 'ajax',
+                    timeout:8000,
+                    url: me.dataUrl,
+                    actionMethods: {
+                        read: 'GET'
+                    },
+                    reader: {
+                        type: 'json',
+                        rootProperty: 'data.list',
+                        totalProperty: 'data.total',
+                    },
+                    listeners: {
+                        exception: function(proxy, response, operation, eOpts) {
+                            if(operation.success) {
+                                if(response.timedout) {
+                                    school.util.BaseUtil.showErrorToast('请求超时');
+                                }
+                            }else {
+                                console.error('exception: ', response);
+                                school.util.BaseUtil.showErrorToast('查询失败:' + (response.responseJson?response.responseJson.message:'请求超时'));
+                            }
+                        }
+                    }
+                },
+                listeners: {
+                    beforeload: function (store, op) {
+                        var condition = me.condition;
+                        if (Ext.isEmpty(condition)) {
+                            condition = [];
+                        }
+                        //添加默认条件
+                        if(me.up('window').trigger.defaultCondition) {
+                            condition.push({
+                                type: 'condition',
+                                value: me.ownerCt.trigger.defaultCondition
+                            });
+                        }
+                        Ext.apply(store.proxy.extraParams, {
+                            number: op._page,
+                            size: store.pageSize,
+                            condition: JSON.stringify(condition)
+                        });
+                    }
+                }
+            });
+
+            Ext.apply(me, {
+                dockedItems:[{
+                    xtype:'toolbar',
+                    dock:'top',
+                    style: {
+                        marginRight: '-8px'
+                    },
+                    items:me.getSearchFields().concat([{
+                        xtype:'button',
+                        text:'查询',
+                        handler:function(b){
+                            var grid = me,items=[];
+                            grid.condition = '';
+                            Ext.Array.each(grid.dbSearchFields,function(f) {
+                                var field = b.ownerCt.down('[name='+f.name+']')
+                                items.push(field);
+                            });
+                            grid.condition = grid.getCondition(items);
+                            grid.store.loadPage(1);
+                        }
+                    },'->',{
+                        xtype:'button',
+                        text:'新增',
+                        /**
+                         * 2019-3-6 15:21:15暂时隐藏
+                         */
+                        hidden: true,
+                        cls:'x-formpanel-btn-blue',
+                        handler: me.onAddClick.bind(me)
+                    }])
+                },{
+                    height:32,
+                    style:'padding: 0;',
+                    xtype: 'pagingtoolbar',
+                    dock: 'bottom',
+                    displayInfo: true,
+                    store: me.store
+                }]
+            });
+        }
+        me.callParent(arguments);
+    },
+
+    listeners:{
+        boxready: function(grid, width, height, eOpts) {
+            var store = grid.getStore(),
+            gridBodyBox = grid.body.dom.getBoundingClientRect(),
+            gridBodyBoxHeight = gridBodyBox.height;
+
+            var pageSize = Math.floor(gridBodyBoxHeight / 33);
+
+            store.setPageSize(pageSize);
+        },
+        itemClick: function(view,record) {
+            var me = this;
+            var dbfinds = me.dbfinds;
+            var ownerTrigger = me.ownerCt.trigger;
+            ownerTrigger.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 mainGrid = me.dbfindtrigger.column.ownerCt.ownerCt;
+                        var rec = mainGrid.selModel.getLastSelected();
+                        if(rec){
+                            var nowRec = me.dbfindtrigger.column.ownerCt.ownerCt.store.getData().getByKey(rec.id);
+                            nowRec.set(item.to,record.get(item.from));
+                            //me.column.getEditor().setValue(record.get(item.from));
+                            mainGrid.up('detailGridField').fireEvent('edit');
+                        }
+                    }
+                }else if(me.belong=='form'){
+                    for (let index = 0; index < dbfinds.length; index++) {
+                        var item = dbfinds[index];
+                        var field = me.ownerCt.belong.down('[name='+item.to+']');
+                        if(field){
+                            var val = record.get(item.from);
+                            if(field.xtype=='dbfindtrigger'){
+                                field.setValue(val);
+                                field.lastTriggerValue=val;
+                            }else{
+                                field.setValue(val);
+                            }    
+                        }
+                    }
+                }else {
+                    var dbfind = Ext.Array.findBy(dbfinds, function(d) {
+                        return d.to = ownerTrigger.name;
+                    });
+                    if(dbfind) {
+                        ownerTrigger.setValue(record.get(dbfind.from));
+                    }
+                }
+                
+                ownerTrigger.aftertrigger(ownerTrigger,record);
+            }
+            me.ownerCt.close();
+        }
+    },
+
+    initColumns: function() {
+        var me = this,
+        columns = me.columns || [];
+
+        Ext.Array.each(columns, function(c) {
+            Ext.applyIf(c, {
+                width: 200
+            });
+        });
+    },
+
+    getSearchFields: function() {
+        var me = this,
+        searchFields = me.dbSearchFields;
+
+        Ext.Array.each(searchFields, function(f) {
+            f.enableKeyEvents = true;
+            f.listeners = {
+                keydown: function(th, e, eOpts) {
+                    if(e.keyCode == 13) {
+                        me.condition = '', items = [];
+                        Ext.Array.each(searchFields,function(f) {
+                            var field = th.ownerCt.down('[name='+f.name+']')
+                            items.push(field);
+                        });
+                        me.condition = me.getCondition(items);
+                        me.store.loadPage(1);
+                    }
+                }
+            }
+        });
+
+        return searchFields;
+    },
+
+    /**
+     * 获得过滤条件
+     */
+    getCondition: function(items) {
+        var me = this,
+        conditions = [];
+
+        for(var i = 0; i < items.length; i++) {
+            var item = items[i];
+            var field = item.name,
+            func = item.getCondition,
+            value = item.value,
+            condition;
+
+            if(value&&value!=''){
+                if(typeof func == 'function') {
+                    condition = {
+                        type: 'condition',
+                        value: func(value)
+                    }
+                }else {
+                    var xtype = item.xtype || 'textfield',
+                    type = item.fieldType || me.getDefaultFieldType(xtype),
+                    operation = item.operation || me.getDefaultFieldOperation(xtype),
+                    conditionValue = me.getConditionValue(xtype, value);
+        
+                    if(!conditionValue) {
+                        continue;
+                    }
+                    condition = {
+                        type: type,
+                        field: field,
+                        operation: operation,
+                        value: conditionValue
+                    }
+                }
+                conditions.push(condition);
+            }
+        };
+        return conditions;
+    },
+
+    getDefaultFieldType: function(xtype) {
+        var type;
+
+        if(Ext.Array.contains(['numberfield'], xtype)) {
+            type = 'number';
+        }else if(Ext.Array.contains(['datefield', 'condatefield'], xtype)) {
+            type = 'date';
+        }else if(Ext.Array.contains(['combobox', 'multicombo', 'combo', 'radiofield', 'radio'], xtype)) {
+            type = 'enum';
+        }else {
+            type = 'string';
+        }
+
+        return type;
+    },
+
+    getDefaultFieldOperation: function(xtype) {
+        var operation;
+
+        if(Ext.Array.contains(['numberfield'], xtype)) {
+            operation = '=';
+        }else if(Ext.Array.contains(['datefield'], xtype)) {
+            operation = '=';
+        }else if(Ext.Array.contains(['condatefield'], xtype)) {
+            operation = 'between';
+        }else if(Ext.Array.contains(['combobox', 'multicombo', 'combo'], xtype)) {
+            operation = 'in';
+        }else {
+            operation = 'like';
+        }
+
+        return operation;
+    },
+
+    /**
+     * 处理部分字段值
+     */
+    getConditionValue: function(xtype, value) {
+        var conditionValue;
+        if(xtype == 'datefield') {
+            conditionValue = Ext.Date.format(new Date(from), 'Y-m-d H:i:s');
+        }else if(xtype == 'condatefield') {
+            var from = value.from,
+            to = value.to;
+
+            conditionValue = Ext.Date.format(new Date(from), 'Y-m-d 00:00:00') + ',' + Ext.Date.format(new Date(to), 'Y-m-d 23:59:59');
+        }else if(xtype == 'combobox' || xtype == 'combo') {
+            conditionValue = '\'' + value + '\'';
+        }else if(xtype == 'multicombo') {
+            conditionValue = value.map(function(v) {
+                return '\'' + v.value + '\'';
+            }).join(',');
+        }else {
+            conditionValue = value;
+        }
+
+        return conditionValue;
+    },
+
+    onAddClick: function(){
+        var grid = this;
+        var trigger = grid.ownerCt.trigger;
+        school.util.BaseUtil.openTab(trigger.addXtype, '新增'+trigger.addTitle,trigger.addXtype + '_add');
+    }
+});

+ 57 - 0
frontend/pc-web/app/view/core/form/field/dbfind/GridPanel.scss

@@ -0,0 +1,57 @@
+.x-window-dbfind{
+    border:none;
+    .x-window-header{
+        border: none;
+        background-color: #fff;
+    }
+    .x-title-text{
+        padding-left: 7px;
+        font-weight: 550;
+        color: #35baf6;
+    }
+    .x-tbar-page-number .x-form-text{
+        height: 16px !important;
+        min-height: 16px;
+        padding: 0px;
+    }
+    .x-tbar-page-number{
+        width: 40px !important;
+    }
+    .x-title-text::before{
+        margin-left: -10px;
+        content: ' ';
+        display: block;
+        border-style: solid;
+        border-radius: 4px;
+        background-color: #34baf6;
+        position: fixed;
+        width: 0px;
+        margin-top: 2px;
+        height: 10px;
+    }
+    .x-tool-tool-el{
+        color:#35baf6 !important;
+    }
+    .x-window-body{
+        padding-top: 0px !important;
+        // background-image: url(get-resource-path('images/default/win-bg-img.png'));
+    }
+    .x-toolbar-docked-top {
+        padding: 6px 0 12px 0px;
+    }
+    .x-grid-header-ct {
+        border: 1px solid #abdaff !important;
+    }
+    .x-grid-body {
+        border-width: 1px;
+        border-color: #abdaff;
+        border-right-width: 1px !important;
+        border-left-width: 1px !important;
+        border-top-width: 0px !important;
+        border-bottom-width: 1px !important;
+    }
+    .x-grid-paging-toolbar{
+        border: 1px solid #abdaff !important;
+        border-top-width: 0px !important;
+    }
+}

+ 402 - 0
frontend/pc-web/app/view/core/form/field/dbfind/Trigger.js

@@ -0,0 +1,402 @@
+Ext.define('school.view.core.form.field.dbfind.Trigger', {
+    extend: 'Ext.form.ComboBox',
+    xtype: 'dbfindtrigger',
+    triggerCls: 'x-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);
+        //判断dbfindtrigger归属
+        f.judge(f); //form
+        var panel = f.up('core-tab-panel') || Ext.getCmp('mainView'),
+            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: 'dbfindgridpanel',
+            columns: f.dbColumns,
+            dataUrl: f.dataUrl,
+            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.8,
+            width: width * 0.8,
+            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) {
+            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);
+                    }
+                }
+            } 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);
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        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);
+        }
+    }
+});