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 ...
随机推荐
- supervisor无法监听uwsgi
➜ ~ sudo supervisorctl data_config FATAL Exited too quickly (process log may have details) data_conf ...
- 使用MyEclipse新建maven项目时报An internal error occurred during: "Retrieving archetypes:". GC overhead limit
前几天在上手maven时,遇到了一个十分头疼的问题,我的myeclipse配置的是自己安装的插件 ,总是报 " An internal error occurred during: &quo ...
- JS中将json字符串转为json对象的三种方式
第一种:利用JSON的parse方法,即jsonObj=JSON.parse(jsonStr); 第二种:jsonObj = eval('(' + jsonStr+ ')'); 第三种:比较难理解:j ...
- javascript将base64编码的图片数据转换为file并提交
/** @param base64Codes 图片的base64编码 */ function sumitImageFile(base64Codes){ var form=document.forms[ ...
- 福州大学软件工程1916 | W班 作业成绩排名汇总
评分链接: 第一次作业-准备篇 https://www.cnblogs.com/deerCode/p/10527237.html 第二次作业-结对第一次-文献摘要热词统计原型设计 https://ww ...
- php 图片添加文字,水印
因为工作需求,用到这个,网上找了很多,也没有找到好的方式,最后找到这种感觉比较简单的方式,记录下来,以备后用. $im = imagecreatefrompng("img/yyk_bg. ...
- Typescript 和 Javascript之间的区别
TypeScript 和 JavaScript 是目前项目开发中较为流行的两种脚本语言,我们已经熟知 TypeScript 是 JavaScript 的一个超集,但是 TypeScript 与 Jav ...
- flask实战-个人博客-虚拟环境、项目结构
个人博客 博客是典型的CMS(Content Management system,内容管理系统),通常由两部分组成:一部分是博客前台,用来展示开放给所有用户的博客内容:另一部分是博客后台,这部分内容仅 ...
- 从centos镜像创建maven仓库
创建镜像 1. 使用centos7作为基础镜像2. 将jdk1.8(官方要求1.8)和nexus3解压后的两个文件放进cp进去3. export环境变量后启动一下试一试4. docker commit ...
- 文件下载的ie11兼容性优化
在 http://www.cnblogs.com/sunshine6/p/8296945.html 中有说关于前后端分离时如何实现文件下载的功能,但是过完年回来,同事告诉我这个方式在ie11上存在不兼 ...