早上刚遇到这个问题,弹窗选完数据后,在页面的table表格中展示选好的内容,并且要有合计行 结果发现合计行不展示,但是我按F12或上下拖动页面,合计行就出来了
原因在于页面刚渲染的时候表格是空的,页面渲染在数据接收前。页面缩放会再次渲染,因为才会在拖动的时候才能看见合计行,刚渲染好的时候看不到。
解决方案很简单,通过v-if判断数据源数组的长度,当有长度的时候代表数据已经渲染,表格不是空的。(ps:下午更新一下,方法可行,但是因为一些原因,组件被封装过,导致我这么做的时候,高度无法渲染,只有在合计行出现的时候表格才会被内容撑开,换了另一种方法也可行,方法放在最下面了)
有这两个就可以实现合计行了
<el-table
ref="standTable"
v-if="assetTableData.length"
:data="assetTableData"
show-summary
:summary-method="getSummaries"
>
<el-table-column width="100" label="序号" type="index" align="center">
<template slot-scope="scope">
<span>{{ (queryParams.pageNum - 1) * queryParams.pageNum + scope.$index + 1 }}</span>
</template>
</el-table-column>
<el-table-column label="数量" :show-overflow-tooltip="true" align="center" prop="qty" />
<el-table-column label="xx值" :show-overflow-tooltip="true" align="center" prop="cost" />
<el-table-column label="xx值" :show-overflow-tooltip="true" align="center" prop="depLeft" />
<el-table-column label="操作" :show-overflow-tooltip="true" align="center">
<template slot-scope="scope">
<button>删除</button>
</template>
</el-table-column>
</el-table>
getSummaries(param) {
const { columns, data } = param
const sums = []
columns.forEach((column, index) => {
if (index === 0) {//给哪一列加‘合计’
sums[index] = '合计'
return
}
const tempArr = ['qty', 'cost', 'depLeft']//给需要的列加求和计算
if (tempArr.includes(column.property)) {
const values = data.map(item => Number(item[column.property]))
if (!values.every(value => isNaN(value))) {
sums[index] = this.moneyFilter(
values.reduce((prev, curr) => {
const value = Number(curr)
if (!isNaN(value)) {
return prev + curr
} else {
return prev
}
}, 0)
)
}
} else {
sums[index] = '-'
}
})
return sums
},
选择给哪一列加合计,给哪些需要的列做求和计算,其他的代码不需要改,基本上这个就是文档上的方法
方法二
在update函数中这样写,主要doLayout的L要大写,我手打的dolayout导致没生效
updated() {
this.$nextTick(() => {
this.$refs['standTable'].doLayout()
})
},
|