当前位置: 首页 > news >正文

分享项目中使用 vxe-table 进行数据分组汇总斌支持排序

分享项目中使用 vxe-table 进行数据分组汇总斌支持排序,通过配置 aggregate-config.groupFields 指定分组字段

查看官网:https://vxetable.cn
gitbub:https://github.com/x-extends/vxe-table
gitee:https://gitee.com/x-extends/vxe-table

效果

Video_2025-11-14_143549-ezgif.com-video-to-gif-converter (2)

代码

通过 aggFunc 自动显示子项计数,如果需要自定义计算逻辑,比如合计数量,可以通过 aggregate-config.calcValuesMethod 自定义列的汇总计算值。

<template><div><vxe-grid v-bind="gridOptions"></vxe-grid></div>
</template><script setup>
import { reactive } from 'vue'const gridOptions = reactive({height: 500,aggregateConfig: {groupFields: ['role']},columns: [{ field: 'name', title: 'Name', minWidth: 300, rowGroupNode: true },{ field: 'role', title: 'Role' },{ field: 'sex', title: 'Sex' },{ field: 'age', title: 'Age', sortable: true, aggFunc: true },{ field: 'address', title: 'Address' }],data: [{ id: 10001, name: 'Test1', role: 'Develop', sex: 'Woman', age: 28, date: '2025-02-01', address: 'test abc' },{ id: 10002, name: 'Test2', role: 'Test', sex: 'Man', age: 22, date: '2025-01-01', address: 'Guangzhou' },{ id: 10003, name: 'Test3', role: 'PM', sex: 'Woman', age: 32, date: '2025-05-01', address: 'Shanghai' },{ id: 10004, name: 'Test4', role: 'Designer', sex: 'Man', age: 32, date: '2025-01-01', address: 'test abc' },{ id: 10005, name: 'Test5', role: 'Develop', sex: 'Man', age: 30, date: '2025-01-01', address: 'Shanghai' },{ id: 10006, name: 'Test6', role: 'Designer', sex: 'Man', age: 30, date: '2025-03-01', address: 'test abc' },{ id: 10007, name: 'Test7', role: 'Test', sex: 'Woman', age: 29, date: '2025-05-01', address: 'test abc' },{ id: 10008, name: 'Test8', role: 'PM', sex: 'Woman', age: 35, date: '2025-11-01', address: 'test abc' },{ id: 10009, name: 'Test9', role: 'Test', sex: 'Man', age: 21, date: '2025-05-01', address: 'test abc' },{ id: 10010, name: 'Test10', role: 'PM', sex: 'Woman', age: 28, date: '2025-03-01', address: 'test abc' },{ id: 10011, name: 'Test11', role: 'Test', sex: 'Woman', age: 29, date: '2025-03-01', address: 'test abc' },{ id: 10012, name: 'Test12', role: 'Develop', sex: 'Man', age: 37, date: '2025-10-01', address: 'test abc' },{ id: 10013, name: 'Test13', role: 'Test', sex: 'Woman', age: 24, date: '2025-02-01', address: 'test abc' },{ id: 10014, name: 'Test14', role: 'Develop', sex: 'Man', age: 34, date: '2025-08-01', address: 'test abc' },{ id: 10015, name: 'Test15', role: 'Designer', sex: 'Man', age: 21, date: '2025-05-01', address: 'test abc' },{ id: 10016, name: 'Test16', role: 'Designer', sex: 'Woman', age: 21, date: '2025-10-01', address: 'test abc' },{ id: 10017, name: 'Test17', role: 'Test', sex: 'Man', age: 31, date: '2025-12-01', address: 'test abc' },{ id: 10018, name: 'Test18', role: 'Develop', sex: 'Woman', age: 32, date: '2025-10-01', address: 'test abc' },{ id: 10019, name: 'Test19', role: 'Test', sex: 'Man', age: 37, date: '2025-02-01', address: 'test abc' },{ id: 10020, name: 'Test20', role: 'Develop', sex: 'Man', age: 41, date: '2025-03-01', address: 'test abc' }]
})
</script>

自定义汇总方式

通自定义 aggregate-config.calcValuesMethod 对子项进行汇总合计,具体计算逻辑自己写非常灵活。

image

