<template>
<div class="table">
<el-table :data="tableList" style="width: 100%" border :header-cell-style="tableStyleObj">
<template v-for="(item,index) in config">
<!-- 序号 -->
<el-table-column v-if="item.type == 'index'" :key="index" type="index" :label="item.label" :width="item.width || 'auto'" :align="item.align || 'center'" />
<!-- 操作 -->
<el-table-column
v-else-if="item.type == 'handel'"
:key="index"
:prop="item.prop"
:label="item.label"
:width="item.width||'auto'"
:align="item.align||'center'"
:fixed="item.fixed"
>
<template slot-scope="{ row }">
<el-button v-for="(i,s) in item.btnLists" :key="s" :type="i.type||''" @click="handels(i.eventName,row)" :style="{color:i.color}">{{i.label}}</el-button>
</template>
</el-table-column>
<!-- 操作-附件 -->
<el-table-column
v-else-if="item.type === 'filesDown'"
:key="index"
:prop="item.prop"
:label="item.label"
:width="item.width||'auto'"
:align="item.align||'center'"
:fixed="item.fixed"
>
<template slot-scope="{ row }">
<div class="fl-y" v-for="(i,s) in row.urls" :key="s" >
<el-button type="text" @click="handelDownList(row,s)" :style="{color:i.color,'marginLeft':0}">{{i.name}}</el-button>
</div>
</template>
</el-table-column>
<!-- 正文 -->
<el-table-column
v-else
:key="index"
:prop="item.prop"
:label="item.label"
:width="item.width||'auto'"
:align="item.align||'center'"
:fixed="item.fixed"
>
</el-table-column>
<!-- show-overflow-tooltip 超出宽度后tooltip显示,但应用于操作项显示会有问题-->
</template>
</el-table>
</div>
</template>
<script>
export default {
props:{
tableList:{
type:Array,
default:()=>[{name:'张三',sex:'男',address:'桃园路桃园小区205-3'},{name:'李四',sex:'女',address:'清华小区205-3'}]
},
config:{
type:Array,
default:()=>[{prop:'name',label:'姓名',width:'120'},{prop:'sex',label:'性别'},{prop:'address',label:'住址'},
{
type:'handel',
fixed:'right',
label:'操作',
width:'200',
btnLists:[
{
eventName:'handelAlert',
type:'text',
label:'文字',
color:'red'
},
{
eventName:'handelEmit',
type:'button',
label:'按钮',
color:'green',
}
]
}
]
}
},
data(){
return{
tableStyleObj:{background:'#b3b3b3',color:'black'}
}
},
methods:{
handels(eventName,row){
alert(JSON.stringify(row))
if(eventName==='handelAlert') {
alert('handelAlert()的逻辑')
}else if(eventName==='handelEmit') {
                 this.$emit('funEmit',row)        //父组件接收子组件点击后传的当前行的数据
            }
},
handelDownList(row,s){
console.log(row.urls[s])
const link = document.createElement('a') // 创建a标签
link.style.display = 'none' // 使其隐藏
link.href = row.urls[s] // 赋予文件下载地址
link.setAttribute('download', row.FileName) // 设置下载属性 以及文件名
document.body.appendChild(link) // a标签插至页面中
link.click() // 强制触发a标签事件
return
}
}
}
</script>
<style lang="scss" scoped>
</style>

