<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. SpringBoot如何优雅的进行参数校验

    写在前面 上一篇文章中我们学会了如何优雅的接收前端参数,传送门 SpringBoot如何优雅的接收前端参数 接收到参数后,接下来要做的就是校验参数的合法性.这一步的重要性就不用多说了. 即使前端已经对 ...

  2. ps去除图片中间部分并拼合

    今天分享一个用ps去除图片中间部分后,把剩下的部分拼合的技术. 需求 下面这张图,需要去掉第三列(顺丰包邮价) ps处理过程 1.导入图片到ps软件 快捷键方式:Ctrl + O: 手动打开方式:点击 ...

  3. java 计算两个日期相差工作日天数

    import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.DayOfWeek; impo ...

  4. java实战字符串4:寻找最长的元音子串的长度

    题目描述 定义:当一个字符串只有元音字母(aeiouAEIOU)组成,称为元音字符串.现给定一个字符串,请找出其中最长的元音字符子串,并返回其长度:如果找不到,则返回0. 子串:字符串中任意个连续的字 ...

  5. [Linux]将ArchLinux安装到U盘

    将ArchLinux安装到U盘 几个月前入门Arch的时候上网搜了不少安装教程,同时由于当时硬盘空间不太够于是就打算安装到U盘上,也因此踩了不少坑. 但128G的U盘都拿来装Arch的话未免也太浪费了 ...

  6. #线性dp#CF1110D Jongmah

    题目 分析 考虑三个 \((i,i+1,i+2)\) 可以用 \((i,i,i)\) 和 \((i+1,i+1,i+1)\) 和 \((i+2,i+2,i+2)\) 代替, 所以这样的三元组本质上最多 ...

  7. 使用windbg分析dump文件

    使用windbg分析dump文件的步骤. 准备工作. 打开dump文件. 指定符号表文件的路径. 指定可执行文件的路径. 指定源码文件的路径. 在windbg的命令行,输入并执行如下命令 .reloa ...

  8. OpenHarmony 4.0 Beta1发布,邀您体验

      初夏之际,OpenAtom OpenHarmony(简称"OpenHarmony") 4.0 Beta1版本如期而至.4.0 Beta1版本在3.2 Release版本基础上, ...

  9. 7. The Singular Value Decomposition(SVD)

    7.1 Singular values and Singular vectors The SVD separates any matrix into simple pieces. A is any m ...

  10. 【Kotlin】扩展属性、扩展函数

    1 类的扩展 ​ Kotlin 提供了扩展类或接口的操作,而无需通过类继承或使用装饰器等设计模式,来为某个类添加一些额外的属性或函数,我们只需要通过一个被称为扩展的特殊声明来完成.通过这种机制,我们可 ...