:summary-method="getSummaries"
<el-table:data="reformtableData"style="width: 100%"show-summary:summary-method="getSummaries"ref="reformtableRef" >
<el-table-column label="序号" type="index" width="60" align="center"> </el-table-column> <el-table-column prop="itemType" label="改造类型" width="130" align="center"><template #default="scope">{{ reformItemStatus.filter(rs => rs.value == scope.row.itemType)[0]?.label }}</template> </el-table-column> </el-table>
const getSummaries=(param)=>{const { columns, data } = param;const sums = [];columns.forEach((column, index) => {if (index === 0) {sums[index] = '合计';} else {// console.log("values",values)const values = data.map(item => Number(item.price));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] = 'N/A';}filters.totalAmount=sums[index]}});nextTick(()=>{reformtableRef.value.doLayout(); // 重新渲染表格})return sums; }
如果想添加一行合计本来可以按照上面的方法写的。
因为我用了summary-method他在计算最后一行的时候使用
:span-method="objectSpanMethod"
根本这一行没有算进去。找了半天没有找到原因。开始以为是没有重新渲染使用了
// nextTick(()=>{ // reformtableRef.value.doLayout(); // 重新渲染表格 // })
也不起作用。最后想的可以使用这个append插槽。而且样式还可以自己设置加个class就行了。方便很多啊
<template #append ><span>合计</span><span>{{getAllPrice}}</span> </template>
getAllPrice用个计算属性取值就可以了