| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270 |
- Ext.define('Ext.ux.feature.MySummary', {
- extend: 'Ext.grid.feature.Summary',
- alias: 'feature.mysummary',
- dock: 'bottom',
- dockedSummaryCls: Ext.baseCSSPrefix + 'docked-mysummary',
- showSummaryRow: true,
- init: function(grid) {
- var me = this,
- view = me.view,
- dock = me.dock,
- store = grid.getStore();
- me.grid = grid;
-
- me.callParent([
- grid
- ]);
- grid.headerCt.on({
- add: me.onStoreUpdate,
- afterlayout: me.onStoreUpdate,
- remove: me.onStoreUpdate,
- scope: me
- });
- grid.on({
- beforerender: function() {
- var tableCls = [
- me.summaryTableCls
- ];
- if (view.columnLines) {
- tableCls[tableCls.length] = view.ownerCt.colLinesCls;
- }
- me.summaryBar = grid.addDocked({
- childEls: ['innerCt', 'item'],
- renderTpl: [
- '<div id="{id}-innerCt" data-ref="innerCt" role="presentation">',
- '{%this.renderContent(out,values)%}',
- '</div>'
- ],
- tpl: [
- '<table class="x-grid-row-mysummary">',
- '<tbody>',
- '<tr>',
- '<tpl for=".">',
- '<td class="x-grid-cell x-grid-td x-grid-cell-numbercolumn-1526 x-unselectable x-mysummary-item">',
- '<div class="x-grid-cell-inner x-mysummary-item-cell">{label}',
- '<tpl if="typeLabel">',
- '({typeLabel})',
- '</tpl>',
- ': {value}',
- '</div>',
- '</td>',
- '</tpl>',
- '</tr>',
- '</tbody>',
- '</table>',
- ],
- data: me.getSummarys(),
- height: 36,
- scrollable: {
- x: false,
- y: false
- },
- hidden: !me.showSummaryRow,
- itemId: 'mysummaryBar',
- cls: [ me.dockedSummaryCls, me.dockedSummaryCls + '-' + dock ],
- xtype: 'component',
- dock: dock,
- weight: 10000000
- })[0];
- },
- afterrender: function() {
- grid.getView().getScrollable().addPartner(me.summaryBar.getScrollable(), 'x');
- me.onStoreUpdate();
- me.columnSizer = me.summaryBar.el;
- },
- single: true
- });
- store.on('load', function( s, records, successful, operation, eOpts) {
- var _res = operation._response.responseJson,
- _calculateProperty = grid.calculateProperty,
- _rootProperty = grid.rootProperty;
- var _root = _calculateProperty.split('.')[0];
- eval('var ' + _root + ' = _res[_root];');
- try {
- var columns = grid.columns,
- summaryData = [],
- datas = [];
- try {
- summaryData = eval(_calculateProperty);
- datas = eval(_rootProperty);
- if(!Ext.isArray(summaryData)) {
- summaryData = [];
- }
- if(!Ext.isArray(datas)) {
- datas = [];
- }
- }catch(e) {
- // don't care this...
- }
- Ext.Array.each(columns, function (c) {
- var type = c._summaryType,
- name = c.dataIndex;
- var d = Ext.Array.findBy(summaryData, function (s) {
- return s.hasOwnProperty(name);
- })
- if (type && d) {
- if(typeof c.mySummaryRenderer == 'function') {
- c.summaryValue = c.mySummaryRenderer(grid, c, datas);
- }else if (type == 'count') {
- c.summaryValue = Ext.util.Format.number(d[name], c.format || '0');
- } else if (typeof c.summaryRenderer == 'function') {
- c.summaryValue = c.summaryRenderer(d[name]);
- } else if (typeof c.renderer == 'function') {
- c.summaryValue = c.renderer(d[name]);
- } else {
- c.summaryValue = Ext.util.Format.number(d[name], c.format || '0.00');
- }
- } else if(type && !d) {
- if(typeof c.mySummaryRenderer == 'function') {
- c.summaryValue = c.mySummaryRenderer(grid, c, datas);
- }else {
- c.summaryValue = me.applySummaryValue(datas, c);
- }
- } else {
- c.summaryValue = null;
- }
- });
- return datas;
- } catch (e) {
- console.error(e);
- saas.util.BaseUtil.showErrorToast(e.message);
- }
- });
- me.bindStore(grid, store);
- },
- onStoreUpdate: function(store) {
- var me = this,
- summaryBar = me.summaryBar,
- newSummarys = me.getSummarys();
- summaryBar && summaryBar.update(newSummarys);
- },
- getSummarys: function() {
- var me = this,
- view = me.view,
- columns = view.headerCt.getGridColumns(),
- summarys = me.summarys;
- if(summarys && summarys.length > 0) {
- return me.updateSummarys();
- }else {
- return me.initSummarys();
- }
- },
- initSummarys: function() {
- var me = this,
- summarys = [],
- grid = me.grid,
- columns = grid.columns;
- var typeLabels = {
- sum: '合计',
- count: '计数',
- avg: '平均值',
- max: '最大值',
- min: '最小值'
- };
- Ext.Array.each(columns, function(c) {
- var summaryType = c._summaryType || c.summaryType;
- if(!c.disableMySummary&&summaryType) {
- summarys.push({
- name: c.dataIndex,
- label: me.getSummaryLabel(c),
- type: summaryType,
- typeLabel: summaryType ? typeLabels[summaryType] : '',
- value: me.getSummaryValue(c)
- });
- }
- });
- grid.mysummarys = summarys;
- if(summarys.length == 0) {
- me.showSummaryRow = false;
- }else {
- me.showSummaryRow = true;
- }
- me.summarys = summarys;
- return summarys;
- },
- updateSummarys: function() {
- var me = this,
- grid = me.grid,
- columns = grid.columns,
- summarys = me.summarys;
- Ext.Array.each(summarys, function(s) {
- var col = Ext.Array.findBy(columns, function(c) {
- return c.dataIndex == s.name;
- });
- if(col) {
- s.value = me.getSummaryValue(col);
- }
- });
- return summarys;
- },
- getSummaryLabel: function(c) {
- var text = c.text,
- summaryLabel = c.summaryLabel;
- if(typeof summaryLabel === 'string') {
- return summaryLabel;
- }else if(typeof summaryLabel === 'function') {
- return summaryLabel(c, text);
- }else {
- return text;
- }
- },
- getSummaryValue: function(c) {
- var summaryValue = c.summaryValue || 0,
- summaryValueRender = c.summaryValueRender;
- if(typeof summaryValueRender === 'function') {
- return summaryValueRender(summaryValue);
- }else {
- return summaryValue;
- }
- },
- applySummaryValue: function(datas, c) {
- var dataIndex = c.dataIndex,
- type = c.summaryType,
- values = datas.map(function(d) {
- return d[c.dataIndex];
- }),
- sum = Ext.Array.sum(values);
- if (type == 'count') {
- return Ext.util.Format.number(values.length, '0');
- } else if (typeof c.summaryRenderer == 'function') {
- return c.summaryRenderer(sum);
- } else if (typeof c.renderer == 'function') {
- return c.renderer(sum);
- } else {
- return Ext.util.Format.number(sum, c.format || '0.00');
- }
- },
- afterHeaderCtLayout: function(headerCt) {
- // do nothing...
- },
- });
|