vue表格(table)计算总计方式

vue表格(table)计算总计方式

目录

vue 表格计算总计

vue table表格合计 ( Element )

vue 表格计算总计 <el-table         v-loading="loading"         :summary-method="getSummaries"         show-summary         :data="abcList"         border         tooltip-effect="darkTable"       >

首先需要在table标签中添加

:summary-method="getSummaries"  // 调用方法 show-summary  //标签属性 methods: {   getSummaries(param) {     const { columns, data } = param     console.log(columns, data, 'columns,data')     const sums = []     columns.forEach((column, index) => {       // 设置第一列的值为总计       if (index === 0) {         sums[index] = '总计'         return       }         sums[3] = this.form.result         sums[3] += '元'     })     return sums    } }

因为Element上计算总计的方法是计算当前页上金额的总和,稍加修改~

sums[index] = '总计'   // 把下标为0的列赋值为总计 sums[3] = this.form.result   // this.form.result为init初始化时从接口中拿到的总计,赋值到下标为3的列上 sums[3] += '元' // 得到的总计后加上单位元 vue table表格合计 ( Element ) <template> <el-card class="box-card"> <!-- 只合计不做其他处理 --> <h2>只合计不做其他处理</h2> <el-table :data="tableData6" border show-summary style="width: 100%"> <el-table-column prop="id" label="ID" width="180" align="center"> </el-table-column> <el-table-column prop="name" label="产品" align="center"> </el-table-column> <el-table-column prop="number" label="数量" align="center"> </el-table-column> <el-table-column prop="price" label="价格" align="center"> </el-table-column> <el-table-column prop="profit" label="利润率" align="center"> </el-table-column> </el-table> <!-- 简单求和实例处理 --> <h2 style="margin-top:100px">简单求和实例处理</h2> <el-table :data="tableData6" border :summary-method="getSummaries01" show-summary style="width: 100%;"> <el-table-column prop="id" label="ID" width="180" align="center"> </el-table-column> <el-table-column prop="name" label="产品" align="center"> </el-table-column> <el-table-column prop="number" label="数量" align="center"> </el-table-column> <el-table-column prop="price" label="价格" align="center"> </el-table-column> <el-table-column prop="profit" label="利润率" align="center"> </el-table-column> </el-table> <!-- 指定列求和实例处理 --> <h2 style="margin-top:100px">指定列求和实例处理</h2> <el-table :data="tableData6" border :summary-method="getSummaries02" show-summary style="width: 100%;"> <el-table-column prop="id" label="ID" width="180" align="center"> </el-table-column> <el-table-column prop="name" label="产品" align="center"> </el-table-column> <el-table-column prop="number" label="数量" align="center"> </el-table-column> <el-table-column prop="price" label="价格" align="center"> <template slot-scope="scope"> {{$utils.formSum(scope.row.price, 2, '.', ',')}} </template> </el-table-column> <el-table-column prop="profit" label="利润率" align="center"> <template slot-scope="scope"> {{Number(scope.row.profit).toFixed(2)}} % </template> </el-table-column> </el-table> </el-card> </template> <script> export default { data() { return { tableData6: [{ id: '12987122', name: '袜子', number: '234', price: '3', profit: '10.9' }, { id: '12987123', name: '鞋子', number: '165', price: '343.8', profit: '12.00' }, { id: '12987124', name: '裤子', number: '324', price: '249.0', profit: '9' }, { id: '12987125', name: '腰带', number: '621', price: '342.0', profit: '17.00' }, { id: '12987126', name: '手镯', number: '539', price: '43421', profit: '153333' }] }; }, methods: { //格式化数字,格式化金额 // formSum: function(number, decimals, dec_point, thousands_sep) { // /* // * 参数说明: // * number:要格式化的数字 // * decimals:保留几位小数 // * dec_point:小数点符号 // * thousands_sep:千分位符号 // * */ // number = (number + '').replace(/[^0-9+-Ee.]/g, ''); // var n = !isFinite(+number) ? 0 : +number, // prec = !isFinite(+decimals) ? 0 : Math.abs(decimals), // sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep, // dec = (typeof dec_point === 'undefined') ? '.' : dec_point, // s = '', // toFixedFix = function(n, prec) { // var k = Math.pow(10, prec); // return '' + Math.ceil(n * k) / k; // }; // s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.'); // var re = /(-?\d+)(\d{3})/; // while (re.test(s[0])) { // s[0] = s[0].replace(re, "$1" + sep + "$2"); // } // if ((s[1] || '').length < prec) { // s[1] = s[1] || ''; // s[1] += new Array(prec - s[1].length + 1).join('0'); // } // return s.join(dec); // } /** * 将show-summary设置为true就会在表格尾部展示合计行。 * 默认情况下,对于合计行,第一列不进行数据求合操作, * 而是显示「合计」二字(可通过sum-text配置), * 其余列会将本列所有数值进行求合操作,并显示出来。 * 当然,你也可以定义自己的合计逻辑。 * 使用summary-method并传入一个方法,返回一个数组, * 这个数组中的各项就会显示在合计行的各列中,具体可以参考本例中的第二个表格。 */ //简单求和实例处理 getSummaries01(param) { const { columns, data } = param; const sums = []; columns.forEach((column, index) => { if (index === 0) { sums[index] = '总价'; return; } const values = data.map(item => Number(item[column.property])); if (!values.every(value => isNaN(value))) { sums[index] = values.reduce((prev, curr) => { const value = Number(curr); if (!isNaN(value)) { return prev + curr; } else { return prev; } }, 0); sums[index] += ' 元'; } else { sums[index] = 'N/A'; } }); return sums; }, //指定列求和实例处理 getSummaries02(param) { const { columns, data } = param; const sums = []; columns.forEach((column, index) => { if (index === 0) { sums[index] = '总价'; } else if (index === 3) { //对价格做处理:保留两位小数 const values = data.map(item => Number(item[column.property])); if (!values.every(value => isNaN(value))) { sums[index] = values.reduce((prev, curr) => { const value = Number(curr); if (!isNaN(value)) { return prev + curr; } else { return prev; } }, 0); sums[index] = this.$utils.formSum(sums[index], 2, '.', ','); } else { sums[index] = '/'; } } else if (index === 4) { //对利润率做处理:保留两位小数 const values = data.map(item => Number(item[column.property])); if (!values.every(value => isNaN(value))) { sums[index] = values.reduce((prev, curr) => { const value = Number(curr); if (!isNaN(value)) { return prev + curr; } else { return prev; } }, 0); sums[index] = sums[index].toFixed(2); sums[index] += ' %'; } else { sums[index] = '/'; } } else { const values = data.map(item => Number(item[column.property])); if (!values.every(value => isNaN(value))) { sums[index] = values.reduce((prev, curr) => { const value = Number(curr); if (!isNaN(value)) { return prev + curr; } else { return prev; } }, 0); } else { sums[index] = '/'; } } }); return sums; } } }; </script>

