gaoluyang
43 分钟以前 89a87a389d1e1a1a363aa39637694c044511af98
src/utils/summarizeTable.js
@@ -1,12 +1,11 @@
/**
 * 通用的表格合计方法
 * @param {Object} param
 * @param {Array} param.columns 表格列配置
 * @param {Array} param.data 数据源
 * @param {Array<string>} summaryProps 需要汇总的字段名数组
 * @param {Object} param - 包含表格列配置和数据源的对象
 * @param {Array<string>} summaryProps - 需要汇总的字段名数组
 * @param {Object} specialFormat - 特殊格式化规则:字段名 -> 格式化选项(如是否去掉小数)
 * @returns {Array} 合计行数据
 */
const summarizeTable = (param, summaryProps) => {
const summarizeTable = (param, summaryProps, specialFormat = {}) => {
    const { columns, data } = param;
    const sums = [];
    columns.forEach((column, index) => {
@@ -20,7 +19,13 @@
            // 只对有效数字进行求和
            if (!values.every(isNaN)) {
                const sum = values.reduce((acc, val) => (!isNaN(val) ? acc + val : acc), 0);
                sums[index] = parseFloat(sum).toFixed(2);
                if (specialFormat[prop] && specialFormat[prop].noDecimal) {
                    // 如果指定了不需要保留小数,则直接转换为整数
                    sums[index] = Math.round(sum).toString();
                } else {
                    // 默认保留两位小数
                    sums[index] = parseFloat(sum).toFixed(specialFormat[prop]?.decimalPlaces ?? 2);
                }
            } else {
                sums[index] = '';
            }
@@ -29,7 +34,15 @@
        }
    });
    return sums;
};
}
// 不含税总价计算
const calculateTaxExclusiveTotalPrice = (taxInclusiveTotalPrice, taxRate) => {
    const taxRateDecimal = taxRate / 100;
    return (taxInclusiveTotalPrice / (1 + taxRateDecimal)).toFixed(2);
}
// 含税总价计算
const calculateTaxIncludeTotalPrice = (taxInclusiveUnitPrice, quantity) => {
    return (taxInclusiveUnitPrice * quantity).toFixed(2);
}
// 导出函数供其他文件使用
export { summarizeTable };
export { summarizeTable, calculateTaxExclusiveTotalPrice ,calculateTaxIncludeTotalPrice};