chenrui
2025-05-20 273cfad3ab35db6b4895411017fbe098fc4245d0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
/**
 * 通用的表格合计方法
 * @param {Object} param
 * @param {Array} param.columns 表格列配置
 * @param {Array} param.data 数据源
 * @param {Array<string>} summaryProps 需要汇总的字段名数组
 * @returns {Array} 合计行数据
 */
const summarizeTable = (param, summaryProps) => {
    const { columns, data } = param;
    const sums = [];
    columns.forEach((column, index) => {
        if (index === 0) {
            sums[index] = '合计';
            return;
        }
        const prop = column.property;
        if (summaryProps.includes(prop)) {
            const values = data.map(item => Number(item[prop]));
            // 只对有效数字进行求和
            if (!values.every(isNaN)) {
                const sum = values.reduce((acc, val) => (!isNaN(val) ? acc + val : acc), 0);
                sums[index] = parseFloat(sum).toFixed(2);
            } else {
                sums[index] = '';
            }
        } else {
            sums[index] = '';
        }
    });
    return sums;
};
 
// 导出函数供其他文件使用
export { summarizeTable };