vue项目中使用ag-grid

news/2024/12/23 22:49:32 标签: vue.js, 前端, javascript

我这个项目中使用原因:

  1. 支持大数据量数据,滑动页面不会有白屏现象
  2. 可对当前列表中数据进行过滤

安装依赖

  1. ag-grid-vue
  2. ag-grid-community 我这里使用的社区版
  3. @ag-grid-community/locale 中文配置依赖

main.js

import "ag-grid-community/styles/ag-grid.css";
import "ag-grid-community/styles/ag-theme-balham.css"; //主题样式(除了balham,还有quartz、material、alpine)

vue.config.js

module: {
      rules: [{
        test: /\.mjs$/,
        include: /node_modules/,
        type: 'javascript/auto'
      }]
    },

关键代码

  1. template中(我这里没用自带的分页器,使用的是基于el-pagination封装的pagination组件)
<template>
<div class="app-table">
  <AgGridVue
     :style="styleClass"
     class="ag-theme-balham"
     v-loading="loading"
     :columnDefs="columns"
     :rowData="tableData"
     :defaultColDef="defaultColDef"
     :gridOptions="gridOptions"
     @grid-ready="onGridReady"
  />
  <pagination
     :total="total"
     :page.sync="queryParams.pageNum"
     :page-sizes="[100, 200, 500, 1000, 20000]"
     :limit.sync="queryParams.pageSize"
     :pager-count="queryParams.pagerCount ? queryParams.pagerCount : 7"
     @pagination="getList"
 />
</div>
</template>
  1. script中
<script>
import { AgGridVue } from "ag-grid-vue";
import { AG_GRID_LOCALE_CN } from "@ag-grid-community/locale"; // 汉化包
import Setter from "./Setter.vue"; //自定义组件-操作列按钮
export default {
	name: "demo",
	components: {
    	AgGridVue,
    	Setter,
   },
   computed: {
    styleClass() {
      return `width: 100%; height: ${this.tableH}`;
    },
  },
   data(){
		return {
			queryParams: {
        		pageNum: 1,
        		pageSize: 100,
      		},
			total: 0, // 数据量
			/**
       			* 列属性
       			* headerName 列名
       			* field 列匹配的字段
		    	* filter 是否可过滤
       			* sortable 是否可排序
       			* tooltipField 鼠标悬浮是单元格内容的tooltip提示【未验证】
      	    	* checkboxSelection: true, //该列前带CheckBox复选框【未验证】
       			* hide 配置是否显示
       			* wrapText: true,//单元格文字自动换行*
       			* autoHeight: true,//单元格根据内容自动调整高度
       			* suppressMovable: true, //禁止拖拽列
       	*/
      	columns: [
        	{
          		headerName: "", //选择列头部显示的文字,可以为空
          		checkboxSelection: true, //设置为ture显示为复选框
          		headerCheckboxSelection: true, //表头是否也显示复选框,全选反选用
          		pinned: "left", //固定再左边
          		width: 50, //列的宽度
          		sortable: false,
          		resizable: false,
          		filter: false,
          		suppressMovable: true,
            },
            {
          		headerName: "序号", // 必填,显示在表头的文本
          		width: 70, // 宽度
          		cellRenderer: function (params) {
            		return parseInt(params.node.id) + 1;
          		},
          		cellStyle: {
            		// 设置本栏的CSS样式
            		"text-align": "left",
            		"text-indent": "10px",
          		},
          		pinned: "left",
          		suppressSizeToFit: true,
          		suppressSorting: true,
          		suppressMenu: true,
          		sortable: false,
          		filter: false,
          		suppressMovable: true,
        	},
        	{
          		headerName: "分公司",
          		field: "comName",
          		tooltipField: "comName",
          		width: 100,
          		pinned: "left",
          		tooltipValueGetter: (p) => p.value,
        	},
        	{
          		headerName: "小区名",
          		field: "areaName",
          		tooltipField: "areaName",
          		width: 100,
          		pinned: "left",
          		filter: true,
          		wrapText: true,
          		autoHeight: true,
          		tooltipValueGetter: (p) => p.value,
        	},
        	{
          		headerName: "来源",
          		field: "equipManagePlatform",
          		dictName: "source_type",
          		valueFormatter: this.sexFormatter, // 值去匹配字典项
          		width: 140,
          		filter: true,
        	},
        	{
          		headerName: "操作",
          		field: "action",
          		filter: false,
          		sortable: false,
          		pinned: "right",
          		width: 320,
          		cellRenderer: "Setter",
          		cellRendererParams: {
            		editFun: this.editFun,
            		delFun: this.delFun,
          		},
        	},
      ],
      tableData: [],
			defaultColDef: {
            	// sortable: true, //可排序
            	// resizable: true, //可拖动改变列宽
            	filter: true, //可过滤筛选
            	// editable: true, //是否可编辑单元格
            	enablePivot: true,
           },
      	   gridApi: null,
           gridColumnApi: null,
           gridOptions: {
           	id: "agTableid",
            tooltipShowDelay: 1000, // tooltip 只有添加 tooltipShowDelay 才会显示
            localeText: AG_GRID_LOCALE_CN,
            rowSelection: "multiple", //设置多好可选
            rowMultiSelectWithClick: true, //点击行可取消选择
            // suppressRowDeselection: false,
            toolPanel: "side",
            sideBar: true,
         },
        gridApi: null,
        gridColumnApi: null,	
		}
	},
	methods: {
		getList() {
      		this.loading = true;
      		const data = {
        		...this.queryParams,
      		};
      		listApi(data)
        	.then((res) => {
          		this.loading = false;
          		this.tableData = res.rows;
          		this.total = res.total;
        		})
            .finally(() => {
          		this.$refs.baseTable.toggleSelection();
        	});
   		},
		editFun(){},
		delFun(){},
		// 匹配字典项(可提取到utils中封装为公共方法)
    	sexFormatter(item) {
      		let dictList = [];
      		let foundItem = {};
      		let all_dict_data = localStorage.getItem("all_dict");
      		const dicts = all_dict_data ? JSON.parse(all_dict_data) : [];
      		dictList = dicts.filter(
        		(dictItem) => dictItem.dictType == item?.colDef?.dictName
      		);

      		foundItem = dictList.find((curItem) => curItem.dictValue == item.value);
      		return foundItem ? foundItem.dictLabel : item.value ? item.value : "-";
    		},
    		onGridReady(params) {
      			this.gridApi = params.api;
      			this.gridColumnApi = params.columnApi;
    		},
    		//获取选中行数据
    		getSelect() {
      			if (this.gridApi) {
        			let rows = this.gridApi.getSelectedRows();
        			this.selectList = JSON.parse(JSON.stringify(rows));
      			}
    		},
	}
}
</script>
  1. setter组件
