核心是使用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 表格控制列显隐简单方案的更多相关文章

  1. Element UI tree 回显问题

    Part.1 问题 写项目时遇到一个棘手的问题,在做关于权限功能时,点击修改需要显示角色原本对应的权限.涉及到了 tree 组件回显,但是有一个很尴尬的问题:tree 组件只要父节点选中,那么子节点就 ...

  2. element ui tree回显 setCheckedNodes,setCheckedKeys,setChecked等函数报undefined问题

    在写项目的时候,需要用到tree组件进行回显来进行权限控制: 在回显过程中使用回显函数会报报undefined, 这时只需要给该函数包裹一层nextTick方法就行了, 在回显过程中我们有可能使用半选 ...

  3. element ui el-tree回显问题及提交问题(当后台返回的el-tree相关数组的时候,子菜单未全部选中,但是只要父级菜单的id在数组中,那么他的子菜单为全部选中状态)

    1:问题原因:我们可能使用 this.$refs.tree.setCheckedKeys(this.defalutArr);或者使用:default-expanded-keys="treeD ...

  4. vue+element ui 的表格列使用组件

    前言:工作中用到 vue+element ui 的前端框架,有这个场景:很多表格的列有许多一样的,所以考虑将列封装为组件.转载请注明出处:https://www.cnblogs.com/yuxiaol ...

  5. Element ui结合springboot的简单实战

    Eelment UI简单实战 前端开发 1 创建项目,导入element ui(略) 2 大致设计出想要的效果,如下 3 创建包 根据设计的大致模样在项目的components中创建对应的包,方便以后 ...

  6. Element UI Form 每行显示多列,即多个 el-form-item

    Element UI Form组件使用问题. 每个 el-form-item 都会独占一行. 对于输入项很多的管理app, 能否在每个form中, 每行显示 2 个或者多个 el-form-item ...

  7. vue3的学习笔记:MVC、Vue3概要、模板、数据绑定、用Vue3 + element ui、react框架实现购物车案例

    一.前端MVC概要 1.1.库与框架的区别 框架是一个软件的半成品,在全局范围内给了大的约束.库是工具,在单点上给我们提供功能.框架是依赖库的.Vue是框架而jQuery则是库. 1.2.MVC(Mo ...

  8. element UI排坑记(一):判断tabs组件是否切换

    之所以将这个问题列在排坑记之中,是因为官方组件的一个属性颇有些隐蔽,这个问题曾经折腾了本人较多时间,始终思维固着,且使用搜索引擎也不容易搜索到答案,故记之.然而实际解决却是相当简单的. 一.问题描述 ...

  9. Element UI表格组件技巧:如何简洁实现跨页勾选、跨页统计功能

    业务场景 在使用Element UI的Table组件时,常常面对这样的业务需求: 表格数据的每一项都要提供勾选框,当切换分页时,能够记忆所有页面勾选的数据,以实现批量提交不同页面勾选数据的功能.并且, ...

  10. 基于vue(element ui) + ssm + shiro 的权限框架

    zhcc 基于vue(element ui) + ssm + shiro 的权限框架 引言 心声 现在的Java世界,各种资源很丰富,不得不说,从分布式,服务化,orm,再到前端控制,权限等等玲琅满目 ...

随机推荐

  1. BST-Treap名次树数组&指针实现板子 Ver1.0

    这里只有板子没有原理QWQ 可实现 1.插入 x 数 2.删除 x 数(若有多个相同的数,只删除一个) 3.查询 x 数的排名(排名定义为比当前数小的数的个数 +1) 4.查询排名为 x 的数 5.求 ...

  2. Linux 使用 Swap分区

    Linux 使用 Swap分区 背景 买的云服务器在使用的时候,资源经常不够,因此需要使用swap分区. Swap分区在系统的物理内存不够用的时候,把硬盘内存中的一部分空间释放出来,以供当前运行的程序 ...

  3. EEPROM、Flash有关知识

    存储器分为两大类:RAM(Random Access Memory,任意地址访问储存器)和ROM(Read-Only Memory,只读储存器). 发展历史 ROM Read-Only Memory, ...

  4. Centos7安装MySQL详细步骤(配置开机自启)

    MySQL 检查系统是否安装过mysql //检查系统中有无安装过mysql rpm -qa|grep mysql //查询所有mysql 对应的文件夹,全部删除 whereis mysql find ...

  5. “古剑山”初赛Misc 幸运饼干

    "古剑山"初赛Misc 幸运饼干 考点:Chrome的Cookies解密 赛中思路 bandzip极限压缩hint.jpg后打明文攻击 压缩包密码:sv@1v3z ┌──(root ...

  6. Nginx性能调优5招35式不可不知的策略实战

    Nginx是一个高性能的HTTP和反向代理服务器,它在全球范围内被广泛使用,因其高性能.稳定性.丰富的功能以及低资源消耗而受到青睐.今天V哥从5个方面来介绍 Nginx 性能调优的具体策略,希望对兄弟 ...

  7. 循环冗余检验CRC

    先约定一个除数,除数根据生成多项式来决定,余数的位数就是除数位数减一,在被除数后面添加余数个0,然后进行运算. 注意虽然叫做除数被除数,但是是按位进行异或操作,相同为1,不同为0,最后的余数就叫帧检验 ...

  8. 在ubuntu16.04下,源码编译安装特定版本的MongoDB PHP扩展

    背景:我的php项目在连接其他mongo库时报:Server at xxx:27017 reports wire version 5, but this version of libmongoc re ...

  9. oeasy教您玩转vim - 29 - # 垂直翻页

    ​ 垂直翻页 回忆上节课内容 我们上次了解了横向滚动的相关信息 横滚幅度 - sidescroll 横滚留位 - sidescrolloff 自动换行 - wrap g j.g k 可以逐行上下移动 ...

  10. oeasy教您玩转vim - 73 - # 映射map

    ​ 映射map 回忆上次缩写的细节 这次了解到了:abbrivate缩写 可以定义缩写 :ab o1z oeasy 这里面还可以包括方向键.回车键之类的东西 可以定义到指定的模式 iab cab 查看 ...