Ext.QuickTips.init(); Ext.define('erp.controller.crm.chance.ShowFunnel', { extend: 'Ext.app.Controller', GridUtil: Ext.create('erp.util.GridUtil'), views:[ 'crm.chance.ShowFunnel.Viewport','crm.chance.ShowFunnel.GridPanel','core.trigger.DbfindTrigger', 'core.form.FtField','core.form.ConDateField','core.form.YnField','core.form.FtDateField', 'core.form.FtFindField','core.grid.YnColumn','core.grid.TfColumn','core.form.ConMonthDateField' ], init:function(){ this.control({ 'erpQueryFormPanel button[name=confirm]': { }, /*'button[name=hide]':{ afterrender: function(btn){ var me = this; me.funnel(); } },*/ 'button[name=query]':{ afterrender: function(btn){ controller=this; var me = this; var filter = me.createFilterPanel(btn); filter.show(); me.funnel(); }, click: function(btn){ var me = this; if(Ext.getCmp(btn.getId() + '-filter')){ Ext.getCmp(btn.getId() + '-filter').show(); }else{ var filter = me.createFilterPanel(btn); filter.show(); } } } }); }, createFilterPanel:function(btn){ var me = this; var filter = Ext.create('Ext.Window', { id: btn.getId() + '-filter', style: 'background:#f1f1f1', title: '筛选条件', width: 500, modal:true, height: 385, layout: 'column', defaults: { margin: '2 2 2 10' }, items: [/*{ id: 'cm_yearmonth', name: 'cm_yearmonth', xtype: 'conmonthdatefield', fieldLabel: '期间', labelWidth: 80, margin: '10 2 2 10', columnWidth: .51, getValue: function() { if(!Ext.isEmpty(this.value)) { return {begin: this.firstVal, end: this.secondVal}; } return null; }, listeners:{ afterrender:function(cmd){ me.getCurrentYearmonth(cmd); } } },*/{ xtype: 'dbfindtrigger', fieldLabel: '任务执行人', height: 23, labelWidth: 80, id: 'ch_tasker', name:'ch_tasker', margin: '10 2 2 10', flex: 0.2, columnWidth: .51 },{ fieldLabel: '客户编码', labelWidth: 80, height: 23, layout: 'hbox', columnWidth: 1, xtype: 'fieldcontainer', id: 'chq_cucode', defaults: { fieldStyle : "background:#FFFAFA;color:#515151;" }, items: [{ labelWidth: 35, xtype: 'dbfindtrigger', flex: 0.32, id: 'ch_cucode', name: 'ch_cucode' },{ xtype: 'textfield', id: 'ch_cuname', name: 'ch_cuname', flex:0.32, readOnly: true, fieldStyle: 'background:#f1f1f1;' }], getValue: function() { var a = Ext.getCmp('ch_cucode'); if(!Ext.isEmpty(a.value)) { return {ch_cucode: a.value}; } return null; } }/*,{ xtype: 'checkbox', id: 'chkumio', name: 'chkumio', columnWidth: .51, boxLabel: '包含未开票未转发出商品出货' },{ xtype: 'checkbox', id: 'chkzerobalance', name: 'chkzerobalance', columnWidth: .51, boxLabel: '余额为零的不显示' },{ xtype: 'checkbox', id: 'chknoamount', name: 'chknoamount', columnWidth: .51, boxLabel: '无发生额的不显示' },{ xtype: 'checkbox', id: 'chkstatis', name: 'chkstatis', checked:true, columnWidth: .51, boxLabel: '是否显示汇总数' }*/], buttonAlign: 'center', buttons: [{ text: '确定', width: 60, cls: 'x-btn-blue', handler: function(btn) { var fl = btn.ownerCt.ownerCt; var con = me.getCondition(fl); f=fl; var grid = Ext.getCmp('crmquerygrid'); //grid.chkumio = Ext.getCmp('chkumio').getValue(); me.query(con); fl.hide(); } },{ text: '关闭', width: 60, cls: 'x-btn-blue', name:'hide', handler: function(btn) { var fl = btn.ownerCt.ownerCt; fl.hide(); } }] }); return filter; }, // getCurrentYearmonth: function(f) { // Ext.Ajax.request({ // url: basePath + 'fa/arp/getCurrentYearmonth.action', // method: 'GET', // callback: function(opt, s, r) { // var rs = Ext.decode(r.responseText); // if(rs.exceptionInfo) { // showError(rs.exceptionInfo); // } else if(rs.data) { // f.setValue(rs.data); // } // } // }); // }, getCondition: function(pl) { var r = new Object(),v; Ext.each(pl.items.items, function(item){ if(item.getValue !== undefined) { v = item.getValue(); if(!Ext.isEmpty(v)) { r[item.id] = v; } } }); var tb = Ext.getCmp('gl_info_ym'); if(tb) tb.updateInfo(r); return r; }, funnel:function(){ var funneldata=new Array(); Ext.Ajax.request({ url:basePath+'crm/funnel.action', params:{ condition: {} }, method : 'post', async:false, callback : function(options,success,response){ sum=0; var res = new Ext.decode(response.responseText); if(res.exceptionInfo != null){ showError(res.exceptionInfo);return; } if(res.data){ var i=0; var data=res.data; Ext.each(data,function(da){ Ext.each(Ext.Object.getKeys(da),function(key){ sum+=da[key]; var d=new Array(); d[0]=key,d[1]=da[key]; funneldata[i]=d; i++; }); }); } } }); chancefunnel=new Highcharts.Chart({ chart: { reflow: false, renderTo: 'panel-body', type: 'funnel', marginRight: 100, width:800, heigth:298 }, title: { text: '商机销售漏斗', x: -50 }, plotOptions: { series: { dataLabels: { enabled: true, formatter:function(){// return ''+this.key+' ('+this.y +')--'+Math.round(this.y/sum*100)+'% '; }, color: 'black', softConnector: true }, neckWidth: '30%', neckHeight: '25%', events:{ click:function(e){ controller.clickfunnel(e.point.name); } } } }, legend: { enabled: false }, series: [{ name: '数 量', data:funneldata }] }); }, query: function(cond) { var me = this; var grid = Ext.getCmp('crmquerygrid'); grid.setLoading(true); var funneldata=new Array(); Ext.Ajax.request({ url:basePath+'crm/funnel.action', params:{ condition: Ext.encode(cond) }, method : 'post', async:false, callback : function(options,success,response){ sum=0; var res = new Ext.decode(response.responseText); if(res.exceptionInfo != null){ showError(res.exceptionInfo);return; } if(res.data){ var i=0; var data=res.data; Ext.each(data,function(da){ Ext.each(Ext.Object.getKeys(da),function(key){ sum+=da[key]; var d=new Array(); d[0]=key,d[1]=da[key]; funneldata[i]=d; i++; }); }); } } }); chancefunnel.series[0].setData(funneldata); Ext.Ajax.request({ url: basePath + 'crm/chance/getChanceQuery.action', params: { condition: Ext.encode(cond) }, callback : function(options,success,response){ grid.setLoading(false); var res = new Ext.decode(response.responseText); me.doQuery(grid,res); } }); }, clickfunnel: function(con) { var me = this; var cond=me.getCondition(f); if(con){ cond['ch_stage']=con; } var grid = Ext.getCmp('crmquerygrid'); grid.setLoading(true); Ext.Ajax.request({ url: basePath + 'crm/chance/getChanceQuery.action', params: { condition: Ext.encode(cond) }, callback : function(options,success,response){ grid.setLoading(false); var res = new Ext.decode(response.responseText); me.doQuery(grid,res); } }); }, doQuery:function(grid,res){ var me=this; if(res.exceptionInfo){ showError(res.exceptionInfo);return; } if(res.columns){ var limits = res.limits, limitArr = new Array(); if(limits != null && limits.length > 0) {//权限外字段 limitArr = Ext.Array.pluck(limits, 'lf_field'); } Ext.each(res.columns, function(column, y){ //power if(limitArr.length > 0 && Ext.Array.contains(limitArr, column.dataIndex)) { column.hidden = true; } //renderer me.GridUtil.setRenderer(grid, column); //logictype me.GridUtil.setLogicType(grid, column); }); //data var data = []; if(!res.data || res.data.length == 2){ me.GridUtil.add10EmptyData(grid.detno, data); me.GridUtil.add10EmptyData(grid.detno, data);//添加20条空白数据 } else { data = Ext.decode(res.data.replace(/,}/g, '}').replace(/,]/g, ']')); } if(grid.columns && grid.columns.length > 0) { grid.store.loadData(data);return; } //store var store = me.GridUtil.setStore(grid, res.fields, data, grid.groupField, grid.necessaryField); //view if(grid.selModel.views == null){ grid.selModel.views = []; } //dbfind if(res.dbfinds.length > 0){ grid.dbfinds = res.dbfinds; } //toolbar me.GridUtil.setToolbar(grid, res.columns, res.necessaryField); //reconfigure grid.reconfigure(store, res.columns); } } });