vue应用el-tabel封装的更多相关文章

  1. 聊聊 Vue 中 axios 的封装

    聊聊 Vue 中 axios 的封装 axios 是 Vue 官方推荐的一个 HTTP 库,用 axios 官方简介来介绍它,就是: Axios 是一个基于 promise 的 HTTP 库,可以用在 ...

  2. Vue中axios的封装和api接口的统一管理

    更新的是我csdn上的文章,需要的话可以看下,互相学习点击去我的csdn vue中axios的封装 在vue项目和后端交互获取数据时,通常使用axios库,官方文档:https://www.npmjs ...

  3. vue中动画的封装

    <style> .v-enter,.v-leave-to{ opacity: 0; } .v-enter-active,.v-leave-active{ transition:opacit ...

  4. vue --》组件的封装 及 参数的传递

    vue组件的定义 ● 组件(Component)是Vue.js最强大的功能之一 ● 组件可以扩展HTML元素,封装可重用代码 ● 在较高层面上,组件是自定义元素,Vue.js的编译器为他添加特殊功能 ...

  5. VUE组件 单独文件封装

    https://www.cnblogs.com/SamWeb/p/6391373.html vuejs 单文件组件.vue 文件   vuejs 自定义了一种.vue文件,可以把html, css, ...

  6. element el-table表格的vue组件二次封装(附表格高度自适应)

    基于vue的el-table表格二次封装组件方法 前言 在公司实习使用vue+element-ui框架进行前端开发,使用表格el-table较为多,有些业务逻辑比较相似,有些地方使用的重复性高,如果多 ...

  7. vue中的axios封装

    import axios from 'axios'; import { Message } from 'element-ui'; axios.defaults.timeout = 5000;axios ...

  8. vue中Axios的封装和API接口的管理

    前端小白的声明: 这篇文章为转载:主要是为了方便自己查阅学习.如果对原博主造成侵犯,我会立即删除. 转载地址:点击查看 如图,面对一团糟代码的你~~~真的想说,What F~U~C~K!!! 回归正题 ...

  9. vue中axios的封装

    第一步还是先下载axios cnpm install axios -S 第二步建立一个htttp.js import axios from 'axios'; import { Message } fr ...

  10. vue+element UI + axios封装文件上传及进度条组件

    1.前言 之前在做项目的时候,需要实现一个文件上传组件并且需要有文件上传进度条,现将之前的实现过程简单记录一下,希望可以帮助到有需要的人. 项目用的是Vue框架,UI库使用的是element UI,前 ...

随机推荐

  1. cmake:针对某些依赖 openssl-1.0 而机器上还有其他版本的 openssl

    指定下列变量: -DOPENSSL_INCLUDE_DIR:指向 openssl-1.0 的 include 目录 -DOPENSSL_SSL_LIBRARIES:指向 openssl-1.0 的 l ...

  2. 如何使用LOTO示波器 绘制 频率响应特性曲线?

    在工作和项目中,经常会遇到一个功能电路模块对信号进行调理,或滤波,或放大,或衰减,或阻抗变换.这些功能电路模块可能是无源阻容的,也可能是有源的运放电路,也可能是更复杂的系统.但是它们对信号进行调理的最 ...

  3. css实现按钮点击水波纹效果和两边扩散效果

    废话少说,先上代码了,复制到html中即可使用 点击查看代码 <!DOCTYPE html> <html lang="en"> <head> & ...

  4. Docker Commands Diagram

  5. sys_spacequota 扩展插件介绍

    插件sys_spacequota简介 sys_spacequota可以对指定表空间的大小进行限额,一旦大于该限额,例如对此表空间里的数据进行insert, update, copy to, selec ...

  6. Selenium 八大元素定位方式

    UI自动化测本质无非就是: 定位元素 -> 操作元素 -> 模拟页面动作 -> 断言结果 -> 生成测试报告. 所以我们做UI自动化的第一步就是定位元素,如果连元素都定位不到就 ...

  7. 通过位运算修改指定bit位的值

    通过位运算将指定位的值置0或1 问题样例 假如现在有一个8bit二进制数A,其可以为任何值,所以这里不妨先设A=(xxxxxxxx)2,{x|0,1} 现在需要你将A的几个指定位修改为1或0,例如将A ...

  8. Spring boot中拦截器的简单使用

    1.创建自定义拦截器类:首先,你需要创建一个自定义的拦截器类,该类需要实现HandlerInterceptor接口.例如,你可以创建一个名为CustomInterceptor的类. import or ...

  9. #虚树,树形dp#CF613D Kingdom and its Cities

    洛谷题面 Codeforces 分析 若两个重要城市为一条边的两个顶点显然无解 否则考虑建一棵虚树,设\(dp[x]\)表示以\(x\)为根的子树最少需要摧毁的城市数, 令\(Siz[x]\)表示\( ...

  10. Java 包装类:原始数据类型与迭代器

    Java Iterator Iterator 接口提供了一种迭代集合的方法,即顺序访问集合中的每个元素.它支持 hasNext() 和 next() 方法,用于检查是否存在下一个元素以及获取下一个元素 ...