| ¶Ô±ÈÐÂÎļþ |
| | |
| | | /** |
| | | * éç¨çè¡¨æ ¼åè®¡æ¹æ³ |
| | | * @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); |
| | | }; |
| | | // å«ç¨æ»ä»·è®¡ç® |
| | | const calculateTaxIncludeTotalPrice = (taxInclusiveUnitPrice, quantity) => { |
| | | return (taxInclusiveUnitPrice * quantity).toFixed(2); |
| | | }; |
| | | // 导åºå½æ°ä¾å
¶ä»æä»¶ä½¿ç¨ |
| | | export { |
| | | summarizeTable, |
| | | calculateTaxExclusiveTotalPrice, |
| | | calculateTaxIncludeTotalPrice, |
| | | }; |