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

可以隐藏列的表格

今天积累一个可以隐藏列的表格的实现方法

需求:

  • 表格中有一部分列可以隐藏,在列名右侧有一个复选框,点击勾选展示,否则隐藏
  • 另有一个小工具栏,其中有每一列对应的复选框,点击可以将隐藏的列再次展示

思路:

  • 维护一个数组columnConfig,存储每一列的列名、能否隐藏等等信息…
  • 再维护一个响应式对象state,存储每一列的 显示\隐藏 状态
  • 表头和工具栏的复选框双向绑定state状态

这个组件比较简单,代码如下:

<script setup>
import { reactive } from 'vue'/*** 列的信息* @type {{id: {label: string, prop: string, canHidden: boolean}, name: {label: string, prop: string, canHidden: boolean}, region: {label: string, prop: string, canHidden: boolean}, age: {label: string, prop: string, canHidden: boolean}, minzu: {label: string, prop: string, canHidden: boolean}}}*/
const columnConfig = {id: {label: "id号",prop: "id",canHidden: false},name: {label: "姓名",prop: "name",canHidden: false},region: {label: "籍贯",prop: "region",canHidden: true},age: {label: "年龄",prop: "age",canHidden: true},minzu: {label: "民族",prop: "minzu",canHidden: true}
}
// 表中各列的隐藏状态
const state = reactive({})
Object.keys(columnConfig).forEach((key) => {state[key] = true;
})
/*** 表格中的数据* @type {[{id: string, name: string, region: string, age: number, minzu: string},{id: string, name: string, region: string, age: number, minzu: string}]}*/
const data = [{id: '001',name: '张三',region: '湖北',age: 16,minzu: '汉'},{id: '002',name: '李四',region: '湖南',age: 24,minzu: '苗'}
]
</script><template><!-- 再次勾选 --><div class="column-control"><divv-for="item in Object.keys(state)":key="item"class="control-item"><!-- 列标签显示 --><span>{{ columnConfig[item].label }}</span><!-- 列显隐控制 --><el-checkbox:disabled="!columnConfig[item].canHidden"v-model="state[item]"></el-checkbox></div></div><!-- 表格部分(可以勾选隐藏) --><div class="tablecontent"><el-table :data="data" width="100%"><template v-for="item in Object.keys(state)" :key="item"><el-table-columnv-if="state[item]"v-bind="columnConfig[item]"><!-- 自定义表头 --><template #header><div class="header-cell"><!-- 显示列标签 --><span>{{ columnConfig[item].label }}</span><!-- 控制列显隐的复选框 --><el-checkbox:disabled="!columnConfig[item].canHidden"v-model="state[item]"@change="val => state[item] = val"></el-checkbox></div></template></el-table-column></template></el-table></div>
</template><style scoped>
.table-content {width: 1200px;margin: 0 auto;
}
</style>

效果:
在这里插入图片描述
在这里插入图片描述

相关文章:

  • 单片机 + 图像处理芯片 + TFT彩屏 复选框控件
  • Linux内核中的编译时安全防护:以网络协议栈控制块校验为例
  • 单片机之间的双向通信
  • terraform查看资源建的关联关系
  • 一、linux系统启动过程操作记录
  • 插入排序(直接插入排序、折半插入排序和希尔排序)
  • C++中析构函数
  • log4cpp进阶指南
  • LeetCode 每日一题 2025/4/21-2025/4/27
  • 关于Spark知识点与代码测试的学习总结
  • element-ui dropdown 组件源码分享
  • 【c++】AVL树模拟实现
  • Comfy UI 笔记
  • 文章记单词 | 第47篇(六级)
  • 面试记录1-春招补录0427
  • 基础学习:(9)vit -- vision transformer 和其变体调研
  • 《大型网站技术架构-核心原理与案例分析》笔记
  • UV工具的安装与使用
  • Leetcode:283. 移动零
  • Scala 函数柯里化及闭包
  • 全球前瞻|王毅赴巴西出席金砖外长会,加拿大迎来“几十年来最重要大选”
  • 湖南小伙“朱雀玄武敕令”提交申请改名为“朱咸宁”
  • 国铁集团:一季度全国海铁运输商品车同比增长33.62%
  • 国家市场监管总局:组织销毁侵权假冒服装、食药等3300吨
  • 国家发改委党组在《人民日报》发表署名文章:新时代新征程民营经济发展前景广阔大有可为
  • 3岁男童疑遭父亲虐待,杭州警方:在异地发生,嫌疑人已被抓