vue封装element中table组件
后台系统,table被用的次数比较多,所以决定提出来作为组件
1.新建一个Table.vue文件
- <!--region 封装的分页 table-->
- <template>
- <div class="table">
- <el-table id="iTable" v-loading.iTable="options.loading" :data="list" :stripe="options.stripe"
- ref="mutipleTable"
- @selection-change="handleSelectionChange">
- <!--region 选择框-->
- <el-table-column v-if="options.mutiSelect" type="selection" style="width: 55px;">
- </el-table-column>
- <!--endregion-->
- <!--region 数据列-->
- <template v-for="(column, index) in columns">
- <el-table-column :prop="column.prop"
- :key='column.label'
- :label="column.label"
- :align="column.align"
- :width="column.width">
- <template slot-scope="scope">
- <template v-if="!column.render">
- <template v-if="column.formatter">
- <span v-html="column.formatter(scope.row, column)"></span>
- </template>
- <template v-else>
- <span>{{scope.row[column.prop]}}</span>
- </template>
- </template>
- <template v-else>
- <expand-dom :column="column" :row="scope.row" :render="column.render" :index="index"></expand-dom>
- </template>
- </template>
- </el-table-column>
- </template>
- <!--endregion-->
- <!--region 按钮操作组-->
- <el-table-column ref="fixedColumn" label="操作" align="center" :width="operates.width" :fixed="operates.fixed"
- v-if="operates.list.filter(_x=>_x.show === true).length > 0">
- <template slot-scope="scope">
- <div class="operate-group">
- <template v-for="(btn, key) in operates.list">
- <div class="item" v-if="btn.show" :key='btn.id'>
- <el-button :type="btn.type" size="mini" :icon="btn.icon" :disabled="btn.disabled"
- :plain="btn.plain" @click.native.prevent="btn.method(key,scope.row)">{{ btn.label }}
- </el-button>
- </div>
- </template>
- </div>
- </template>
- </el-table-column>
- <!--endregion-->
- </el-table>
- </div>
- </template>
- <!--endregion-->
- <script>
- export default {
- props: {
- list: {
- type: Array,
- default: []
- }, // 数据列表
- columns: {
- type: Array,
- default: []
- }, // 需要展示的列 === prop:列数据对应的属性,label:列名,align:对齐方式,width:列宽
- operates: {}, // 操作按钮组 === label: 文本,type :类型(primary / success / warning / danger / info / text),show:是否显示,icon:按钮图标,plain:是否朴素按钮,disabled:是否禁用,method:回调方法
- options: {
- type: Object,
- default: {
- stripe: false, // 是否为斑马纹 table
- highlightCurrentRow: false // 是否要高亮当前行
- },
- } // table 表格的控制参数
- },
- //组件
- components: {
- expandDom: {
- functional: true,
- props: {
- row: Object,
- render: Function,
- index: Number,
- column: {
- type: Object,
- default: null
- }
- },
- render: (h, ctx) => {
- const params = {
- row: ctx.props.row,
- index: ctx.props.index
- }
- if (ctx.props.column) params.column = ctx.props.column
- return ctx.props.render(h, params)
- }
- }
- },
- // 数据
- data () {
- return {
- pageIndex: 1,
- multipleSelection: [] // 多行选中
- }
- },
- mounted () {
- },
- computed: {
- },
- methods: {
- // 多行选中
- handleSelectionChange (val) {
- this.multipleSelection = val
- this.$emit('handleSelectionChange', val)
- },
- // 显示 表格操作弹窗
- showActionTableDialog () {
- console.log(4444)
- this.$emit('handelAction')
- }
- }
- }
- </script>
- <style lang="scss" >
- </style>
2.调用组件
- <template>
- <div class="table-page">
- <i-table :list="list"
- @handleSelectionChange="handleSelectionChange"
- :options="options"
- :columns="columns"
- :operates="operates"
- >
- </i-table>
- </div>
- </template>
- <script>
- import iTable from '../components/Table'
- export default {
- components: {iTable},
- data () {
- return {
- list: [
- {
- id: '24',
- title: '编号3',
- state:0
- },
- {
- id: '23',
- title: '编号3',
- state:1
- },
- {
- id: '23',
- title: '编号3',
- state:2
- },
- {
- id: '2',
- title: '编号3',
- state:0
- },
- {
- id: '223',
- title: '编号3',
- state:1
- },
- {
- id: '2444',
- title: '编号3',
- state:1
- },
- ], // table数据
- options: {
- stripe: true, // 是否为斑马纹 table
- loading: false, // 是否添加表格loading加载动画
- highlightCurrentRow: true, // 是否支持当前行高亮显示
- mutiSelect: true, // 是否支持列表项选中功能
- }, // table 的参数
- columns: [
- {
- prop: 'id',
- label: '编号',
- align: 'center',
- },
- {
- prop: 'title',
- label: '标题',
- align: 'center',
- formatter: (row, column, cellValue) => {
- return `<span style="white-space: nowrap;color: dodgerblue;">${row.title}</span>`
- }
- },
- {
- prop: 'state',
- label: '状态',
- align: 'center',
- render: (h, params) => {
- return h('el-tag', {
- props: {type: params.row.state === 0 ? 'success' : params.row.state === 1 ? 'info' : 'danger'} // 组件的props
- }, params.row.state === 0 ? '上架' : params.row.state === 1 ? '下架' : '审核中')
- }
- },
- ], // 需要展示的列
- operates: {
- width: 200,
- fixed: 'right',
- list: [
- {
- id:'1',
- label: '编辑',
- type: 'warning',
- show: true,
- icon: 'el-icon-edit',
- plain: true,
- disabled: false,
- method: (index, row) => {
- this.handleEdit(index, row)
- }
- },
- {
- id:'2',
- label: '删除',
- type: 'danger',
- icon: 'el-icon-delete',
- show: true,
- plain: false,
- disabled: false,
- method: (index, row) => {
- this.handleDel(index, row)
- }
- }
- ]
- } // 列操作按钮
- }
- },
- methods: {
- // 选中行
- handleSelectionChange (val) {
- console.log('val:', val)
- },
- // 编辑
- handleEdit (index, row) {
- console.log(' index:', index)
- console.log(' row:', row)
- },
- // 删除
- handleDel (index, row) {
- console.log(' index:', index)
- console.log(' row:', row)
- }
- }
- }
- </script>
https://juejin.im/post/5a6941dc518825732258e321
vue封装element中table组件的更多相关文章
- Vue. 之 Element获取table中选中的行
Vue. 之 Element获取table中选中的行 问题描述: 如下截图,在Table中选择数据后,然后在点击“统计”按钮,获取Table表中选择的行 解决方案: 1. 给“统计”这个按钮添加一个点 ...
- VUE -- 对 Element UI table中数据进行二次处理
时间——日期 后台经常给我们返回的是 时间戳 (例如:1535620671) 这时候我们页面展现的时候需要将时间戳转换为我们要的格式 例如 (YYYY-MM-DD HH:mm:ss) 如果是在Elem ...
- Element UI table组件源码分析
本文章从如下图所示的最基本的table入手,分析table组件源代码.本人已经对table组件原来的源码进行削减,源码点击这里下载.本文只对重要的代码片段进行讲解,推荐下载代码把项目运行起来,跟着文章 ...
- react ,ant Design UI中table组件合并单元格并展开详情的问题
需求:购物车订单列表,如图: 一:单元格合并 遇到这种你会怎么办呢? 单元格合并? 还是其他的方法? 下面是我的处理方式,就是在table 组件的columns上处理,这里拿商品举例,其余的类似, ...
- element ui table组件自定义合计栏,后台给的数据
合计的数据是后台传的,所以用table组件自定义一行用来合计 <el-table border fit v-loading.body="listLoading" elemen ...
- vue封装一个弹框组件
这是一个提示框和对话框,例: 这是一个组件 eject.vue <template> <div class='kz-cont' v-show='showstate'> &l ...
- vue+element ui table组件封装,使用render渲染
后台管理经常会用到表格,一开始封装了一个常用的功能性表格,点击这里: 后来由于需求增加,在表格中还会用到switch,select,input等多种组件,每次都要在html中增加<el-tabl ...
- 纯生js实现Element中input组件的部分功能(慢慢完善)并封装成组件
现在实现的有基础用法.可清空.密码框,参考链接:https://element.eleme.cn/#/zh-CN/component/input HTML代码:想要测试哪个组件,直接将对应组件解开注释 ...
- 普通element ui table组件的使用
1.使用基础的element ui 的table的基础使用 首先,使用前要先引用element库到项目中,可以直接引入element的js和css或者在vue项目下按需加载不同的组件 废话不多说,直接 ...
随机推荐
- Axiso解决跨域访问
问题: 在项目中需要需要讲本地项目去请求一个URL接口获取数据 例如: 本地请求地址:http://127.0.0.1:19323/site/info.json 请求Url地址:http://www. ...
- Java基础学习(2)
Java基础学习(二) 面向对象 对象:客观存在的事物 面向对象:人具体关注的事物的某些信息 类:是模子,确定对象会拥有的特征(属性)和行为(方法) 对象的属性:对象具有的各种特征 对象的方法:对象能 ...
- windows无法安装.net framework 3.5解决方法
windows server 12r2 或 win10 安装.netframework 3.5方法: 一. 直接在“启用或关闭windows功能”中可以启用,需联网.但是经常会出错,可能安装过程中需要 ...
- 使用量产工具合并U盘空间一例
1.问题提出: 朋友拿到一只别人赠送的广告U盘,上面印刷有产品广告.插入电脑后,在系统的磁盘管理中,显示为两块“硬盘”,其中一块“硬盘”中有广告视频.产品介绍等,占用大概6GB,这块“硬盘”中的这 ...
- Netty学习--第一章 JDK自带的BIO
一.什么是BIO BIO是传统的通信技术,在BIO通信模型中,客户端发送请求给服务器,服务器每次都是会单独创建一个线程来监控客户端的请求,会为每个客户端创建一个线程来处理请求.当前服务器处理完成后,通 ...
- uoj280 【UTR #2】题目难度提升 堆维护中位数+set
题目传送门 http://uoj.ac/problem/280 题解 这道题很妙啊. 这种题目如果给予选手足够的时间,每一个选手应该都能做出来. 大概就是核心思路看上去很简单,但是想要推出来并不简单. ...
- 前端之JavaScript:JS之DOM对象一
js之DOM对象一 一.什么是HTML DOM HTML Document Object Model(文档对象模型) HTML DOM 定义了访问和操作HTML文档的标准方法 HTML DOM 把 ...
- SOJ 一句话题解整理
#50 离线+按位考虑 #99 %6拆成%2和%3合并+将图定向为DAG的方案数为 (-1)^n P(-1) #123 储存分数最后求逆元 #124 $\binom{2n}{n}$大概在25的时候就已 ...
- java:序列化Serializable 接口
java:序列化Serializable 接口 public class SerializePerson implements Serializable { private String name; ...
- Ldap 从入门到放弃(一)
OpenLDAP 2.4版本 快速入门 本文内容是自己通过官网文档.网络和相关书籍学习和理解并整理成文档,其中有错误或者疑问请在文章下方留言. 一.Introduction to OpenLDAP D ...