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

可以隐藏列的表格

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

需求:

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

思路:

  • 维护一个数组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>

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

http://www.xdnf.cn/news/2407.html

相关文章:

  • spark 课程总结
  • 影楼精修-皮肤瑕疵祛除算法解析
  • 安卓基础(适配器和RecyclerView )
  • 富文本展示前使用DOMPurify进行文本过滤
  • T 电梯维修作业考试精选题目
  • AI大模型知识与医疗项目实践 - Java架构师面试实战
  • Haply MinVerse触觉3D 鼠标—沉浸式数字操作,助力 3D 设计与仿真
  • DeepSeek系列(10):与其他AI工具协同
  • 自然语言to SQL的评估
  • #苍穹外卖# (day 12)
  • 2025年大一ACM训练-搜索
  • 如何创建并使用极狐GitLab 部署令牌?
  • 特征工程四-1:自定义函数find_similar_docs查找最相似文档案例
  • ts全局导入接口
  • 8.Excel:数据验证和下拉列表
  • C++入门小馆: STL 之queue和stack
  • 图像预处理-形态学变换
  • ESP32-S3 入门学习笔记(四):LED实验
  • shell脚本部署disu博客
  • java当中的类加载器
  • 大模型评测调研报告
  • docker compose -p的踩坑经验
  • terraform查看资源建的关联关系
  • PyQt Python列表操作全解析:从基础到实战
  • 北峰专业数字集群通信系统:构建消防指挥调度的智能化基石
  • 中国地区土地覆盖综合数据集
  • DigitalOcean推出Valkey托管缓存服务
  • Lua 第11部分 小插曲:出现频率最高的单词
  • 驼峰命名法(Camel Case)与匈牙利命名法(Hungarian Notation)详解
  • Web开发-JavaEE应用依赖项Log4j日志Shiro验证FastJson数据XStream格式