el-table 加上合计列
时间: 2023-02-14 14:08:41 浏览: 78
可以在 el-table 的列配置中添加一个计算合计的函数,并在模板中使用该函数进行计算。
例如,在 data 中定义一个计算总价的函数:
```
data() {
return {
totalPrice() {
let total = 0;
this.tableData.forEach(item => {
total += item.price;
});
return total;
}
}
}
```
然后在列配置中加入计算合计的列:
```
<el-table :data="tableData">
<el-table-column label="商品名称" prop="name"></el-table-column>
<el-table-column label="单价" prop="price"></el-table-column>
<el-table-column label="总价" align="right">{{ totalPrice() }}</el-table-column>
</el-table>
```
在这种方式下,总价将会显示在表格最后一列。
相关问题
<el-table :data="membersList" style="width: 100%"> <el-table-column type="index" label="序号" align="center" width="80"></el-table-column> <el-table-column label="考勤人员" align="center"> <el-table-column label="姓名" prop="memberName" align="center"></el-table-column> <el-table-column label="岗位" prop="post" align="center"></el-table-column> </el-table-column> <el-table-column label="出勤天数" prop="attendanceDays" align="center"></el-table-column> <el-table-column label="岗位系数" prop="postFactor" align="center"></el-table-column> <el-table-column label="调整系数" align="center"> <template slot-scope="scope"> <div> <el-input-number v-model="scope.row.adjustFactor" :precision="2" :step="0.01" :max="0.15" :min="-0.15" size="small" @change="changeFinal(scope.row)" ></el-input-number> </div> </template> </el-table-column> <el-table-column label="最终考勤天数" prop="finalDavs"></el-table-column> </el-table> <div class="membersDays"> <span>合计</span> <span>{{membersDaysJs}}</span>天 </div>
根据您的代码,我发现您的计算属性名为`membersDaysJs`,但是在模板中使用时没有加上括号`()`,因此无法正确调用这个计算属性。您需要将`{{membersDaysJs}}`修改为`{{membersDaysJs()}}`。这应该可以解决computed不生效的问题。
所以,您的模板应该是这样的:
```
<el-table :data="membersList" style="width: 100%">
<!-- 表格列定义 -->
</el-table>
<div class="membersDays">
<span>合计</span>
<span>{{membersDaysJs()}}</span>天
</div>
```
el-table表尾合计行样式
### 自定义 `el-table` 组件表尾合计行样式
为了实现对 `el-table` 表尾合计行样式的自定义,可以采用多种方法来调整其外观。主要通过 CSS 类名覆盖和 JavaScript 的 API 来完成。
#### 方法一:使用内置类名进行样式定制
Element UI 提供了一组默认的类名为表格的不同部分设置了样式。对于表尾合计行,默认应用了 `.el-table__footer-wrapper tbody td` 这样的选择器[^1]。可以通过扩展这些类名来自定义样式:
```css
/* 修改整个表尾区域 */
.el-table__footer-wrapper {
background-color: #f0f9eb;
}
/* 修改表尾单元格内的文字颜色 */
.el-table__footer-wrapper .cell {
color: red;
}
```
#### 方法二:利用 scoped slot 和 custom class 实现更灵活控制
如果希望针对特定列或条件下的合计行做特殊处理,则推荐使用具名插槽 (named slots),并为该插槽指定唯一的类名以便精确地施加样式规则:
```html
<template>
<el-table :data="tableData" show-summary :summary-method="getSummaries">
<!-- 定义一个作用域插槽 -->
<el-table-column prop="name"></el-table-column>
<el-table-column label="操作" align="center">
<template v-slot="{ row }">
<span :class="'custom-footer-cell'">{{row.total}}</span>
</template>
</el-table-column>
</el-table>
</template>
<script setup lang="ts">
import { ref, computed } from 'vue';
const tableData = [
// 数据源...
];
// 计算属性返回汇总数据的方法
function getSummaries(param) {
const sums = [];
sums.push('总计:');
let total = param.data.reduce((acc, cur) => acc + Number(cur.amount), 0);
sums.push(total.toFixed(2));
return sums;
}
</script>
<style scoped>
.custom-footer-cell {
font-weight: bold; /* 加粗显示 */
text-align: center !important;
}
</style>
```
上述代码片段展示了如何创建一个新的计算属性用于生成总结信息,并将其绑定到模板中的相应位置;同时,在 `<style>` 部分添加了一个新的 CSS 规则以改变此区域内文本的表现形式。
#### 方法三:借助 summary-method 动态设置样式
还可以进一步增强灵活性,即在调用 `summary-method` 函数时动态决定哪些字段应该被赋予额外的样式标记。这允许基于业务逻辑实时更新界面布局而不必硬编码 HTML 结构。
```javascript
methods: {
getSummaries({ columns }) {
const sums = [];
columns.forEach((column, index) => {
if (index === 0) {
sums[index] = '总价';
return;
}
const values = this.tableData.map(item =>
Number(item[column.property])
);
if (!values.every(value => isNaN(value))) {
sums[index] = `${this.formatPrice(values.reduce(
(prev, curr) => prev + curr,
0))}`;
// 假设我们想要给价格列加上红色字体效果
column.className = "red-text";
}
else {
sums[index] = '-';
}
});
return sums;
},
formatPrice(num){
return num.toLocaleString()+'元'
}
},
mounted(){
console.log(this.$refs.multipleTable.columns); // 可查看所有列对象及其className属性
}
```
在此基础上,可以在全局样式文件中定义 `.red-text` 类对应的样式特性,从而影响最终渲染出来的页面视觉效果。
阅读全文
相关推荐










