核心是使用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. Django-解决跨域请求(基于js,jQuery的josnp,设置响应头的cors)

    同源策略 同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响.可以说Web是构建在同源策略基础之上的 ...

  2. socket 端口复用 SO_REUSEPORT 与 SO_REUSEADDR

    背景 在学习 SO_REUSEADDR 地址复用的时候,看到有人提到了 SO_REUSEPORT .于是也了解了一下. SO_REUSEPORT 概述 SO_REUSEPOR这个socket选项可以让 ...

  3. 国产芯片!EtherCAT主站和瑞芯微RK3568融合,引领智能化升级!

    转载自:北京盟通科技 盟通成果 随着工业智能化的迅猛推进,国产芯片作为我国自主创新的重要成果,正逐渐崭露头角.在实现工业智能化的过程中,EtherCAT主站技术的应用也愈发重要.盟通此次将瑞芯微国产开 ...

  4. map端join和reduce端join的区别

    MapReduce Join MapJoin和ReduceJoin区别及优化 maptask处理后写到本地,如果再到reduce,又涉及到网络的拷贝. map端join最大优势,可以提前过滤不需要的数 ...

  5. 在linux系统中,对标准输出(stdout,文件描述符为 1)和标准错误(stderr,文件描述符为 2)重定向到文件

    请参考:2>/dev/null和>/dev/null 2>&1和2>&1>/dev/null的区别 下面的是本人浅尝辄止了,并非全貌,还是上面的文章说的比 ...

  6. python3 requests 请求https报错: urllib3.exceptions.SSLError: [SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:992)

    正文 代码示例: #-*- coding:utf-8 -*- import requests url = "https://tst.com" res = requests.get( ...

  7. Mysql 分表分库的策略

    为什么要分表? 当一张的数据达到几百万时,你查询一次所花的时间会变多,如果有联合查询的话,有可能会死在那儿了. 分表的目的就在于此,减小数据库的负担,缩短查询时间. 日常开发中我们经常会遇到大表的情况 ...

  8. Java-MVC开发模式

    MVC开发模式 1. jsp演变历史 1. 早期只有Servlet,只能使用response输出标签数据,非常麻烦 2. 后来又jsp,简化了Servlet的开发,如果过度使用jsp,在jsp中即写大 ...

  9. leetcode简单(双指针):[88, 202, 345, 392, 455, 905, 922, 917, 925, 942]

    [toc 88. 合并两个有序数组 var merge = function(nums1, m, nums2, n) { let A1 = nums1.slice(0, m) let A2 = num ...

  10. MFC 关于按键状态获取

    alt键会阻断消息? moousemovealt键无法判断,按下一次 并松开一次状态改变一次#define KeyState GetAsyncKeyState BOOL bCtrlDown = (Ke ...