| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252 |
- Ext.define('erp.view.common.multiDbfind.GridPanel',{
- extend: 'Ext.grid.Panel',
- alias: 'widget.erpMultiDbfindGridPanel',
- layout : 'fit',
- id: 'dbfindGridPanel',
- emptyText : $I18N.common.grid.emptyText,
- columnLines : true,
- autoScroll : true,
- multiselected: [],
- store: [],
- columns: [],
- multiselected: new Array(),
- selModel: Ext.create('Ext.selection.CheckboxModel',{
- ignoreRightMouseSelection : false,
- checkOnly: true,
- listeners:{
- selectionchange:function(selModel, selected, options){
- selModel.view.ownerCt.setMultiValues(selected);
- trigger.multiRecords = selected;
- }
- }
- }),
- plugins: [Ext.create('Ext.grid.plugin.CellEditing', {
- clicksToEdit: 1
- }), Ext.create('Ext.ux.grid.GridHeaderFilters')],
- initComponent : function(){
- this.callParent(arguments);
- this.getCount();
- },
- RenderUtil: Ext.create('erp.util.RenderUtil'),
- setMultiValues: function(selected) {
- if(selected.length > 0) {
- if(dbfinds){
- var keys = Ext.Object.getKeys(selected[0].data);
- Ext.Array.each(selected, function(item){
- var keyValues = item.data;
- Ext.each(keys, function(k){
- Ext.Array.each(dbfinds,function(ds){
- if(k == ds.dbGridField) {
- if(ds.field && parent.Ext.getCmp(ds.field)){
- if(trigger.multiValue == null){
- trigger.multiValue = new Object();
- }
- if(trigger.multiValue[ds.field] == null || trigger.multiValue[ds.field] == ''){
- trigger.multiValue[ds.field] = keyValues[k];
- } else if(!contains(trigger.multiValue[ds.field], keyValues[k], true)){
- trigger.multiValue[ds.field] = trigger.multiValue[ds.field] + '#' + keyValues[k];
- }
- }
- }
- });
- });
- });
- } else {
- trigger.multiValue = selected;
- }
- } else {
- if(dbfinds)
- trigger.multiValue = {};
- else
- trigger.multiValue = [];
- }
- },
- getColumnsAndStore: function(c, d, g, s){
- var me = this;
- c = c || caller;
- d = d || condition;
- g = g || page;
- s = s || pageSize;
- var f = d;
- if(me.filterCondition){
- if(d == null || d == ''){
- f = me.filterCondition;
- } else {
- f += ' AND ' + me.filterCondition;
- }
- }
- me.setLoading(true);
- Ext.Ajax.request({//拿到grid的columns
- url : basePath + 'common/dbfind.action',
- method : 'post',
- params : {
- which : which,
- caller : c,
- field: key,
- condition: f,
- page: g,
- pageSize: s
- },
- callback : function(options, success, response){
- me.setLoading(false);
- var res = new Ext.decode(response.responseText);
- if(res.exceptionInfo){
- showError(res.exceptionInfo);return
- }
- var data = Ext.decode(res.data.replace(/,}/g, '}').replace(/,]/g, ']'));
- if(me.columns && me.columns.length > 2){
- me.store.loadData(data);
- if(me.store.data.items.length != data.length){
- me.store.add(data);
- }
- me.selectDefault();
- } else {
- //处理render
- var grid = this;
- Ext.Array.each(res.columns, function(column, y) {
- if(!column.haveRendered && column.renderer != null && column.renderer != ""){
- if(!grid.RenderUtil){
- grid.RenderUtil = Ext.create('erp.util.RenderUtil');
- }
- var renderName = column.renderer;
- if(contains(column.renderer, ':', true)){
- var args = new Array();
- Ext.each(column.renderer.split(':'), function(a, index){
- if(index == 0){
- renderName = a;
- } else {
- args.push(a);
- }
- });
- if(!grid.RenderUtil.args[renderName]){
- grid.RenderUtil.args[renderName] = new Object();
- }
- grid.RenderUtil.args[renderName][column.dataIndex] = args;
- }
- column.renderer = grid.RenderUtil[renderName];
- column.haveRendered = true;
- }
- });
- me.reconfigure(Ext.create('Ext.data.Store', {
- fields: res.fields,
- data: data
- }), res.columns);
- Ext.getCmp('pagingtoolbar').afterOnLoad();
- dbfinds = res.dbfinds;
- me.selectDefault();
- }
- }
- });
- },
- getCount: function(c, d){
- var me = this;
- c = c || caller;
- d = d || condition;
- var f = d;
- if(me.filterCondition){
- if(d == null || d == ''){
- f = me.filterCondition;
- } else {
- f += ' AND ' + me.filterCondition;
- }
- }
- Ext.Ajax.request({//拿到grid的数据总数count
- url : basePath + 'common/dbfindCount.action',
- params : {
- which : which,
- caller : c,
- field: key,
- condition: f
- },
- method : 'post',
- callback : function(options,success,response){
- var res = new Ext.decode(response.responseText);
- dataCount = res.count;
- me.getColumnsAndStore(c, d);
- }
- });
- },
- selectDefault: function(){
- var grid = this;
- if(!Ext.isEmpty(trigger.value)){
- var f = '';
- Ext.each(dbfinds, function(d){
- if(d.field == key){
- f = d.dbGridField;
- }
- });
- var arr = trigger.value.split('#');
- var def = new Array();
- Ext.each(grid.store.data.items, function(item){
- if(Ext.Array.contains(arr, item.data[f])){
- def.push(item);
- var keyValues = item.data;
- Ext.each(Ext.Object.getKeys(keyValues), function(k){
- Ext.Array.each(dbfinds,function(ds){
- if(k == ds.dbGridField) {
- if(parent.Ext.getCmp(ds.field)){
- if(trigger.multiValue == null){
- trigger.multiValue = new Object();
- }
- if(trigger.multiValue[ds.field] == null || trigger.multiValue[ds.field] == ''){
- trigger.multiValue[ds.field] = keyValues[k];
- } else if(!contains(trigger.multiValue[ds.field], keyValues[k], true)){
- trigger.multiValue[ds.field] = trigger.multiValue[ds.field] + '#' + keyValues[k];
- }
- }
- }
- });
- });
- }
- });
- grid.selModel.select(def);
- }
- },
- listeners: {
- 'headerfiltersapply': function(grid, filters) {
- if(this.allowFilter){
- var condition = null;
- for(var fn in filters){
- var value = filters[fn],f = grid.getHeaderFilterField(fn);
- if(!Ext.isEmpty(value)){
- if(f.filtertype) {
- if (f.filtertype == 'numberfield') {
- value = fn + "=" + value + " ";
- }
- } else {
- if(Ext.isDate(value)){
- value = Ext.Date.toString(value);
- value = "to_char(" + fn + ",'yyyy-MM-dd')='" + value + "' ";
- } else {
- var exp_t = /^(\d{4})\-(\d{2})\-(\d{2}) (\d{2}):(\d{2}):(\d{2})$/,
- exp_d = /^(\d{4})\-(\d{2})\-(\d{2})$/;
- if(exp_d.test(value)){
- value = "to_char(" + fn + ",'yyyy-MM-dd')='" + value + "' ";
- } else if(exp_t.test(value)){
- value = "to_char(" + fn + ",'yyyy-MM-dd')='" + value.substr(0, 10) + "' ";
- } else{
- if(!f.autoDim) {
- value = fn + " LIKE '" + value + "%' ";
- } else {
- value = fn + " LIKE '%" + value + "%' ";
- }
- }
- }
- }
- if(condition == null){
- condition = value;
- } else {
- condition = condition + " AND " + value;
- }
- }
- }
- this.filterCondition = condition;
- page = 1;
- this.getCount();
- } else {
- this.allowFilter = true;
- }
- return false;
- }
- }
- });
|