以上为个人经验,希望能给大家一个参考,也希望大家多多支持易知道(ezd.cc)。

推荐阅读

    vue项目一些常见问题

    vue项目一些常见问题,组件,样式,**样式污染问题**同样的样式不需要在每个组件都复制组件内单独的样式加外层class包裹。加scope。否则只是

    01-Vue项目实战-网易云音乐-准备工作

    01-Vue项目实战-网易云音乐-准备工作,网易,项目,前言在接下来的一段时间,我会仿照网易云音乐,利用Vue开发一个移动端的网易云音乐项目。在做

    01- 第一天 spring boot2.3.1 +vue3.0 后台管理系统的研发

    01- 第一天 spring boot2.3.1 +vue3.0 后台管理系统的研发,自己的,后台,后台框架一直想开发一套完全属于自己的后台,但是18年的时候,曾经答

    Vue项目中 App.vue文件

    Vue项目中 App.vue文件,文件,内容, 在App.vue文件中,定义了一个id为app的div,在这个div板块中放置Helloworld组件,文件内容如下图所示:在

    table设置列宽|table 列宽

    table设置列宽|table 列宽,,table 列宽直接给每一列的第一行设置宽度就可以了,下边的默认与第一行的相同,如果需要修改,在单独设置就可以,下边

    table边框设置|table边框设置成双线

    table边框设置|table边框设置成双线,,1. table边框设置成双线点选表格,菜单--格式--边框和底纹,在线型中往下拉,你会看到双线,选择后确定就行

    lua的弱表(weak table)简介

    lua的弱表(weak table)简介,字符串,对象, 变量和值的区别变量是值的载体,变量消失,值却不一定消失objectTables, functions,

    1-Vue构造函数的生成

    1-Vue构造函数的生成,函数,属性,版本:@2.6.10环境:web ;思维图:www.processon.com/view/link/5…我们使用的Vue是一个经过层层加强的构造函数

    antimalware service executable怎么关【关闭方法】

    antimalware service executable怎么关【关闭方法】,单击,设置,选择,下拉菜单,威胁,图标,  最近不少用户在使用电脑的时候发现自己的电脑非常

    索尼平板tablet s怎么刷机

    索尼平板tablet s怎么刷机,索尼,平板,索尼平板tablet s怎么刷机卡刷刷机方法:一、备份个人数据资料到电脑端或其他设备或云空间。二、将要

    Win10电脑开机提示“no bootable device”解决方法

    Win10电脑开机提示“no bootable device”解决方法,开机,设置,硬盘,提示,模式,解决方法,  近期,有win10用户碰到电脑无法开机,开机之后提示&ldq