element-ui 表格控制列显隐简单方案
核心是使用v-if控制列的显隐
<template>
<div>
<div v-for="(item, index) in tables" :key="index">
<el-table
:data="item.data"
@filter-change="value => filterChange(value,index, 'tables')"
:span-method="value => cellMerge(value,'tables')"
:header-cell-style="{background:'#fbfbfb'}"
size="mini"
doLayout
border
>
<el-table-column
v-for="(ele,index) in item.columns"
:label="ele.text"
:prop="ele.value"
show-overflow-tooltip
v-if="ele.flag"
:key="ele.value + index"
:resizable="false"
>
<template slot-scope="scope">
<span>{{scope.row[scope.column.property]}}</span>
</template>
</el-table-column>
<el-table-column
:key="item.columns.length + 1"
fixed="right"
width="50"
v-if="item.stash_columns"
:filters="item.stash_columns"
:filtered-value="item.filter_value"
:resizable="false"
>
<template slot="header" slot-scope="scope">
<i class="el-icon-menu" style="cursor: pointer"></i>
</template>
</el-table-column>
</el-table>
</div>
</div>
</template>
<script> export default {
data () {
return {
tables: [
{
data: [],
columns: [
{
text: '滴滴',
value: 'didi',
flag: true
},
{
text: '哒哒',
value: 'dada',
flag: true
},
{
text: '嘿嘿',
value: 'heihei',
flag: true
},
{
text: '哈哈',
value: 'haha',
flag: false
}
]
}
]
}
},
methods: {
// 处理数据
handlerData (type) {
const data = [{didi: '11', dada: '22', heihei: '33', haha: '44'}]
const tables = this[type]
tables && tables.length > 0 && tables.map((item, index) => {
this.$set(this[type][index], 'data', data)
this.$set(this[type][index], 'stash_columns', item.columns)
this.$set(this[type][index], 'filter_value', [])
const columns = item.stash_columns
const filter_value = item.filter_value
columns && columns.length > 0 && columns.map((ele, idx) => {
if (ele.flag) {
filter_value.push(ele.value)
}
})
this.$set(this[type][index], 'filter_value', filter_value)
})
},
// 控制列显隐
filterChange (value, idx, type) {
switch (type) {
case type:
for (const ele in value) {
this.$set(this[type][idx], 'show_columns', value[ele])
}
const tables = this[type]
tables && tables.length > 0 && tables.map((item, index) => {
const columns = item.columns
const show_columns = item.show_columns
if (show_columns && show_columns.length > 0) {
columns && columns.length > 0 && columns.map((val, key) => {
this.$set(this[type][index].columns[key], 'flag', false)
show_columns.map((ele) => {
if (val.value === ele) {
this.$set(this[type][index].columns[key], 'flag', true)
}
})
})
}
})
break
default:
break
}
},
// 合并单元格
cellMerge ({row, column, rowIndex, columnIndex}, type) {
this.$nextTick(() => {
const tables = this[type]
tables && tables.length > 0 && tables.map((item, index) => {
const show_columns = item.show_columns
const length = show_columns && show_columns.length > 0 ? show_columns.length : item.columns.length
if (columnIndex === length - 1) {
return [1, 0]
} else if (columnIndex === length) {
return [0, 0]
}
})
})
}
},
mounted () {
this.handlerData('tables')
}
} </script>
element-ui 表格控制列显隐简单方案的更多相关文章
- Element UI tree 回显问题
Part.1 问题 写项目时遇到一个棘手的问题,在做关于权限功能时,点击修改需要显示角色原本对应的权限.涉及到了 tree 组件回显,但是有一个很尴尬的问题:tree 组件只要父节点选中,那么子节点就 ...
- element ui tree回显 setCheckedNodes,setCheckedKeys,setChecked等函数报undefined问题
在写项目的时候,需要用到tree组件进行回显来进行权限控制: 在回显过程中使用回显函数会报报undefined, 这时只需要给该函数包裹一层nextTick方法就行了, 在回显过程中我们有可能使用半选 ...
- element ui el-tree回显问题及提交问题(当后台返回的el-tree相关数组的时候,子菜单未全部选中,但是只要父级菜单的id在数组中,那么他的子菜单为全部选中状态)
1:问题原因:我们可能使用 this.$refs.tree.setCheckedKeys(this.defalutArr);或者使用:default-expanded-keys="treeD ...
- vue+element ui 的表格列使用组件
前言:工作中用到 vue+element ui 的前端框架,有这个场景:很多表格的列有许多一样的,所以考虑将列封装为组件.转载请注明出处:https://www.cnblogs.com/yuxiaol ...
- Element ui结合springboot的简单实战
Eelment UI简单实战 前端开发 1 创建项目,导入element ui(略) 2 大致设计出想要的效果,如下 3 创建包 根据设计的大致模样在项目的components中创建对应的包,方便以后 ...
- Element UI Form 每行显示多列,即多个 el-form-item
Element UI Form组件使用问题. 每个 el-form-item 都会独占一行. 对于输入项很多的管理app, 能否在每个form中, 每行显示 2 个或者多个 el-form-item ...
- vue3的学习笔记:MVC、Vue3概要、模板、数据绑定、用Vue3 + element ui、react框架实现购物车案例
一.前端MVC概要 1.1.库与框架的区别 框架是一个软件的半成品,在全局范围内给了大的约束.库是工具,在单点上给我们提供功能.框架是依赖库的.Vue是框架而jQuery则是库. 1.2.MVC(Mo ...
- element UI排坑记(一):判断tabs组件是否切换
之所以将这个问题列在排坑记之中,是因为官方组件的一个属性颇有些隐蔽,这个问题曾经折腾了本人较多时间,始终思维固着,且使用搜索引擎也不容易搜索到答案,故记之.然而实际解决却是相当简单的. 一.问题描述 ...
- Element UI表格组件技巧:如何简洁实现跨页勾选、跨页统计功能
业务场景 在使用Element UI的Table组件时,常常面对这样的业务需求: 表格数据的每一项都要提供勾选框,当切换分页时,能够记忆所有页面勾选的数据,以实现批量提交不同页面勾选数据的功能.并且, ...
- 基于vue(element ui) + ssm + shiro 的权限框架
zhcc 基于vue(element ui) + ssm + shiro 的权限框架 引言 心声 现在的Java世界,各种资源很丰富,不得不说,从分布式,服务化,orm,再到前端控制,权限等等玲琅满目 ...
随机推荐
- 算法金 | A - Z,115 个数据科学 机器学习 江湖黑话(全面)
大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 机器学习本质上和数据科学一样都是依赖概率统计,今天整整那些听起来让人头大的机器学习江湖 ...
- 在Markdown中使用base64存图片
author="CKboss" date="2022-4-19" title="在Markdown中使用base64存图片" +++ 在Ma ...
- I2S 总线学习:1-有关概念
背景 I2S总线 是一种常见的总线,也是需要掌握的. 概念 I2S(Inter-IC Sound)总线, 又称 集成电路内置音频总线,是飞利浦公司为数字音频设备之间的音频数据传输而制定的一种总线标准, ...
- css浅谈Flex布局
1.打开Flex布局 .box{ display: flex; } 2.容器的属性 flex-direction flex-wrap flex-flow justify-content align-i ...
- CM3调试系统简析
CM3 调试系统简析 **"一直以来,单片机的调试一直不是很突出的主题,很多简单些的程序在开发中,甚至都没有调试的概念,而只是把生成的映像直接烧入片子,再根据错误症状来判断问题,然后修改程序 ...
- [oeasy]python0052_ raw格式字符串_单引号_双引号_反引号_ 退格键
转义字符 回忆上次内容 最近玩的是\n.\r 之外的转义序列 \a是 ␇ (bell) \t是 水平制表符 \v是 换行不回车 通过 16 进制数值转义 \xhh 把(hh)16 进制对应的 asci ...
- ICPC游记
\[\Large\color{#FCAEBD}『2024ICPC河南站 游记』 \] Day 0 晚上打了场 \(ABC\),快成屎了,最后竟然还加分了. 晚上回家洗了个澡,收拾收拾东西,凌晨2点就睡 ...
- Node.js 处理 File
Node.js 处理 File fs 模块 常规使用 运用递归遍历目录树 创建文件和目录 读写文件 path 模块 对于 file 的理解,此处 fs 模块 Node.js 提供了处理文件系统的内置模 ...
- 【VUE】el-menu导航菜单过长、过多 超出窗口宽度 添加左右滚动按钮实现左右滚动效果
本文为原创文章,转载需注明出处~~ 效果图: 项目需求:如果一级菜单过多,需要出现滚动点击按钮. 准备工作:考虑到使用swiper插件,但swiper-slider必须是swiper-wrapper的 ...
- FFmpeg开发笔记(四十一)结合OBS与MediaMTX实现SRT直播推流
<FFmpeg开发实战:从零基础到短视频上线>一书的"10.2 FFmpeg推流和拉流"提到直播行业存在RTSP和RTMP两种常见的流媒体协议.除此以外,还有于20 ...