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

vue vxe-table 实现列个性化自定义列功能,自动记忆用户的操作列状态,完整的详细教程

vue vxe-table 实现列个性化自定义列功能,自动记忆用户的操作列状态,完整的详细教程
在开发 ERP 系统或后台管理系统时,经常需要用到的记忆列状态的功能,就是不同用户根据不同的列表页面,比如将用户主动将常用的列显示出来和不常用的列隐藏,列冻结状态等,刷新页面或者下次进入页面后自动回复成上次操作的列状态,这个功能就非常有用了。

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

启用功能

通过设置 toolbar-config.custom 启用列个性化设置功能,支持工具栏模式、弹出窗口模式、抽屉模式显示个性化列操作面板,非常灵活的设置项。通过给表格设置 id 属性,确保每个表格的 id 必须是唯一的,记忆状态是根据 id 进行数据缓存的,如果不同表格 id 出现重复,就会导致不同表格的状态数据混乱。

工具栏模式
image

弹出窗口模式
image

抽屉模式
image

列宽状态记忆

通过 custom-config.allowResizable 启用,启用后用户可以通过拖拽列宽自定义每一列的宽度,非常灵活

11111111111111111111

<template><div><vxe-grid v-bind="gridOptions"></vxe-grid></div>
</template><script setup>
import { reactive } from 'vue'const gridOptions = reactive({border: true,id: 'myCustomStorage1',toolbarConfig: {custom: true},customConfig: {storage: true,allowVisible: false,allowFixed: false,allowResizable: true,allowSort: false,allowGroup: false,allowValues: false,storeOptions: {visible: false, // 保存列可视状态resizable: true, // 保存列宽调整状态sort: false, // 保存列顺序状态fixed: false, // 保存列冻结状态aggGroup: false, // 保存列的行分组状态aggFunc: false// 保存列聚合函数状态}},columnConfig: {drag: true,resizable: true},columns: [{ field: 'seq', type: 'seq', width: 90 },{ field: 'name', title: 'Name' },{ field: 'role', title: 'role' },{ field: 'sex', title: 'Sex' },{ field: 'age', title: 'Age' },{ field: 'address', title: 'address' }],data: [{ id: 10001, name: 'Test1', role: 'Develop', sex: 'Man', age: 28, address: 'test abc' },{ id: 10002, name: 'Test2', role: 'Test', sex: 'Women', age: 22, address: 'Guangzhou' },{ id: 10003, name: 'Test3', role: 'PM', sex: 'Man', age: 32, address: 'Shanghai' },{ id: 10004, name: 'Test4', role: 'Designer', sex: 'Women', age: 24, address: 'Shanghai' }]
})
</script>

列显示/隐藏状态记忆

通过 custom-config.allowVisible 启用,启用后用户手动切换每一列的显示与隐藏,非常方便对常用列显示出来,不常用的列可以直接隐藏掉

2222222222222

<template><div><vxe-grid v-bind="gridOptions"></vxe-grid></div>
</template><script setup>
import { reactive } from 'vue'const gridOptions = reactive({border: true,id: 'myCustomStorage2',toolbarConfig: {custom: true},customConfig: {storage: true,allowVisible: true,allowFixed: false,allowResizable: false,allowSort: false,allowGroup: false,allowValues: false,storeOptions: {visible: true, // 保存列可视状态resizable: false, // 保存列宽调整状态sort: false, // 保存列顺序状态fixed: false, // 保存列冻结状态aggGroup: false, // 保存列的行分组状态aggFunc: false// 保存列聚合函数状态}},columnConfig: {drag: true,resizable: true},columns: [{ field: 'seq', type: 'seq', width: 90 },{ field: 'name', title: 'Name' },{ field: 'role', title: 'role' },{ field: 'sex', title: 'Sex' },{ field: 'age', title: 'Age' },{ field: 'address', title: 'address' }],data: [{ id: 10001, name: 'Test1', role: 'Develop', sex: 'Man', age: 28, address: 'test abc' },{ id: 10002, name: 'Test2', role: 'Test', sex: 'Women', age: 22, address: 'Guangzhou' },{ id: 10003, name: 'Test3', role: 'PM', sex: 'Man', age: 32, address: 'Shanghai' },{ id: 10004, name: 'Test4', role: 'Designer', sex: 'Women', age: 24, address: 'Shanghai' }]
})
</script>

列冻结状态记忆

通过 custom-config.allowFixed 启用,启用后用户可以将最常用的列冻结在可视区内,方便操作

3333333333333333333

<template><div><vxe-grid v-bind="gridOptions"></vxe-grid></div>
</template><script setup>
import { reactive } from 'vue'const gridOptions = reactive({border: true,id: 'myCustomStorage3',toolbarConfig: {custom: true},customConfig: {storage: true,allowVisible: false,allowFixed: true,allowResizable: false,allowSort: false,allowGroup: false,allowValues: false,storeOptions: {visible: false, // 保存列可视状态resizable: false, // 保存列宽调整状态sort: false, // 保存列顺序状态fixed: true, // 保存列冻结状态aggGroup: false, // 保存列的行分组状态aggFunc: false// 保存列聚合函数状态}},columnConfig: {drag: true,resizable: true},columns: [{ field: 'seq', type: 'seq', width: 90 },{ field: 'name', title: 'Name' },{ field: 'role', title: 'role' },{ field: 'sex', title: 'Sex' },{ field: 'age', title: 'Age' },{ field: 'address', title: 'address' }],data: [{ id: 10001, name: 'Test1', role: 'Develop', sex: 'Man', age: 28, address: 'test abc' },{ id: 10002, name: 'Test2', role: 'Test', sex: 'Women', age: 22, address: 'Guangzhou' },{ id: 10003, name: 'Test3', role: 'PM', sex: 'Man', age: 32, address: 'Shanghai' },{ id: 10004, name: 'Test4', role: 'Designer', sex: 'Women', age: 24, address: 'Shanghai' }]
})
</script>

列排序状态记忆

通过 custom-config.allowFixed 启用,启用后用户可对所有进行拖拽排序,将常用的列排序到前面去

444444444444444444444

<template><div><vxe-grid v-bind="gridOptions"></vxe-grid></div>
</template><script setup>
import { reactive } from 'vue'const gridOptions = reactive({border: true,id: 'myCustomStorage4',toolbarConfig: {custom: true},customConfig: {storage: true,allowVisible: false,allowFixed: false,allowResizable: false,allowSort: true,allowGroup: false,allowValues: false,storeOptions: {visible: false, // 保存列可视状态resizable: false, // 保存列宽调整状态sort: true, // 保存列顺序状态fixed: false, // 保存列冻结状态aggGroup: false, // 保存列的行分组状态aggFunc: false// 保存列聚合函数状态}},columnConfig: {drag: true,resizable: true},columns: [{ field: 'seq', type: 'seq', width: 90 },{ field: 'name', title: 'Name' },{ field: 'role', title: 'role' },{ field: 'sex', title: 'Sex' },{ field: 'age', title: 'Age' },{ field: 'address', title: 'address' }],data: [{ id: 10001, name: 'Test1', role: 'Develop', sex: 'Man', age: 28, address: 'test abc' },{ id: 10002, name: 'Test2', role: 'Test', sex: 'Women', age: 22, address: 'Guangzhou' },{ id: 10003, name: 'Test3', role: 'PM', sex: 'Man', age: 32, address: 'Shanghai' },{ id: 10004, name: 'Test4', role: 'Designer', sex: 'Women', age: 24, address: 'Shanghai' }]
})
</script>

透视表分组和聚合函数(需要注意该功能是企业版的示例)

通过拖拽列到聚合列表,自动对数据进行合计汇总。设置 custom-config.allowGroup 和 custom-config.allowValues 启用拖拽功能,启用后用户可以对列表的数据进行手动分组以及对指定字段进行数据统计、汇总等复杂操作,无需开发介入

55555555555555555

<template><div><vxe-grid v-bind="gridOptions"></vxe-grid></div>
</template><script setup>
import { reactive } from 'vue'const gridOptions = reactive({border: true,id: 'myCustomStorage5',toolbarConfig: {custom: true},customConfig: {storage: true,allowVisible: false,allowFixed: false,allowResizable: false,allowSort: false,allowGroup: true,allowValues: true,storeOptions: {visible: false, // 保存列可视状态resizable: false, // 保存列宽调整状态sort: false, // 保存列顺序状态fixed: false, // 保存列冻结状态aggGroup: true, // 保存列的行分组状态aggFunc: true // 保存列聚合函数状态}},columnConfig: {drag: true,resizable: true},columns: [{ field: 'seq', type: 'seq', width: 90 },{ field: 'name', title: 'Name' },{ field: 'role', title: 'role' },{ field: 'sex', title: 'Sex' },{ field: 'age', title: 'Age' },{ field: 'address', title: 'address' }],data: [{ id: 10001, name: 'Test1', role: 'Develop', sex: 'Man', age: 28, address: 'test abc' },{ id: 10002, name: 'Test2', role: 'Test', sex: 'Women', age: 22, address: 'Guangzhou' },{ id: 10003, name: 'Test3', role: 'PM', sex: 'Man', age: 32, address: 'Shanghai' },{ id: 10004, name: 'Test4', role: 'Designer', sex: 'Women', age: 24, address: 'Shanghai' }]
})
</script>

完整状态记忆功能

66666666666666666666

<template><div><vxe-grid v-bind="gridOptions"></vxe-grid></div>
</template><script setup>
import { reactive } from 'vue'const gridOptions = reactive({border: true,id: 'myCustomStorage6',toolbarConfig: {custom: true},customConfig: {storage: true,allowVisible: true,allowFixed: true,allowResizable: true,allowSort: true,allowGroup: true,allowValues: true,storeOptions: {visible: true, // 保存列可视状态resizable: true, // 保存列宽调整状态sort: true, // 保存列顺序状态fixed: true, // 保存列冻结状态aggGroup: true, // 保存列的行分组状态aggFunc: true // 保存列聚合函数状态}},columnConfig: {drag: true,resizable: true},columns: [{ field: 'seq', type: 'seq', width: 90 },{ field: 'name', title: '产品名称', rowGroupNode: true },{title: '分组1',field: 'group1',children: [{ field: 'attr2', title: 'Attr2' },{ field: 'department', title: '部门' }]},{title: '分组3',field: 'group3',children: [{ field: 'plannedAmount', title: '实际销售' },{ field: 'attr1', title: 'Attr1' },{title: '分组4',field: 'group4',children: [{ field: 'actualAmount', title: '计划销售' },{ field: 'attr4', title: 'Attr4' },{ field: 'attr8', title: 'Attr8' }]}]},{ field: 'date', title: '日期' }],data: [{ id: 10001, name: '笔记本', department: '销售1部', actualAmount: 80, plannedAmount: 100, date: '2025-02-01' },{ id: 10002, name: '手机', department: '销售3部', actualAmount: 140, plannedAmount: 120, date: '2025-01-01' },{ id: 10003, name: '键盘', department: '销售2部', actualAmount: 220, plannedAmount: 200, date: '2025-05-01' },{ id: 10004, name: '鼠标', department: '销售1部', actualAmount: 110, plannedAmount: 140, date: '2025-01-01' },{ id: 10005, name: '笔记本', department: '销售2部', actualAmount: 40, plannedAmount: 90, date: '2025-01-01' },{ id: 10006, name: '鼠标', department: '销售4部', actualAmount: 40, plannedAmount: 120, date: '2025-03-01' },{ id: 10007, name: '键盘', department: '销售1部', actualAmount: 234, plannedAmount: 300, date: '2025-05-01' },{ id: 10008, name: '手机', department: '销售4部', actualAmount: 146, plannedAmount: 240, date: '2025-11-01' },{ id: 10009, name: '笔记本', department: '销售3部', actualAmount: 78, plannedAmount: 120, date: '2025-05-01' },{ id: 10010, name: '笔记本', department: '销售4部', actualAmount: 100, plannedAmount: 130, date: '2025-03-01' },{ id: 10011, name: '手机', department: '销售2部', actualAmount: 146, plannedAmount: 150, date: '2025-03-01' },{ id: 10012, name: '键盘', department: '销售4部', actualAmount: 130, plannedAmount: 130, date: '2025-10-01' },{ id: 10013, name: '手机', department: '销售2部', actualAmount: 140, plannedAmount: 80, date: '2025-02-01' },{ id: 10014, name: '笔记本', department: '销售1部', actualAmount: 200, plannedAmount: 100, date: '2025-08-01' },{ id: 10015, name: '键盘', department: '销售3部', actualAmount: 320, plannedAmount: 300, date: '2025-05-01' },{ id: 10016, name: '笔记本', department: '销售4部', actualAmount: 380, plannedAmount: 400, date: '2025-10-01' },{ id: 10017, name: '鼠标', department: '销售1部', actualAmount: 34, plannedAmount: 200, date: '2025-12-01' },{ id: 10018, name: '键盘', department: '销售4部', actualAmount: 100, plannedAmount: 150, date: '2025-10-01' },{ id: 10019, name: '鼠标', department: '销售3部', actualAmount: 90, plannedAmount: 120, date: '2025-02-01' },{ id: 10020, name: '手机', department: '销售2部', actualAmount: 40, plannedAmount: 50, date: '2025-03-01' }]
})
</script>

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

http://www.sczhlp.com/news/5170/

相关文章:

  • java利用poi-tl生成word并转为PDF
  • sql分析工具-p6spy
  • ModbusRTU转CCLink网关控制除湿机配置案例—配置软件篇
  • PyTorch 卷积神经网络
  • P3809【模板】后缀排序
  • Z-Info硬件检测4件套 便捷绿色版 硬件监测组合套装工具
  • docker内apt-get update Waiting for headers 0%
  • CF2077G RGB Walking 题解
  • CGDC|网易伏羲揭秘AI Agent等技术驱动游戏玩法革新,重塑交互与内容生态
  • 。。。
  • ARC203
  • 基于retinex理论,利用双边滤波器对低照度彩色图像进行增强
  • ActiveMQ安装完成后网页后台确无法连接的解决方法
  • 22个软件工程师面试问题(附答案)——技术解析与应对策略
  • Linux配置Nacos开机自启动
  • 医院文件摆渡系统:解决数据跨网难题,保障传输安全!
  • 2025纷享销客华东战区年中渠道赋能大会成功举行
  • FTP替代软件:破解企业数据安全与效率的双重困局!
  • 含风电场的十机24时系统机组出力优化算法
  • 280、近试上张水部
  • 供应商协同管理系统升级:从伙伴管理突破协作瓶颈!
  • 题解:CF954H Path Counting
  • 【一文解读】Ftrans Ferry如何重构跨网文件交换的“黄金三角”?
  • python acceptable character错误
  • JeecgBoot开源低代码平台 v3.8.2震撼发布:AI低代码革命,智能开发新纪元!
  • PyTorch神经网络
  • 【2025-08-02】连岳摘抄
  • 什么是 Operational Data Hub?它因何而生,又为何能够在当下成为技术共识?
  • Linux SSH 服务配置文件核心参数详解
  • 数据库进阶-视图