vue表格el-table取到某一列求和的值

elementUI官网给的求和方法只能在表尾显示,但这并不适用于现实开发。
网上给的解决方法大多没有用,希望这篇文章能帮到你。
官网例子

实际开发例子:
需求:在表前位置显示○○量总和

实际开发需求

解释:
sumAmount.toFixed(1)toFixed()是显示小数后几位。
tableData是你在<el-table>定义的:data=“tableData”。
electLiquid是你需要求和的列在<el-table-column>定义的 prop=“electLiquid”。
所以:
只需要修改tableDataelectLiquid成你自己定义的,computed这边直接复制粘贴。

<p class="p3">
                ○○量:
                <span>{{ sumAmount.toFixed(1) }}</span
                >L
            </p>
            <el-row :gutter="20" class="row2">
                <el-table
                    :data="tableData"
                    border
                    height="340"
                    :row-style="{ height: '20px' }"
                    :cell-style="{ padding: '0px' }"
                    size="mini"
                    header-row-class-name="tableHead"
                >
                    <el-table-column
                        type="index"
                        :index="indexMethod"
                        align="center"
                    >
                    </el-table-column
                    ><el-table-column label="select" align="center">
                        <el-table-column
                            type="selection"
                            width="75"
                            align="center"
                        >
                        </el-table-column
                    ></el-table-column>
                    <el-table-column
                        prop="getDate"
                        label="○○"
                        sortable
                        width="160"
                        align="center"
                    ></el-table-column
                    ><el-table-column
                        prop="ctrlNum"
                        label="○○"
                        sortable
                        width="150"
                        align="center"
                        ><template scope="scope">
                            <div
                                class="sub-body"
                                @click="showinfoDetail(scope.row)"
                            >
                                {{ scope.row.ctrlNum }}
                            </div>
                        </template></el-table-column
                    ><el-table-column
                        prop="shipComp"
                        label="○○"
                        width="150"
                        align="center"
                    ></el-table-column
                    ><el-table-column
                        prop="delivComp"
                        label="○○"
                        sortable
                        width="150"
                        align="center"
                    ></el-table-column
                    ><el-table-column
                        prop="statusType"
                        label="○○
                            ○○"
                        sortable
                        width="140"
                        align="center"
                    ></el-table-column
                    ><el-table-column
                        prop="electLiquid"
                        label="○○量"
                        sortable
                        class="tablecolum1"
                        align="center"
                    ></el-table-column
                    ><el-table-column
                        prop="proCplDate"
                        label="○○"
                        sortable
                        width="160"
                        align="center"
                    ></el-table-column
                    ><el-table-column
                        prop="finCplDate"
                        label="○○"
                        sortable
                        width="160"
                        align="center"
                    ></el-table-column></el-table
            ></el-row>
<script>
export default {
computed: {
        sumAmount() {
            return this.tableData
                .map(row => row.electLiquid)
                .reduce((acc, cur) => parseFloat(cur) + acc, 0);
        }
    }
}
</script>

本文参考自: 解决vue 表格table列求和的问题

<think>嗯,用户的问题是在Vue3中使用Element Plus的el-table组件时,如何让合计行的数保留两位小数。我需要先回忆一下Element Plus的文档,特别是关于表格合计行的部分。 记得在Element Plus中,表格的合计行可以通过设置show-summary属性来显示,而自定义合计逻辑则需要使用summary-method方法。默认情况下,除了第一列显示“合计”外,其他列会自动求和,但用户需要格式化这些数,保留两位小数。 用户提到的保留两位小数,可能需要用到JavaScript的toFixed(2)方法。不过,直接修改合计行的数可能需要覆盖默认的summary-method。默认的合计方法会自动计算列的和,但格式是原始数字,没有处理小数位数。 所以步骤应该是:首先,在el-table上设置show-summary和:summary-method,指向一个自定义的方法。然后,在这个方法中,对每一列进行处理,如果是数列,就计算总和并用toFixed(2)格式化,其他列则保持默认。例如,对于非第一列,判断是否是数列,如果是,则求和后保留两位小数。 另外,用户可能还希望合计行的数与其他列的对齐方式一致,比如居中对齐,可能需要通过CSS来调整样式,例如设置text-align: center。 还需要注意,可能有些列的数不是数字,这时候需要跳过处理,或者根据实际情况处理。另外,使用toFixed(2)时要注意四舍五入的问题,以及是否有可能出现NaN的情况,比如列中的数据包含非数字,这时候需要先进行过滤或转换。 查看用户提供的引用,引用[2]和引用[3]提到了使用formatter来格式化单元格内容,但合计行需要不同的方法,即summary-method。引用[5]提到可以通过summary-method自定义合计行的显示,包括数格式化。 所以综合起来,解决方法就是自定义summary-method,在计算合计时对数进行处理,保留两位小数。同时,可能需要在合计行的样式中设置对齐方式,确保美观。 最后,示例代码应该展示如何实现这一点,包括设置show-summary,定义summaryMethod函数,以及在函数中对数列进行处理。同时,提醒用户注意数据类型和可能的错误处理。</think>在Vue3+Element Plus中实现表格合计行数保留两位小数,可以通过自定义`summary-method`方法结合数格式化函数实现。以下是具体实现步骤: ### 一、基础实现步骤 1. **启用合计行功能**:为`<el-table>`添加`show-summary`属性 2. **自定义合计方法**:通过`:summary-method`绑定自定义计算方法 3. **数格式化处理**:在计算方法中对数进行四舍五入处理 ```vue <template> <el-table :data="tableData" show-summary :summary-method="summaryMethod"> <el-table-column prop="name" label="名称"/> <el-table-column prop="price" label="价格"/> <el-table-column prop="quantity" label="数量"/> </el-table> </template> <script setup> const tableData = [ { name: '商品A', price: 12.345, quantity: 5 }, { name: '商品B', price: 7.891, quantity: 3 } ] const summaryMethod = ({ columns, data }) => { return columns.map((column, index) => { if (index === 0) return '合计' if (['price', 'quantity'].includes(column.property)) { const values = data.map(item => Number(item[column.property])) const sum = values.reduce((a, b) => a + b, 0) return sum.toFixed(2) // 核心格式化方法[^2][^5] } return '' }) } </script> ``` ### 二、高级优化方案 1. **动态列处理**:自动识别数列进行格式化 ```javascript const summaryMethod = ({ columns, data }) => { const numberColumns = ['price', 'quantity'] // 可动态获取数列 return columns.map((column, index) => { if (index === 0) return '合计' if (numberColumns.includes(column.property)) { const sum = data.reduce((acc, item) => acc + (Number(item[column.property]) || 0), 0) return isNaN(sum) ? '-' : sum.toFixed(2) } return column.property === 'operation' ? '' : '-' }) } ``` 2. **样式对齐设置**:保持与列内容对齐一致 ```css /* 合计行数居中对齐 */ .el-table__footer .cell { text-align: center !important; } ``` ### 三、注意事项 1. **数据类型验证**:建议在格式化前增加`Number()`转换,避免非数类型报错 2. **空处理**:使用`|| 0`处理null/undefined,防止计算错误 3. **国际化支持**:如需显示千分位分隔符,可使用`Number.prototype.toLocaleString()`
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值