• ag-grid动态生成表头及绑定表数据


    ag-grid动态加载表数据

      优势:灵活度高,代码复用性强

    实现步骤:

    1.  安装 ag-grid-vue 组件,

            在vue项目中,运行如下命令即可安装

            npm install --save ag-grid-community ag-grid-vue vue-property-decorator@^8.0.0

          安装完成后,在 package.json 文件中可以看到如下组件,说明已经安装成功

       

         在后续运行项目过程中,如果提示要安装  enterprise 组件,根据控制台提示的命令安装即可。

        npm install --save ag-grid-enterprise

    2. 在vue页面中引入组件 

    import "ag-grid-community/dist/styles/ag-grid.css";
    import "ag-grid-community/dist/styles/ag-theme-balham.css"
    import {AgGridVue} from "ag-grid-vue"
    import "ag-grid-enterprise"  //关键依赖:引入之后组件才会生效

     其中:ag-grid-enterprise 是非常关键的依赖,一定要导入,aggrid组件才会生效。

    3. 在 components 方法中注册 AgGridVue

       

    4. 搭建aggrid框架

          <!--右侧内容栏(动态表格)-->
          <div class="commendContent" id="ag-gridStyle">
            <ag-grid-vue
                    class="table ag-theme-balham"
                    v-show="isSee"
                    id="myGrid"
                    :columnDefs="columnDefs"
                    :rowData="rowData"
                    :sideBar="sideBar"
                    :enableColResize="true"
                    row-selection="multiple"
                    @selection-changed="onSelectionChanged"
                    @gridReady="onGridReady"
                    :tooltipShowDelay="tooltipShowDelay"
                    :localeText="localeText"
                    :height="tableMaxHeight"
            >
            </ag-grid-vue>
          </div>

      框架搭建完成之后,一定要指定table的高度,否则列表不会展示数据

      

      5. 定义aggrid相关变量及完成汉化

          //ag-grid相关
          domLayout:null,  //高度自适应,根据获取到的数据条数自适应高    度,加载速度慢,页面卡顿,不推荐使用
          tooltipShowDelay: [],  //鼠标悬浮在单元格上,显示全名
          gridOptions: {},
          gridApi: {},
          columnApi: [],
          //定义ag-grid列
          columnDefs: [],
          //ag-grid需要显示的数据
          rowData: [],
          //ag-grid列表右侧的过滤器
          sideBar: [],
          //存放多选框选中的数据
          selectRows: [],
          // 当输入sql错误和结果集为0的时候不显示aggrid表格
          isSee: true,
          globalDropDownBox: false, //移入显示下拉框
          globalDropTop: 0,
          globalDropLeft: 0,
          timeOut: setTimeout,
          modelDetailRelation: [], // 存放模型详细关联表
          countData:'',
          selectedData:0,
          //ag-grid汉化
          localeText:{
            // for filter panel
            page: '页',
            more: '更多',
            to: '到',
            /* of: 'daOf', */
            next: '下一页',
            last: '最后',
            first: '第一',
            previous: '以前的',
            loadingOoo: '加载中...',
            // Row:"行",
            // 'Row Groups':"行分组",
            // for set filter
            selectAll: '全部选择',
            searchOoo: '搜索...',
            blanks: '空',
            Column:"列",
            labels:"标签",
            // for number filter and text filter
            filterOoo: '过滤',
            applyFilter: '过滤中...',
            equals: '等于',
            notEqual: '不等于',
            // for number filter
            lessThan: '少于',
            greaterThan: '多于',
            lessThanOrEqual: '小于等于',
            greaterThanOrEqual: '大于等于',
            inRange: '在范围内',
            // for text filter
            contains: '包含',
            notContains: '不包含',
            startsWith: '开始',
            endsWith: '结束',
            // filter conditions
            andCondition: '并且',
            orCondition: '或者',
            // the header of the default group column
            // group: '分组',
            // tool panel
            columns: '列',
            filters: '过滤器',
            rowGroupColumns: '行列组',
            // rowGroupColumnsEmptyMessage: '行列组为空',
            valueColumns: '列值',
            pivotMode: '透视模式',
            // groups: '分组',
            values: '值',
            // pivots: '中心点',
            valueColumnsEmptyMessage: '列值为空',
            // pivotColumnsEmptyMessage: '中心点为空',
            toolPanelButton: '工具按钮',
            // other
            noRowsToShow: '暂时没有要展示的数据',
            // enterprise menu
            pinColumn: '列位置调整',
            valueAggregation: '聚合值',
            autosizeThiscolumn: '自动调整此列大小',
            autosizeAllColumns: '自动调整所有列的大小',
            groupBy: '分组',
            ungroupBy: '取消分组',
            resetColumns: '重置列',
            expandAll: '展开所有',
            collapseAll: '关闭所有',
            toolPanel: '工具',
            export: '导出',
            csvExport: 'CSV 导出',
            excelExport: 'Excel 导出(.xlsx)',
            excelXmlExport: 'Excel 导出(.xml)',
            // enterprise menu pinning
            PinColumn:"固定",
            pinLeft: '居左',
            pinRight: '居右',
            noPin: '默认',
            // enterprise menu aggregation and status bar
            sum: '合计',
            min: '最小值',
            max: '最大值',
            /* none: 'laNone', */
            count: '计数',
            average: '平均值',
            avg : '平均值',
            // standard menu
            copy: '复制',
            copyWithHeaders: '携表头复制',
            ctrlC: 'ctrl-C',
            paste: '粘贴',
            ctrlV: 'ctrl-V'
          },             

    6. 开启列表右侧的工具面板

          this.gridOptions = {}
          this.sideBar = true;  //开启右侧面板的关键代码
          this.domLayout = 'autoHeight';  //高度自适应

    7. aggrid创建完后之后要执行的事件

        onGridReady(params) {
          // 获取gridApi
          this.gridApi = params.api;
          this.columnApi = params.columnApi;
          // 这时就可以通过gridApi调用ag-grid的传统方法了
          this.gridApi.sizeColumnsToFit();
          //默认隐藏右侧栏
          this.gridApi.closeToolPanel();
          this.gridApi.getDisplayedRowCount();
    
        }

    完整的aggrid动态加载实例:

    <template>
        <div>
            <el-card class="box-card" style="margin-left: 14px; 100%;float: right;">
                <div>
                    <el-button
                            class="buttonStyle"
                            type="primary"
                            plain
                            @click="submitForm()"
                    >
                        提交审核
                    </el-button>
                    <ag-grid-vue
                            class="table ag-theme-balham"
                            v-show="isSee"
                            id="myGrid"
                            :columnDefs="columnDefs"
                            :rowData="rowData"
                            :sideBar="sideBar"
                            :enableColResize="true"
                            row-selection="multiple"
                            :localeText="localeText"
                    >
                    </ag-grid-vue>
                </div>
                <!--分页组件-->
                <div class="block"
                     style="float: right;margin-right: 15px;margin-top: 10px;">
                    <el-pagination
                            @size-change="handleSizeChange($event)"
                            @current-change="handleCurrentChange($event)"
                            :current-page="page.current"
                            :page-sizes="[10, 15, 20]"
                            :page-size="page.size"
                            layout="total, sizes, prev, pager, next, jumper"
                            :total="this.page.total">
                    </el-pagination>
                </div>
            </el-card>
        </div>
    </template>
    
    <script>
    import "ag-grid-community/dist/styles/ag-grid.css";
    import "ag-grid-community/dist/styles/ag-theme-balham.css";
    import { AgGridVue } from "ag-grid-vue"
    import "ag-grid-enterprise"  //关键依赖:引入之后组件才会生效
    import {loadContentData} from "@/api/warning/warningdata";
    
    export default {
        name: "show",
        components:{
            AgGridVue,
        },
        data (){
            return{
                gridOptions: {},
                gridApi: {},
                columnApi: [],
                //定义ag-grid列
                columnDefs: [],
                //ag-grid需要显示的数据
                rowData: [],
                //ag-grid列表右侧的过滤器
                sideBar: [],
                //存放多选框选中的数据
                selectRows: [],
                // 当输入sql错误和结果集为0的时候不显示aggrid表格
                isSee: true,
                //ag-grid汉化
                localeText:{
                    // for filter panel
                    page: '页',
                    more: '更多',
                    to: '到',
                    /* of: 'daOf', */
                    next: '下一页',
                    last: '最后',
                    first: '第一',
                    previous: '以前的',
                    loadingOoo: '加载中...',
                    // Row:"行",
                    // 'Row Groups':"行分组",
                    // for set filter
                    selectAll: '全部选择',
                    searchOoo: '搜索...',
                    blanks: '空',
                    Column:"列",
                    labels:"标签",
                    // for number filter and text filter
                    filterOoo: '过滤',
                    applyFilter: '过滤中...',
                    equals: '等于',
                    notEqual: '不等于',
                    // for number filter
                    lessThan: '少于',
                    greaterThan: '多于',
                    lessThanOrEqual: '小于等于',
                    greaterThanOrEqual: '大于等于',
                    inRange: '在范围内',
                    // for text filter
                    contains: '包含',
                    notContains: '不包含',
                    startsWith: '开始',
                    endsWith: '结束',
                    // filter conditions
                    andCondition: '并且',
                    orCondition: '或者',
                    // the header of the default group column
                    // group: '分组',
                    // tool panel
                    columns: '列',
                    filters: '过滤器',
                    rowGroupColumns: '行列组',
                    // rowGroupColumnsEmptyMessage: '行列组为空',
                    valueColumns: '列值',
                    pivotMode: '透视模式',
                    // groups: '分组',
                    values: '值',
                    // pivots: '中心点',
                    valueColumnsEmptyMessage: '列值为空',
                    // pivotColumnsEmptyMessage: '中心点为空',
                    toolPanelButton: '工具按钮',
                    // other
                    noRowsToShow: '没有可以展示的数据',
                    // enterprise menu
                    pinColumn: '列位置调整',
                    valueAggregation: '聚合值',
                    autosizeThiscolumn: '自动调整此列大小',
                    autosizeAllColumns: '自动调整所有列的大小',
                    groupBy: '分组',
                    ungroupBy: '取消分组',
                    resetColumns: '重置列',
                    expandAll: '展开所有',
                    collapseAll: '关闭所有',
                    toolPanel: '工具',
                    export: '导出',
                    csvExport: 'CSV 导出',
                    excelExport: 'Excel 导出(.xlsx)',
                    excelXmlExport: 'Excel 导出(.xml)',
                    // enterprise menu pinning
                    PinColumn:"固定",
                    pinLeft: '居左',
                    pinRight: '居右',
                    noPin: '默认',
                    // enterprise menu aggregation and status bar
                    sum: '合计',
                    min: '最小值',
                    max: '最大值',
                    /* none: 'laNone', */
                    count: '计数',
                    average: '平均值',
                    avg : '平均值',
                    // standard menu
                    copy: '复制',
                    copyWithHeaders: '携表头复制',
                    ctrlC: 'ctrl-C',
                    paste: '粘贴',
                    ctrlV: 'ctrl-V'
                },
                //分页相关(参数)
                page: {current: 1, size: 10, total: 0, records: []},
                pageQueryTree: {
                    condition: {},
                    pageNo: 1,
                    pageSize:10,
                    sortBy: 'asc',
                    sortName: 'create_time',
                    modelParamName: '',
                },
                beforeTableName: ''
            };
        },
        methods:{
            //获取预警表数据,将返回的数据放在ag-grid-vue 组件上
            getData(tableName){
                this.pageQueryTree.condition.单位名称 = tableName;
                this.pageQueryTree.condition.统一社会信用代码 = '';
                loadContentData(this.pageQueryTree).then(resp =>{
                    var jsonStr = JSON.stringify(resp.data);
                    var items = resp.data.columnData
                    this.columnDefs = []  //表头
                    for(let i in items){
                        //过滤掉pk主键
                        if ("PK主键" !== items[i].columnName){
                            if (1 == i){
                                var obj ={
                                    headerName: items[i].columnName,
                                    field: items[i].columnName,
                                    filter: true,
                                    //flex: 1,    该字段会影响列的宽度
                                    editable: true,
                                    checkboxSelection: true
                                };
                                this.columnDefs.push(obj);
                            }else {
                                var obj ={
                                    headerName: items[i].columnName,
                                    field: items[i].columnName,
                                    filter: true,
                                    //flex: 1,    该字段会影响列的宽度
                                    editable: true,
                                };
                                this.columnDefs.push(obj);
                            }
                        }
                    };
                    //获取表数据
                    this.rowData = []
                    for (var i = 0; i < resp.data.specifyData.records.length;i++){
                        //alert("返回数据的长度是:"+resp.data.specifyData.records.length)
                        var items = resp.data.specifyData.records[i];
                        if (items.状态 === 0) {
                            items.状态 = '待挂号'
                        } else if (items.状态 === 1) {
                            items.状态 = '挂号中'
                        } else if (items.状态 === 2) {
                            items.状态 = '预警待查'
                        } else { // 3
                            items.状态 = '已销号'
                        }
                        this.rowData.push(items);
                    }
                    //分页的总条数
                    this.page.total = resp.data.specifyData.total;
                })
                this.gridOptions = {}
                this.sideBar = true;   //这是ag-grid列表右侧的筛选器,不能删除
            },
            //获取所选节点的列表
            submitForm(){
    
            }
        },
        mounted() {
            this.gridApi = this.gridOptions.api;
            this.columnApi = this.gridOptions.columnApi;
        }
    }
    </script>
    
    <style scoped>
        .table {
             600px;
            height: 520px;
        }
        #myGrid {
            flex: 1 1 0px;
             100%;
        }
        .buttonStyle {
            background: #559ed4;
             70px;
            height: 24px;
            padding: 4px;
            border-radius: 4px;
            position: relative;
            color: #ffffff;
            font-style: normal;
            font-family: "iconfont" !important;
            font-weight: normal !important;
            margin-right: 6px;
            margin-left: 970px;
            margin-bottom: 2px;
        }
    </style>

       

  • 相关阅读:
    ubuntu下安装配置apache2(含虚拟主机配置)
    ubuntu安装软件包apt-get和dpkg方法
    python日期,时间函数
    python多线程
    截取utf8中文字符串
    python解析json
    sqlite读写
    lambda,map,filter,reduce
    pyinstaller生成exe可执行程序
    对象练习
  • 原文地址:https://www.cnblogs.com/peaces/p/15013182.html
Copyright © 2020-2023  润新知