UI组件--element-ui--Table组件自定义合计行
需求: Element-ui的Table组件自带合计行, 但是需求需要在合计行的某些单元格有特别的样式以及事件, 没有研究出怎么在既有合计行上完成此需求, 于是利用其原本的一些属性完成自定义合计行.
分析: 在Table组件中是有columns(包含所有列的数据的数组)的, 但是只有在summary-method事件中才暴露出来, 用来自定义合计行, 可以利用此事件来获得columns, 但是又不想显示自带的合计行, 就可以这样:
<template>
<el-table
@row-click="rowClick"
@cell-click="singleClick"
:row-class-name="setSumRowStyle"
:data="tableData"
stripe
show-summary
:summary-method="getColumns"
style="width: 100%"
>
</el-table>
</template>
// 获取columns
getColumns(param) {
const { columns } = param;
this.columns = columns;
return []
},
// 计算合计行
getSummaries (data) {
let Obj = {};
Obj.type = 'sum';
let lastData = this.levelList[this.levelList.length - 1];this.columns.forEach((column, index) => {
if (index === 0) {
Obj[column.property] = '全部';
return;
}
if (index === 1) {
Obj[column.property] = "上一层公司名???";
return;
}
const values = data.map(item => Number(item[column.property]));
if (!values.every(value => isNaN(value))) {
Obj[column.property] = values.reduce((prev, curr) => {
const value = Number(curr);
if (!isNaN(value)) {
return prev + curr;
} else {
return prev;
}
}, 0);
} else {
Obj[column.property] = '--';
}
})
return Obj;
},
// 将合计行数据添加到已有的列表数据的最后一项, 如果是异步, 请在请求到列表数据并且视图更新后再调用合计行方法
getNewTableData (row) {
api.getList(this.checkForm).then(res => {
console.log(res);
if (res.status === 0 && res.result.record.length > 0) {this.columns = [];
let newData = res.result.record;
this.tableData = newData;
this.total = res.result.totalCount;
// 视图更新后再求和
this.$nextTick(() => {
let summaries = this.getSummaries(newData);
this.tableData.push(summaries);
})
}
})
},
以上步骤已经自定义完成, 但是这些是Table组件自带求和可以完成的, 我们辛苦的自定义合计主要是为了扩展事件以及样式, 此时, 只需在table表格中判断一下就可以用了:
样式:
// text_bule_underline是样式名称
<el-table
@row-click="rowClick"
@cell-click="singleClick"
:row-class-name="setSumRowStyle"
:data="tableData"
stripe
show-summary
:summary-method="getColumns"
style="width: 100%"
>
<el-table-column
prop="name"
width="160px"
label="姓名">
<template slot-scope="scope">
<span :class="(scope.row.type && scope.row.type == 'sum') ? 'text_bule_underline': ''">{{scope.row.name}}</span>
</template>
</el-table-column>
<el-table-column
prop="age"
min-width="180px"
label="年龄">
<template slot-scope="scope">
<span :class="(scope.row.type && scope.row.type == 'sum') ? 'text_bule_underline': ''">{{scope.row.age}}</span>
</template>
</el-table-column>
</el-table>
事件: 可以在 @row-click="rowClick" 或者 @cell-click="singleClick" 里面判断触发.
// 点击行
rowClick (row, event, column) {
if (column.label=='查看'|| (row.type && row.type=="sum")) {
return
}
this.getInfo();
},
// 点击单元格
singleClick(row, column, cell, event) {
if (column.label=='查看') {
this.getDetailList();
}
},
目前除了以上这种我还没有找到更好的方法为Table组件合计行的某些单元格加上事件或者样式, 如果有其他更简便的方法, 欢迎交流~
UI组件--element-ui--Table组件自定义合计行的更多相关文章
- Vue. 之 Element获取table中选中的行
Vue. 之 Element获取table中选中的行 问题描述: 如下截图,在Table中选择数据后,然后在点击“统计”按钮,获取Table表中选择的行 解决方案: 1. 给“统计”这个按钮添加一个点 ...
- vue封装element中table组件
后台系统,table被用的次数比较多,所以决定提出来作为组件 1.新建一个Table.vue文件 <!--region 封装的分页 table--> <template> & ...
- 基于Vue的UI框架element el-table表格的自定义排序
html部分: <el-table-column prop="phoneCache" label="手机缓存包编号" align="center ...
- 09 - Vue3 UI Framework - Table 组件
接下来做个自定义的表格组件,即 table 组件 返回阅读列表点击 这里 需求分析 开始之前我们先做一个简单的需求分析 基于原生 table 标签的强语义 允许用户自定义表头.表体 可选是否具有边框 ...
- Element UI——本地引入iconfont不显示
前言 前面因为本地引入Element UI导致了iconfont不显示,所以只好再去Element UI官网去扒下iconfot 步骤 进入官网 组件 | Element UI F12进入控制台,找到 ...
- element ui table组件自定义合计栏,后台给的数据
合计的数据是后台传的,所以用table组件自定义一行用来合计 <el-table border fit v-loading.body="listLoading" elemen ...
- 普通element ui table组件的使用
1.使用基础的element ui 的table的基础使用 首先,使用前要先引用element库到项目中,可以直接引入element的js和css或者在vue项目下按需加载不同的组件 废话不多说,直接 ...
- Element UI table组件源码分析
本文章从如下图所示的最基本的table入手,分析table组件源代码.本人已经对table组件原来的源码进行削减,源码点击这里下载.本文只对重要的代码片段进行讲解,推荐下载代码把项目运行起来,跟着文章 ...
- (Element UI 组件 Table)去除单元格底部的横线
Element UI 组件 Table 有一个属性 border,添加它可以增加纵向边框,但是无法控制横线边框,因此即使是最简单的 el-table,也会包含一个底部横线. 这个底部横线其实是一个 b ...
随机推荐
- CentOS7安装vsftpd3.0.2、以及虚拟用户配置
vsftpd(very secure ftp daemon)是一款运行在Linux操作系统上的FTP服务程序,不仅完全开源而且免费,还具有很高的安全性.传输速度,以及支持虚拟用户验证. vsftpd ...
- python类与对象-如何让对象支持上下文管理
如何让对象支持上下文管理 问题举例 一个telnet客户端的类TelnetClient, 调用实例的connect(),login(),interact方法 启动客户端与服务器交互,交互完毕后需要调用 ...
- vue-devtools的安装与使用
安装 vue.js devtools vue官方中文文档:http://www.uihtm.com/vue/v2/guide/index.html# 安装 vue.js devtools 前提是Goo ...
- 感觉不错的随笔 关于C、C++的
[effective C++的网页版] http://www.kuqin.com/effectivec2e/ 内存四区模型 https://www.cnblogs.com/crazyzhang/p/5 ...
- QLayout删除所有布局
Qt 的 QLayout 文档里是这么写的,但其实不完整,参看我最下面的代码. [pure virtual] QLayoutItem *QLayout::takeAt(int index) Must ...
- Python基础训练题-简单数学公式
1.在100内,将遇到被7除余数为0的都显示PASS: n=1 while n < 101: if n % 7 == 0: pass print('pass') else: print(n) n ...
- 淘宝客订单api处理优化
首选我们看看api定义: http://open.taobao.com/api.htm?docId=38078&docType=2&scopeId=14474 注意下span这个参数 ...
- C# Thread.Jion()
什么是进程? 当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源. 而一个进程又是由多个线程所组成的. 什么是线程? 线程是程序中的一个执行流,每个线程都有自己的 ...
- 对于react中rredux的理解
1.什么是redux? redux是一个应用数据流框架,主要作用是对于应用状态的管理 2.reducer特点 : (1)默认的state (2)state是只可读不可修改 (3)必须返回一个纯函数 3 ...
- 第十二节 JS事件高级应用
事件绑定: IE方式:(仅适用于IE9及以下,其他的比如FF.Chrome.IE11都不适用) attachEvent(事件名称, 函数):绑定事件处理函数 detachEvent(事件名称, 函数) ...