From 692451959df42c10d489d866dcae48a121bd9dd0 Mon Sep 17 00:00:00 2001 From: gaoluyang <2820782392@qq.com> Date: 星期二, 20 五月 2025 17:51:24 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/dev' into dev --- src/utils/summarizeTable.js | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 43 insertions(+), 0 deletions(-) diff --git a/src/utils/summarizeTable.js b/src/utils/summarizeTable.js new file mode 100644 index 0000000..ae6e975 --- /dev/null +++ b/src/utils/summarizeTable.js @@ -0,0 +1,43 @@ +/** + * 閫氱敤鐨勮〃鏍煎悎璁℃柟娉� + * @param {Object} param - 鍖呭惈琛ㄦ牸鍒楅厤缃拰鏁版嵁婧愮殑瀵硅薄 + * @param {Array<string>} summaryProps - 闇�瑕佹眹鎬荤殑瀛楁鍚嶆暟缁� + * @param {Object} specialFormat - 鐗规畩鏍煎紡鍖栬鍒欙細瀛楁鍚� -> 鏍煎紡鍖栭�夐」锛堝鏄惁鍘绘帀灏忔暟锛� + * @returns {Array} 鍚堣琛屾暟鎹� + */ +const summarizeTable = (param, summaryProps, specialFormat = {}) => { + 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); + 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] = ''; + } + } else { + sums[index] = ''; + } + }); + return sums; +} +const calculateTaxExclusiveTotalPrice = (taxInclusiveTotalPrice, taxRate) => { + const taxRateDecimal = taxRate / 100; + return (taxInclusiveTotalPrice / (1 + taxRateDecimal)).toFixed(2); +} +// 瀵煎嚭鍑芥暟渚涘叾浠栨枃浠朵娇鐢� +export { summarizeTable, calculateTaxExclusiveTotalPrice }; \ No newline at end of file -- Gitblit v1.9.3