<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
最近有一個想法,就是記錄自己花銷的時候,table中有一項內容是花銷的金額。然後想在table的底部有一項內容是該金額的總計。
然後我就順著elementui的table元件尋找相關的demo,還真發現了一個這樣的demo。
對於這個demo,官方是這麼描述的:
將show-summary設定為true就會在表格尾部展示合計行。預設情況下,對於合計行,第一列不進行資料求合操作,而是顯示「合計」二字(可通過sum-text設定),其餘列會將本列所有數值進行求合操作,並顯示出來。當然,你也可以定義自己的合計邏輯。使用summary-method並傳入一個方法,返回一個陣列,這個陣列中的各項就會顯示在合計行的各列中,具體可以參考本例中的第二個表格。
通過描述可以發現幾個要點:
1.可以通過show-summary開啟在表格尾部展示合計行,預設是false,改成true即可開啟,第一列不進行資料求合操作。
2.尾部合計的文案預設是合計,可以通過sum-text自定義修改
3.可以通過summary-method編寫一個函數,自定義合計的邏輯
官方的原生程式碼如下:
<template> <el-table :data="tableData" border show-summary style="width: 100%"> <el-table-column prop="id" label="ID" width="180"> </el-table-column> <el-table-column prop="name" label="姓名"> </el-table-column> <el-table-column prop="amount1" sortable label="數值 1"> </el-table-column> <el-table-column prop="amount2" sortable label="數值 2"> </el-table-column> <el-table-column prop="amount3" sortable label="數值 3"> </el-table-column> </el-table> <el-table :data="tableData" border height="200" :summary-method="getSummaries" show-summary style="width: 100%; margin-top: 20px"> <el-table-column prop="id" label="ID" width="180"> </el-table-column> <el-table-column prop="name" label="姓名"> </el-table-column> <el-table-column prop="amount1" label="數值 1(元)"> </el-table-column> <el-table-column prop="amount2" label="數值 2(元)"> </el-table-column> <el-table-column prop="amount3" label="數值 3(元)"> </el-table-column> </el-table> </template> <script> export default { data() { return { tableData: [{ id: '12987122', name: '王小虎', amount1: '234', amount2: '3.2', amount3: 10 }, { id: '12987123', name: '王小虎', amount1: '165', amount2: '4.43', amount3: 12 }, { id: '12987124', name: '王小虎', amount1: '324', amount2: '1.9', amount3: 9 }, { id: '12987125', name: '王小虎', amount1: '621', amount2: '2.2', amount3: 17 }, { id: '12987126', name: '王小虎', amount1: '539', amount2: '4.1', amount3: 15 }] }; }, methods: { getSummaries(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; } } }; </script>
接下來就改造下程式碼,根據自己的需求去修改對應的邏輯。
首先把相關的程式碼加上,初始化就是這樣的一個效果
但是預設的文案是合計,有時候我們可能需要根據自己的場景進行修改
這時候就可以使用sum-tex屬性進行修改了,比如我這裡修改:
sum-text="總共消費
效果馬上就來
但是這時候還有一個問題,我只想要消費金額這一列進行彙總,但是現在的情況是把table全部的列都彙總了。甚至把我的字典值都彙總了。。。
這顯然不符合我的需求,這時候就可以使用自定義函數了。
和前面兩個屬性一樣,直接加在table中即可。由於它的值是一個函數,所以寫法和前兩位略有不同。
我們也可以再這個函數裡面通過 sums[index] 去定義總價的文案,如果sum-text和函數裡面定義的 sums[index] 有衝突,會以函數中的 sums[index] 文案為主
這時候的效果是這樣的。
如果我們只想要對某一列進行總計,那麼可以藉助column的property屬性:
可以發現其實就是全部的屬性名稱,那麼我們就可以根據它判斷,實現自定義核算了
比如這裡我想要核算amount這一列的值:
如果哪天又加了一個需求,需要再算一個列,這時候在判斷裡面加上這個條件即可。使用|| 拼接該列
比如這裡我又要合算remark這一列。就可以這麼寫:
相關程式碼如下:
<el-table :data="moneyTableData.slice((currentPage-1)*pagesize,currentPage*pagesize)" highlight-current-row border stripe fit show-summary sum-text="總共消費" :summary-method="getSummaries" > // 對列進行合算 getSummaries(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])); // 只對amount這一列進行總計核算。 if (column.property === 'amount') { 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] = '---' } } }); return sums; },
ElemenUI對這個demo封裝的特別好,我們直接拿來用修改下自己的邏輯即可。
到此這篇關於ElementUI對table的指定列進行合算的文章就介紹到這了,更多相關Element table指定列合算內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45