<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. MapReduce的基础知识

    1.什么是MapReduce Hadoop MapReduce 是一个 分布式计算框架,用于轻松编写分布式应用程序,这些应用程序以可靠,容错的方式并行处理大型硬件集群(数千个节点)上的大量数据(多TB ...

  2. C# 单例模式使用 Singleton

    Singleton 类如下: public class Singleton<T> where T : class, new() { private static T _instance; ...

  3. KingbaseES V8R6运维案例之---sys_waldump解析wal日志

    案例说明: wal日志文件记录了,事务操作的redo日志信息,由于wal日志文件是二进制文件,无法直接读取其文件内容.sys_waldump 可以解决这个问题,通过sys_waldump来解析wal ...

  4. Python爬虫爬取爱奇艺、腾讯视频电影相关信息(改进版)---团队第一阶段冲刺

    爱奇艺 1 import time 2 import traceback 3 import requests 4 from lxml import etree 5 import re 6 from b ...

  5. Echarts世界地图和网页表格数据交互联动

    html布局: 1 <div class="column"> 2 <div class="panel bl bar1"> 3 <d ...

  6. #Multi-SG#HDU 5795 A Simple Nim

    题目 有\(n\)堆石子,每次可以从一堆中取出若干个或是将一堆分成三堆非空的石子, 取完最后一颗石子获胜,问先手是否必胜 分析 它的后继还包含了分成三堆非空石子的SG函数,找规律可以发现 \[SG[x ...

  7. 本周四晚19:00知识赋能第4期直播丨OpenHarmony智能家居项目之设备控制实现

    OpenAtom OpenHarmony(以下简称"OpenHarmony")开源开发者成长计划项目自 2021 年 10 月 24 日上线以来,在开发者中引发高度关注. 成长计划 ...

  8. Mogdb - 安装报错Failed to encrypt the password for databaseError

    Mogdb - 安装报错 Failed to encrypt the password for databaseError 本文出处:https://www.modb.pro/db/418363 版本 ...

  9. TextIn.com API使用心得

    我们参加了本次大学生创新创业服务外包大赛,在项目中大量使用到了合合信息所提供的api进行相关功能实现,所以在这里写一篇博客分享一下我们在项目的实际推进中关于TextIn.com API使用心得 我们的 ...

  10. 《c#高级编程》第4章C#4.0中的更改(六)——动态绑定

    一.概念 下面是一些代码示例,说明C#动态绑定的上述特点: 1. 延迟确定类型 ```dynamic obj = GetDynamicObject(); // 获取动态对象obj.DoSomethin ...