Extjs真是十分贴心,十分强大

看这二级表头、三级联动表格多帅

/**
 * aporro产品统计报表
 */
Ext.define("PSI.Report.AporroProductReportForm", {
    extend: "PSI.AFX.BaseMainExForm",

    initComponent: function () {
        var me = this;

        Ext.apply(me, {
            tbar: [{
                text: "关闭",
                iconCls: "PSI-button-exit",
                handler: function () {
                    me.closeWindow();
                }
            }],
            items: [{
                region: "north",
                height: 60,
                border: 0,
                layout: "fit",
                border: 1,
                title: "查询条件",
                collapsible: true,
                layout: {
                    type: "table",
                    columns: 4
                },
                items: [
                    {
                        id: "editQuerySku",
                        labelWidth: 40,
                        labelAlign: "right",
                        labelSeparator: "",
                        fieldLabel: "sku",
                        margin: "5, 0, 0, 0",
                        xtype: "textfield",
                        listeners: {
                            specialkey: {
                                fn: me.onQueryEditSpecialKey,
                                scope: me
                            }
                        },
                        width: 160
                    },
                    {
                        id: "editQueryFromDT",
                        xtype: "datefield",
                        margin: "5, 0, 0, 0",
                        format: "Y-m-d",
                        labelAlign: "right",
                        labelSeparator: "",
                        fieldLabel: "从",
                        value: new Date()
                    }, {
                        id: "editQueryToDT",
                        xtype: "datefield",
                        margin: "5, 0, 0, 0",
                        format: "Y-m-d",
                        labelAlign: "right",
                        labelSeparator: "",
                        fieldLabel: "到",
                        value: new Date()
                    }, {
                        xtype: "container",
                        items: [{
                            xtype: "button",
                            text: "查询",
                            width: 100,
                            margin: "5 0 0 10",
                            iconCls: "PSI-button-refresh",
                            handler: me.onQuery,
                            scope: me
                        }, {
                            xtype: "button",
                            text: "重置查询条件",
                            width: 100,
                            margin: "5, 0, 0, 10",
                            handler: me.onClearQuery,
                            scope: me
                        }]
                    }]
            }, {
                region: "center",
                layout: "border",
                border: 0,
                items: [{
                    region: "center",
                    layout: "fit",
                    border: 0,
                    items: [me.getSKUGrid()]
                }, {
                    region: "east",
                    layout: "border",
                    width: "50%",
                    split: true,
                    border: 0,
                    items: [
                        {
                            region: "center",
                            layout: "fit",
                            border: 0,
                            height: "50%",
                            items: [me.getCountryGrid()]
                        },
                        {
                            region: "south",
                            layout: "fit",
                            height: "50%",
                            split: true,
                            items: [me.getStateGrid()]
                        }
                    ]
                }]
            }]
        });

        me.callParent(arguments);
    },

    /**
     * 生成SKU统计表格
     * @returns {Ext.grid.Panel|*}
     */
    getSKUGrid: function () {
        var me = this;
        if (me.__SKUGrid) {
            return me.__SKUGrid;
        }

        var modelName = "PSIReportAporroProductReportSKU";
        Ext.define(modelName, {
            extend: "Ext.data.Model",
            fields: [
                {name: "sku",               type: 'string'},
                {name: "pay_num",           type: 'number'},
                {name: "pay_sum",           type: 'number'},
                {name: "pay_ratio",         type: 'number'},
                {name: "no_pay_num",        type: 'number'},
                {name: "no_pay_sum",        type: 'number'},
                {name: "no_pay_ratio",      type: 'number'},
                {name: "pay_fail_num",      type: 'number'},
                {name: "pay_fail_sum",      type: 'number'},
                {name: "pay_fail_ratio",    type: 'number'}
            ]
        });
        var store = Ext.create("Ext.data.Store", {
            autoLoad: false,
            model: modelName,
            data: [],
            pageSize: 1000,
            proxy: {
                type: "ajax",
                actionMethods: {
                    read: "POST"
                },
                url: PSI.Const.BASE_URL
                + "Home/Report/aporroProductReportBySku",
                reader: {
                    root: 'dataList',
                    totalProperty: 'totalCount'
                }
            }
        });
        store.on("beforeload", function () {
            store.proxy.extraParams = me.getSkuQueryParam();
        });

        me.__SKUGrid = Ext.create("Ext.grid.Panel", {
            viewConfig: {
                enableTextSelection: true
            },
            border: 0,
            columnLines: true,
            features: [{
                ftype: 'summary'
            }],
            columns: [{
                xtype: "rownumberer",
                width: 40
            }, {
                header: "SKU",
                dataIndex: "sku",
                menuDisabled: true,
                sortable: true,
                width: 140,
                summaryType: 'count',
                summaryRenderer: function (value, summaryData, dataIndex) {
                    if (value > 0) {
                        return '合计:' + value;
                    }
                }
            },
                {
                    text: "<span style='color:green'>已支付</span>",
                    columns: [
                        {
                            text: "数量",
                            align: "right",
                            width: 60,
                            dataIndex: 'pay_num',
                            sortable: true,
                            summaryType: 'sum'
                        },
                        {
                            text: "金额",
                            align: "right",
                            width: 90,
                            dataIndex: 'pay_sum',
                            sortable: true,
                            summaryType: 'sum',
                            renderer: function (v, m) {
                                return ' <span style="color:green;">' + Ext.util.Format.usMoney(v) + '</span>';
                            },
                        },
                        {
                            text: "占比",
                            align: "right",
                            width: 60,
                            format: '0,0',
                            dataIndex: 'pay_ratio',
                            sortable: true,
                            summaryType: 'average',
                            summaryRenderer: function (value, summaryData, dataIndex) {
                                return value.toFixed();
                            },
                        }]
                },
                {
                    text: "<span style='color:blue'>未支付</span>",
                    columns: [
                        {
                            header: "数量",
                            dataIndex: "no_pay_num",
                            menuDisabled: true,
                            align: "right",
                            format: '0,0',
                            sortable: true,
                            summaryType: 'sum',
                            width: 60
                        }, {
                            header: "金额",
                            dataIndex: "no_pay_sum",
                            menuDisabled: true,
                            align: "right",
                            sortable: true,
                            renderer: function (v, m) {
                                return ' <span style="color:blue;">' + Ext.util.Format.usMoney(v) + '</span>';
                            },
                            summaryType: 'sum',
                            width: 90
                        }, {
                            header: "占比",
                            dataIndex: "no_pay_ratio",
                            menuDisabled: true,
                            sortable: true,
                            format: '0,0',
                            align: "right",
                            summaryType: 'average',
                            summaryRenderer: function (value, summaryData, dataIndex) {
                                return ' <span style="color:blue;">' + value.toFixed() + '</span>';
                            },
                            width: 60
                        }]
                },
                {
                    text: "<span style='color:red'>支付失败</span>",
                    columns: [
                        {
                            header: "数量",
                            dataIndex: "pay_fail_num",
                            menuDisabled: true,
                            sortable: true,
                            format: '0,0',
                            align: "right",
                            summaryType: 'sum',
                            width: 60
                        }, {
                            header: "金额",
                            dataIndex: "pay_fail_sum",
                            menuDisabled: true,
                            sortable: true,
                            renderer: function (v, m) {
                                return ' <span style="color:red;">' + Ext.util.Format.usMoney(v) + '</span>';
                            },
                            format: '0,0.00',
                            align: 'right',
                            summaryType: 'sum',
                            width: 90
                        }, {
                            header: "占比",
                            dataIndex: "pay_fail_ratio",
                            menuDisabled: true,
                            sortable: true,
                            format: '0,0',
                            align: "right",
                            summaryType: 'average',
                            summaryRenderer: function (value, summaryData, dataIndex) {
                                return ' <span style="color:red;">' + value.toFixed() + '</span>';
                            },
                            width: 60
                        }]
                }
            ],
            store: store,
            listeners: {
                select: function () {
                    //根据选中的国家查询州的数据
                    me.freshCountryGrid()
                }
            },

            bbar: [{
                id: "skuPagingToolbar",
                xtype: "pagingtoolbar",
                border: 0,
                store: store
            }, "-", {
                xtype: "displayfield",
                value: "每页显示"
            }, {
                id: "comboCountPerPage",
                xtype: "combobox",
                editable: false,
                width: 60,
                store: Ext.create("Ext.data.ArrayStore", {
                    fields: ["text"],
                    data: [["20"], ["50"], ["100"],
                        ["300"], ["1000"]]
                }),
                value: 1000,
                listeners: {
                    change: {
                        fn: function () {
                            store.pageSize    = Ext
                                .getCmp("comboCountPerPage")
                                .getValue();
                            store.currentPage = 1;
                            Ext.getCmp("skuPagingToolbar")
                                .doRefresh();
                        },
                        scope: me
                    }
                }
            }, {
                xtype: "displayfield",
                value: "条记录"
            }]
        });

        return me.__SKUGrid;
    },
    /**
     * 根据选中的sku进行按国家的统计
     */
    freshCountryGrid: function () {
        var me = this;

        var item = me.getSKUGrid().getSelectionModel().getSelection();
        if (item == null || item.length != 1) {
            return;
        }

        var row     = item[0];
        me.__curSku = row.get('sku');
        Ext.getCmp("countryPagingToolbar")
            .doRefresh();
    },
    /**
     * 根据选中的sku和国家进行按州的统计
     */
    freshStateGrid: function () {
        var me = this;

        var item = me.getCountryGrid().getSelectionModel().getSelection();
        if (item == null || item.length != 1) {
            return;
        }

        var row         = item[0];
        me.__curCountry = row.get('country');
        Ext.getCmp("statePagingToolbar")
            .doRefresh();
    },
    /**
     * 生成国家统计表格
     * @returns {Ext.grid.Panel|*}
     */
    getCountryGrid: function () {
        var me = this;
        if (me.__CountryGrid) {
            return me.__CountryGrid;
        }

        var modelName = "PSIReportAporroProductReportCountry";
        Ext.define(modelName, {
            extend: "Ext.data.Model",
            fields: [
                {name: "country",             type: 'string'},
                {name: "pay_num",           type: 'number'},
                {name: "pay_sum",           type: 'number'},
                {name: "pay_ratio",         type: 'number'},
                {name: "no_pay_num",        type: 'number'},
                {name: "no_pay_sum",        type: 'number'},
                {name: "no_pay_ratio",      type: 'number'},
                {name: "pay_fail_num",      type: 'number'},
                {name: "pay_fail_sum",      type: 'number'},
                {name: "pay_fail_ratio",    type: 'number'}
            ]
        });
        var store = Ext.create("Ext.data.Store", {
            autoLoad: false,
            model: modelName,
            data: [],
            pageSize: 1000,
            proxy: {
                type: "ajax",
                actionMethods: {
                    read: "POST"
                },
                url: PSI.Const.BASE_URL
                + "Home/Report/aporroProductReportBySkuCountry",
                reader: {
                    root: 'dataList',
                    totalProperty: 'totalCount'
                }
            }
        });
        store.on("beforeload", function () {
            store.proxy.extraParams = me.getCountryQueryParam();
        });

        me.__CountryGrid = Ext.create("Ext.grid.Panel", {
            viewConfig: {
                enableTextSelection: true
            },
            border: 0,
            columnLines: true,
            features: [{
                ftype: 'summary'
            }],
            columns: [{
                xtype: "rownumberer",
                width: 40
            }, {
                header: "国家",
                dataIndex: "country",
                menuDisabled: true,
                sortable: true,
                width: 140,
                summaryType: 'count',
                summaryRenderer: function (value, summaryData, dataIndex) {
                    if (value > 0) {
                        return '合计:' + value;
                    }
                }
            },
                {
                    text: "<span style='color:green'>已支付</span>",
                    columns: [
                        {
                            text: "数量",
                            align: "right",
                            width: 60,
                            dataIndex: 'pay_num',
                            sortable: true,
                            summaryType: 'sum'
                        },
                        {
                            text: "金额",
                            align: "right",
                            width: 90,
                            dataIndex: 'pay_sum',
                            sortable: true,
                            summaryType: 'sum',
                            renderer: function (v, m) {
                                return ' <span style="color:green;">' + Ext.util.Format.usMoney(v) + '</span>';
                            },
                        },
                        {
                            text: "占比",
                            align: "right",
                            width: 60,
                            format: '0,0',
                            dataIndex: 'pay_ratio',
                            sortable: true,
                            summaryType: 'average',
                            summaryRenderer: function (value, summaryData, dataIndex) {
                                return value.toFixed();
                            },
                        }]
                },
                {
                    text: "<span style='color:blue'>未支付</span>",
                    columns: [
                        {
                            header: "数量",
                            dataIndex: "no_pay_num",
                            menuDisabled: true,
                            align: "right",
                            format: '0,0',
                            sortable: true,
                            summaryType: 'sum',
                            width: 60
                        }, {
                            header: "金额",
                            dataIndex: "no_pay_sum",
                            menuDisabled: true,
                            align: "right",
                            sortable: true,
                            renderer: function (v, m) {
                                return ' <span style="color:blue;">' + Ext.util.Format.usMoney(v) + '</span>';
                            },
                            summaryType: 'sum',
                            width: 90
                        }, {
                            header: "占比",
                            dataIndex: "no_pay_ratio",
                            menuDisabled: true,
                            sortable: true,
                            format: '0,0',
                            align: "right",
                            summaryType: 'average',
                            summaryRenderer: function (value, summaryData, dataIndex) {
                                return ' <span style="color:blue;">' + value.toFixed() + '</span>';
                            },
                            width: 60
                        }]
                },
                {
                    text: "<span style='color:red'>支付失败</span>",
                    columns: [
                        {
                            header: "数量",
                            dataIndex: "pay_fail_num",
                            menuDisabled: true,
                            sortable: true,
                            format: '0,0',
                            align: "right",
                            summaryType: 'sum',
                            width: 60
                        }, {
                            header: "金额",
                            dataIndex: "pay_fail_sum",
                            menuDisabled: true,
                            sortable: true,
                            renderer: function (v, m) {
                                return ' <span style="color:red;">' + Ext.util.Format.usMoney(v) + '</span>';
                            },
                            format: '0,0.00',
                            align: 'right',
                            summaryType: 'sum',
                            width: 90
                        }, {
                            header: "占比",
                            dataIndex: "pay_fail_ratio",
                            menuDisabled: true,
                            sortable: true,
                            format: '0,0',
                            align: "right",
                            summaryType: 'average',
                            summaryRenderer: function (value, summaryData, dataIndex) {
                                return ' <span style="color:red;">' + value.toFixed() + '</span>';
                            },
                            width: 60
                        }]
                }
            ],
            store: store,
            bbar: [{
                id: "countryPagingToolbar",
                xtype: "pagingtoolbar",
                border: 0,
                store: store
            }, "-", {
                xtype: "displayfield",
                value: "每页显示"
            }, {
                id: "countryComboCountPerPage",
                xtype: "combobox",
                editable: false,
                width: 60,
                store: Ext.create("Ext.data.ArrayStore", {
                    fields: ["text"],
                    data: [["20"], ["50"], ["100"],
                        ["300"], ["1000"]]
                }),
                value: 1000,
                listeners: {
                    change: {
                        fn: function () {
                            store.pageSize    = Ext
                                .getCmp("countryComboCountPerPage")
                                .getValue();
                            store.currentPage = 1;
                            Ext.getCmp("countryPagingToolbar")
                                .doRefresh();
                        },
                        scope: me
                    }
                }
            }, {
                xtype: "displayfield",
                value: "条记录"
            }],
            listeners: {
                select: function () {
                    //根据选中的国家查询州的数据
                    me.freshStateGrid()
                }
            }
        });

        return me.__CountryGrid;
    },
    /**
     * 获取国家统计查询条件
     * @returns {{}}
     */
    getCountryQueryParam: function () {
        var me = this;

        var result = {};

        if (!me.__curSku) {
            alert("请先选中sku");
            return result;
        }

        result.sku = me.__curSku;

        var dt = Ext.getCmp("editQueryFromDT").getValue();
        if (dt) {
            result.fromDT = Ext.Date.format(dt, "Y-m-d");
        }

        var dt = Ext.getCmp("editQueryToDT").getValue();
        if (dt) {
            result.toDT = Ext.Date.format(dt, "Y-m-d");
        }

        return result;
    },
    /**
     * 获取州统计查询条件
     * @returns {{}}
     */
    getStateQueryParam: function () {
        var me = this;

        var result = {};

        if (!me.__curSku) {
            alert("请先选中sku");
            return result;
        }

        if (!me.__curCountry) {
            alert("请先选中国家");
            return result;
        }

        result.sku     = me.__curSku;
        result.country = me.__curCountry;
        var dt         = Ext.getCmp("editQueryFromDT").getValue();
        if (dt) {
            result.fromDT = Ext.Date.format(dt, "Y-m-d");
        }

        var dt = Ext.getCmp("editQueryToDT").getValue();
        if (dt) {
            result.toDT = Ext.Date.format(dt, "Y-m-d");
        }

        return result;
    },
    /**
     * 生成州省统计表格
     * @returns {Ext.grid.Panel|*}
     */
    getStateGrid: function () {
        var me = this;
        if (me.__StateGrid) {
            return me.__StateGrid;
        }

        var modelName = "PSIReportAporroProductReportState";
        Ext.define(modelName, {
            extend: "Ext.data.Model",
            fields: [
                {name: "state",             type: 'string'},
                {name: "pay_num",           type: 'number'},
                {name: "pay_sum",           type: 'number'},
                {name: "pay_ratio",         type: 'number'},
                {name: "no_pay_num",        type: 'number'},
                {name: "no_pay_sum",        type: 'number'},
                {name: "no_pay_ratio",      type: 'number'},
                {name: "pay_fail_num",      type: 'number'},
                {name: "pay_fail_sum",      type: 'number'},
                {name: "pay_fail_ratio",    type: 'number'}
            ]
        });
        var store = Ext.create("Ext.data.Store", {
            autoLoad: false,
            model: modelName,
            data: [],
            pageSize: 1000,
            proxy: {
                type: "ajax",
                actionMethods: {
                    read: "POST"
                },
                url: PSI.Const.BASE_URL
                + "Home/Report/aporroProductReportBySkuState",
                reader: {
                    root: 'dataList',
                    totalProperty: 'totalCount'
                }
            }
        });
        store.on("beforeload", function () {
            store.proxy.extraParams = me.getStateQueryParam();
        });

        me.__StateGrid = Ext.create("Ext.grid.Panel", {
            viewConfig: {
                enableTextSelection: true
            },
            border: 0,
            columnLines: true,
            features: [{
                ftype: 'summary'
            }],
            columns: [{
                xtype: "rownumberer",
                width: 40
            }, {
                header: "州省",
                dataIndex: "state",
                menuDisabled: true,
                sortable: true,
                width: 140,
                summaryType: 'count',
                summaryRenderer: function (value, summaryData, dataIndex) {
                    if (value > 0) {
                        return '合计:' + value;
                    }
                }
            },
                {
                    text: "<span style='color:green'>已支付</span>",
                    columns: [
                        {
                            text: "数量",
                            align: "right",
                            width: 60,
                            dataIndex: 'pay_num',
                            sortable: true,
                            summaryType: 'sum'
                        },
                        {
                            text: "金额",
                            align: "right",
                            width: 90,
                            dataIndex: 'pay_sum',
                            sortable: true,
                            summaryType: 'sum',
                            renderer: function (v, m) {
                                return ' <span style="color:green;">' + Ext.util.Format.usMoney(v) + '</span>';
                            },
                        },
                        {
                            text: "占比",
                            align: "right",
                            width: 60,
                            format: '0,0',
                            dataIndex: 'pay_ratio',
                            sortable: true,
                            summaryType: 'average',
                            summaryRenderer: function (value, summaryData, dataIndex) {
                                return value.toFixed();
                            },
                        }]
                },
                {
                    text: "<span style='color:blue'>未支付</span>",
                    columns: [
                        {
                            header: "数量",
                            dataIndex: "no_pay_num",
                            menuDisabled: true,
                            align: "right",
                            format: '0,0',
                            sortable: true,
                            summaryType: 'sum',
                            width: 60
                        }, {
                            header: "金额",
                            dataIndex: "no_pay_sum",
                            menuDisabled: true,
                            align: "right",
                            sortable: true,
                            renderer: function (v, m) {
                                return ' <span style="color:blue;">' + Ext.util.Format.usMoney(v) + '</span>';
                            },
                            summaryType: 'sum',
                            width: 90
                        }, {
                            header: "占比",
                            dataIndex: "no_pay_ratio",
                            menuDisabled: true,
                            sortable: true,
                            format: '0,0',
                            align: "right",
                            summaryType: 'average',
                            summaryRenderer: function (value, summaryData, dataIndex) {
                                return ' <span style="color:blue;">' + value.toFixed() + '</span>';
                            },
                            width: 60
                        }]
                },
                {
                    text: "<span style='color:red'>支付失败</span>",
                    columns: [
                        {
                            header: "数量",
                            dataIndex: "pay_fail_num",
                            menuDisabled: true,
                            sortable: true,
                            format: '0,0',
                            align: "right",
                            summaryType: 'sum',
                            width: 60
                        }, {
                            header: "金额",
                            dataIndex: "pay_fail_sum",
                            menuDisabled: true,
                            sortable: true,
                            renderer: function (v, m) {
                                return ' <span style="color:red;">' + Ext.util.Format.usMoney(v) + '</span>';
                            },
                            format: '0,0.00',
                            align: 'right',
                            summaryType: 'sum',
                            width: 90
                        }, {
                            header: "占比",
                            dataIndex: "pay_fail_ratio",
                            menuDisabled: true,
                            sortable: true,
                            format: '0,0',
                            align: "right",
                            summaryType: 'average',
                            summaryRenderer: function (value, summaryData, dataIndex) {
                                return ' <span style="color:red;">' + value.toFixed() + '</span>';
                            },
                            width: 60
                        }]
                }
            ],
            store: store,
            bbar: [{
                id: "statePagingToolbar",
                xtype: "pagingtoolbar",
                border: 0,
                store: store
            }, "-", {
                xtype: "displayfield",
                value: "每页显示"
            }, {
                id: "stateComboCountPerPage",
                xtype: "combobox",
                editable: false,
                width: 60,
                store: Ext.create("Ext.data.ArrayStore", {
                    fields: ["text"],
                    data: [["20"], ["50"], ["100"],
                        ["300"], ["1000"]]
                }),
                value: 1000,
                listeners: {
                    change: {
                        fn: function () {
                            store.pageSize    = Ext
                                .getCmp("stateComboCountPerPage")
                                .getValue();
                            store.currentPage = 1;
                            Ext.getCmp("statePagingToolbar")
                                .doRefresh();
                        },
                        scope: me
                    }
                }
            }, {
                xtype: "displayfield",
                value: "条记录"
            }],
            listeners: {}
        });

        return me.__StateGrid;
    },

    //查询
    onQuery: function () {
        this.refreshSkuGrid();
    },

    /**
     * 清除查询条件
     */
    onClearQuery: function () {
        var me = this;

        Ext.getCmp("editQueryFromDT").setValue(new Date());
        Ext.getCmp("editQueryToDT").setValue(new Date());

        me.onQuery();
    },

    /**
     * 获取查询条件
     * @returns {{}}
     */
    getSkuQueryParam: function () {
        var me = this;

        var result = {};

        var sku = Ext.getCmp("editQuerySku").getValue();
        if (sku) {
            result.sku = sku;
        }

        var dt = Ext.getCmp("editQueryFromDT").getValue();
        if (dt) {
            result.fromDT = Ext.Date.format(dt, "Y-m-d");
        }

        var dt = Ext.getCmp("editQueryToDT").getValue();
        if (dt) {
            result.toDT = Ext.Date.format(dt, "Y-m-d");
        }

        return result;
    },

    /**
     * 刷新sku统计报表
     * @param id
     */
    refreshSkuGrid: function (id) {
        Ext.getCmp("skuPagingToolbar").doRefresh();
    }
});


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值