<template><div><vxe-grid v-bind="gridOptions"></vxe-grid></div>
</template><script setup>
import { reactive } from 'vue'const gridOptions = reactive({height: 500,showOverflow: true,aggregateConfig: {groupFields: ['role'],calcValuesMethod ({ column, children }) {if (column.field === 'num') {let numSum = 0children.forEach(item => {numSum += item.num})return numSum}if (column.field === 'age') {let ageCount = 0children.forEach(item => {ageCount += item.age})return Math.floor(ageCount / children.length)}return 0}},columns: [{ type: 'seq', width: 70 },{ field: 'name', title: 'Name', minWidth: 300, rowGroupNode: true },{ field: 'role', title: 'Role' },{ field: 'num', title: 'Num', aggFunc: true },{ field: 'age', title: 'Age', aggFunc: true },{ field: 'address', title: 'Address' }],data: [{ id: 10001, name: 'Test1', role: 'Develop', sex: 'Woman', age: 28, num: 63, date: '2025-02-01', address: 'test abc' },{ id: 10002, name: 'Test2', role: 'Test', sex: 'Man', age: 22, num: 63, date: '2025-01-01', address: 'Guangzhou' },{ id: 10003, name: 'Test3', role: 'PM', sex: 'Woman', age: 32, num: 10, date: '2025-05-01', address: 'Shanghai' },{ id: 10004, name: 'Test4', role: 'Designer', sex: 'Man', age: 32, num: 24, date: '2025-01-01', address: 'test abc' },{ id: 10005, name: 'Test5', role: 'Develop', sex: 'Man', age: 30, num: 98, date: '2025-01-01', address: 'Shanghai' },{ id: 10006, name: 'Test6', role: 'Designer', sex: 'Man', age: 30, num: 46, date: '2025-03-01', address: 'test abc' },{ id: 10007, name: 'Test7', role: 'Test', sex: 'Woman', age: 29, num: 35, date: '2025-05-01', address: 'test abc' },{ id: 10008, name: 'Test8', role: 'PM', sex: 'Woman', age: 35, num: 84, date: '2025-11-01', address: 'test abc' },{ id: 10009, name: 'Test9', role: 'Test', sex: 'Man', age: 21, num: 25, date: '2025-05-01', address: 'test abc' },{ id: 10010, name: 'Test10', role: 'PM', sex: 'Woman', age: 28, num: 32, date: '2025-03-01', address: 'test abc' },{ id: 10011, name: 'Test11', role: 'Test', sex: 'Woman', age: 29, num: 24, date: '2025-03-01', address: 'test abc' },{ id: 10012, name: 'Test12', role: 'Develop', sex: 'Man', age: 37, num: 28, date: '2025-10-01', address: 'test abc' },{ id: 10013, name: 'Test13', role: 'Test', sex: 'Woman', age: 24, num: 38, date: '2025-02-01', address: 'test abc' },{ id: 10014, name: 'Test14', role: 'Develop', sex: 'Man', age: 34, num: 46, date: '2025-08-01', address: 'test abc' },{ id: 10015, name: 'Test15', role: 'Designer', sex: 'Man', age: 21, num: 48, date: '2025-05-01', address: 'test abc' },{ id: 10016, name: 'Test16', role: 'Designer', sex: 'Woman', age: 21, num: 59, date: '2025-10-01', address: 'test abc' },{ id: 10017, name: 'Test17', role: 'Test', sex: 'Man', age: 31, num: 81, date: '2025-12-01', address: 'test abc' },{ id: 10018, name: 'Test18', role: 'Develop', sex: 'Woman', age: 32, num: 75, date: '2025-10-01', address: 'test abc' },{ id: 10019, name: 'Test19', role: 'Test', sex: 'Man', age: 37, num: 80, date: '2025-02-01', address: 'test abc' },{ id: 10020, name: 'Test20', role: 'Develop', sex: 'Man', age: 41, num: 60, date: '2025-03-01', address: 'test abc' }]
})
</script>

https://gitee.com/x-extends/vxe-table

http://www.jsqmd.com/news/54818/

相关文章:

  • 告别“提示词焦虑”:猛犸AI智能体培训,旨在培养真正的“AI指挥官”
  • 【窗口】set这类有序容器的使用和自定义
  • 【URP】Unity[内置Shader]简单光照SimpleLit
  • 2025年口碑好的医药冷链国际空运专业技术口碑榜
  • 2025年河北沥青路面摊铺公司权威推荐榜单:河道护坡工程/市政道路大修/停车场路面改造服务商精选
  • 中老年人钙片推荐哪款好?2025年12月十大中老年钙片品牌推荐
  • 2025年口碑好的钐钴永磁器件用户好评厂家排行
  • 廊坊市农村自建房找谁好?河北廊坊市自建房公司/机构深度评测口碑推荐榜
  • 2025年知名的赣州装修公司别墅装修/赣州装修公司别墅设计方案
  • 2025年家电产品外观设计公司推荐排行榜前十强
  • 在石家庄市老家农村盖房子哪个平台靠谱?河北省石家庄市自建房公司/机构权威测评推荐排行榜
  • 2025年评价高的环保咨询技术服务热门推荐榜
  • 2025年知名的标书制作/成都标书优质服务榜
  • 河北石家庄市农村自建房口碑推荐榜,2026年自建房公司权威测评优选
  • 2025年LED户外灯具定做厂家权威推荐榜单:LED洗墙灯/LED地埋灯/LED霓虹灯带源头厂家精选
  • 2025年市面上四川密封件优质厂家推荐榜
  • 2025年优质成都制氢设备厂家推荐及采购指南
  • 完整教程:【机器学习入门】55.[第5章 监督学习算法] 逻辑回归的真正实力:可解释与稳健的基线王者
  • 2025年家电产品外观设计公司排行 top 5:专业选择与经验分享
  • 河北廊坊市农村自建房口碑推荐榜,2026年自建房公司权威测评优选
  • 2025年口碑好的视频会议系统专业测评榜
  • 2025年质量好的文件销毁/保密文件销毁品牌服务排行榜
  • 2025年靠谱的四川种苗基地Top口碑厂家推荐
  • 2025年北京卫生间渗水补漏公司权威推荐榜单:卫生间补漏防水/卫生间防水渗水/卫生间补漏标杆企业精选
  • 用mmcv加载和保存数据,mmcv.load, mmcv.dump
  • 2025年浙江面试培训公司年度排名:雪恒白雪面试技巧、团队协
  • 2025年口碑好的不锈钢二段力铰链/大角度二段力铰链TOP实力厂家推荐榜
  • 深入解析:【即插即用模块】注意力篇 | CVPR 2025 | CASAB:能涨2个点!通道+空间双注意力增强特征,简单结构水论文必看!
  • 2025年土豆去皮毛刷直销厂家权威推荐榜单:防静电毛刷辊/尼龙毛刷/清洗机毛刷源头厂家精选
  • STM32标准库工程转LL库工程软件:SPL2LL_Converter_V1.0.1的启动问题