<template>
  <div class="setter">
    <el-button size="mini" type="text" @click="editFun">编辑</el-button>
    <el-button size="mini" type="text" @click="delFun">删除</el-button>
  </div>
</template>

<script>
export default {
  name: "Setter",
  methods: {
    editFun() {
      this.params.editFun(this.params.data);
    },
    delFun() {
      this.params.delFun(this.params.data);
    },
  },
};
</script>

ag-grid分为:
AG Grid Community 社区版(免费的支持的功能相对少)
AG Grid Enterprise 企业版(会支持像侧边过滤工具栏、列配置栏等)
Enterprise Bundle(在企业版基础上支持 AG Charts)

详细功能英文文档
ag-grid-community社区版中文文档
参考文章


http://www.niftyadmin.cn/n/5797091.html

相关文章

滑动窗口 + 算法复习

维护一个满足条件的窗口大小&#xff0c;然后进行双指针移动 1.最长子串 题目链接&#xff1a;1.最长子串 - 蓝桥云课 #include<bits/stdc.h> #define int long long using namespace std; string s; int k; signed main() {int max_len0,left0;cin>>s>>k;…

序列化和反序列化(一)

因为通过这段时间的学习&#xff0c;发现&#xff0c;序列化和反序列化的考点和漏洞在平时遇到的还是比较多的&#xff0c;而且自己也没有特别去学习过这个知识点&#xff0c;所以在这里写一篇关于这里序列化和反序列话的博客&#xff0c;废话就停止在这里了。 在介绍具体的序列…

Python爬虫(5) --爬取网页视频

文章目录 爬虫爬取视频指定url发送请求UA伪装请求页面 获取想要的数据解析定位定位音视频位置 存放视频完整代码实现总结 爬虫 Python 爬虫是一种自动化工具&#xff0c;用于从互联网上抓取网页数据并提取有用的信息。Python 因其简洁的语法和丰富的库支持&#xff08;如 requ…

计算机网络之王道考研读书笔记-2

第 2 章 物理层 2.1 通信基础 2.1.1 基本概念 1.数据、信号与码元 通信的目的是传输信息。数据是指传送信息的实体。信号则是数据的电气或电磁表现&#xff0c;是数据在传输过程中的存在形式。码元是数字通信中数字信号的计量单位&#xff0c;这个时长内的信号称为 k 进制码…

JAVA基础:JavaDoc生成文档

JAVA基础:JavaDoc生成文档 javadoc命令是用来生成自己的API文档的 API API 是“Application Programming Interface”的缩写,中文意思是“应用程序编程接口”。 java中的API [JAVA官方网站中的API](Overview (Java Platform SE 8 )) 我们可以调用这些接口(API)来使用,…

1-Gin介绍与环境搭建 --[Gin 框架入门精讲与实战案例]

Gin 介绍 Gin 是一个用 Go&#xff08;Golang&#xff09;编写的 Web 框架&#xff0c;它以极高的性能和简洁的 API 设计而闻名。Gin 的设计灵感来自于 Martini 框架&#xff0c;但它的性能更优&#xff0c;延迟更低&#xff0c;非常适合构建高效的微服务和 RESTful API 服务。…

C++打造局域网聊天室第十二课: 客户端和服务端的切换

文章目录 前言一、补充说明二、客户端和服务端身份状态的切换三、点击关闭窗口按钮总结 前言 C打造局域网聊天室第十二课&#xff1a; 客户端和服务端的切换 一、补充说明 在C打造局域网聊天室第十一课&#xff1a; 程序关闭及线程的结束中描述的服务端线程的关闭和结束是存在…

Python调用open ai接口

要使用 Python 调用 OpenAI 的接口&#xff0c;您需要完成以下几个步骤&#xff1a; 1. **注册并获取 API 密钥** 2. **安装 OpenAI 的 Python 库** 3. **编写 Python 代码以调用 API** 以下是详细的步骤说明&#xff1a; --- ### 1. 注册并获取 API 密钥 首先&#xff0c…