vue3 el-table 列数据合计

在 Vue 3 中使用 Element Plus 的 <el-table> 组件时,如果你想要对列数据进行合计(即计算某一列的总和),你可以通过几种方式来实现。以下是几种常见的方法:

方法1:使用计算属性

你可以在 Vue 组件的 computed 属性中计算合计值。

复制代码
<template>
  <el-table :data="tableData" border style="width: 100%">
    <el-table-column prop="date" label="日期" width="180"></el-table-column>
    <el-table-column prop="name" label="姓名" width="180"></el-table-column>
    <el-table-column prop="amount" label="金额"></el-table-column>
  </el-table>
  <div>合计: {{ totalAmount }}</div>
</template>
 
<script setup>
import { ref, computed } from 'vue';
 
const tableData = ref([
  { date: '2023-04-01', name: '张三', amount: 100 },
  { date: '2023-04-02', name: '李四', amount: 200 },
  // 更多数据...
]);
 
const totalAmount = computed(() => {
  return tableData.value.reduce((sum, item) => {
    return sum + item.amount;
  }, 0);
});
</script>

方法2:使用方法(Method)

你也可以在 Vue 组件的方法中计算合计值,然后在模板中调用这个方法。

复制代码
<template>
  <el-table :data="tableData" border style="width: 100%">
    <el-table-column prop="date" label="日期" width="180"></el-table-column>
    <el-table-column prop="name" label="姓名" width="180"></el-table-column>
    <el-table-column prop="amount" label="金额"></el-table-column>
  </el-table>
  <div>合计: {{ calculateTotalAmount() }}</div>
</template>
 
<script setup>
import { ref } from 'vue';
 
const tableData = ref([
  { date: '2023-04-01', name: '张三', amount: 100 },
  { date: '2023-04-02', name: '李四', amount: 200 },
  // 更多数据...
]);
 
function calculateTotalAmount() {
  return tableData.value.reduce((sum, item) => {
    return sum + item.amount;
  }, 0);
}
</script>

方法3:使用 Element Plus 的 <el-table-column> 的 summary-method 属性(适用于 Element Plus 2.x)

如果你使用的是 Element Plus 的旧版本,可以利用 <el-table> 的 summary-method 属性来直接在表格底部显示合计。但请注意,Element Plus 在 Vue 3 中通常指的是最新版本,该版本可能不支持此属性或其用法有所变化。对于 Vue 3 和 Element Plus 的最新版本,推荐使用计算属性或方法。如果你在使用旧版本的 Element Plus,可以这样设置:

复制代码
<template>
  <el-table :data="tableData" border style="width: 100%" show-summary :summary-method="sumMethod">
    <el-table-column prop="date" label="日期" width="180"></el-table-column>
    <el-table-column prop="name" label="姓名" width="180"></el-table-column>
    <el-table-column prop="amount" label="金额"></el-table-column>
  </el-table>
</template>

<script setup>
import { ref } from 'vue';

// 示例数据初始化
const tableData = ref([
  { date: '2023-01-01', name: '张三', amount: 100 },
  { date: '2023-01-02', name: '李四', amount: 200 },
  { date: '2023-01-03', name: '王五', amount: 300 }
]);

// 自定义合计方法
const sumMethod = ({ columns, data }) => {
  const sums = [];
  
  columns.forEach((column, index) => {
    if (index === 0) {
      // 第一列显示"合计"
      sums[index] = '合计';
      return;
    }
    
    if (column.property === 'amount') {
      // 金额列计算总和
      const values = data.map(item => Number(item[column.property]));
      sums[index] = values.reduce((acc, curr) => acc + curr, 0);
      
      // 添加单位/格式化显示
      sums[index] += ' 元';
    } else {
      // 非数值列留空
      sums[index] = '';
    }
  });

  return sums;
};
</script>

对于 Vue 3 和 Element Plus 的最新版本,推荐使用计算属性或方法,因为 summary-method 在新版中可能已经被弃用或用法有所改变。确保查阅最新的官方文档以获取最准确的信息和示例

相关推荐
几何心凉几秒前
端到端具身交互智能正式上线:让 AI 通过屏幕和机器人,真正走进现实世界
前端·人工智能·实时互动·机器人·交互
木圭的AI时代指南7 分钟前
实测 MiniMax M3.1 Flash:同一道 Three.js 大题,两个 agent 差出 4.6 倍
开发语言·javascript·ecmascript
西红柿炖牛腩35412 分钟前
3D 模型压缩脚本又报错又配环境?换个不用维护的方案
javascript·3d·性能优化
tryCbest44 分钟前
Vue3——第 6 篇:事件处理与表单绑定——v-on 与 v-model
前端·javascript·vue.js
恋猫de小郭1 小时前
Flutter 的文字为什么比 SwiftUI 更细?问题主要在 Skia 的 256 项查找表里
android·前端·flutter
lexiangqicheng1 小时前
前端高阶面试核心通关指南:深入解析Vue3与React18底层原理及性能优化
前端·面试·性能优化
怕浪猫1 小时前
前端对接聊天 API:我用 React 做了一个比 ChatGPT 还好看的界面
前端·后端·面试
程序员小孔.1 小时前
基于 Spring Cloud + Vue 的 JEEWMS 开源仓储管理平台设计与实现
前端·javascript·vue.js·spring boot·spring cloud·开源
IT_陈寒1 小时前
深入理解Python:核心原理与最佳实践
前端·人工智能·后端
创世虚拟世界1 小时前
把 3D 虚拟世界拉到本地:vibe coding 的手感,是从看见自己那一行改动开始的
javascript·数据库·人工智能·3d·gitee·虚拟现实