checkList.forEach(item => { item.detailList.forEach(j => { const taxRate = Math.round(parseFloat(j[columns["column_tax_rate"]])) / 100 // 计算折扣含税金额 const discountTaxAmount = Math.round(j[columns["column_discount_amount"]] * (1 + taxRate) * 100) / 100 // 计算折扣税额 const taxAmount = Math.round((discountTaxAmount - j[columns["column_discount_amount"]]) * 100) / 100 // 计算税额 const allTaxAmount = Math.round((j[columns["column_tax_amount"]] + taxAmount) * 100) / 100 // 计算未税金额 const allAmountNoTax = Math.round((j[columns["column_amount_no_tax"]] + j[columns["column_discount_amount"]]) * 100) / 100 // 计算含税金额 const allAmount = Math.round((j[columns["column_amount"]] + discountTaxAmount) * 100) / 100 j.taxRate = taxRate j.discountTaxAmount = discountTaxAmount j.taxAmount = taxAmount j.allTaxAmount = allTaxAmount j.allAmountNoTax = allAmountNoTax j.allAmount = allAmount }) }) if (mergeType.value === 'no_merge') { checkList.forEach(item => { item.detailList.forEach(j => { const detailInfo = { // 这里按照系统设置里的字段顺序 // order_error: false, // 暂时置空 订单号_100: item.单据号_100, 商品名称_200: j[columns["column_material_name"]], 规格型号_100: j[columns["column_spec"]], 计量单位_100: j[columns["column_unit_name"]], 数量_80: j[columns["column_quantity"]], 税率_70: j.taxRate, 税率标志_100: 1, 未税单价_100: j[columns["column_price"]], 含税单价_100: j[columns["column_tax_price"]], 税额_100: j.allTaxAmount, 未税金额_100: j.allAmountNoTax, 含税金额_100: j.allAmount, // 这三个暂时置为0 折扣税额_100: j.taxAmount, 折扣未税金额_130: j[columns["column_discount_amount"]], 折扣含税金额_130: j.discountTaxAmount, 分类编码_180: j[columns["column_category_id"]], // 备注去掉 // 备注_100: j.fcomment 备注_100: j[columns["column_comment"]] } detailList.push(detailInfo) }) }) } 优化这段代码
时间: 2024-03-17 17:43:20 浏览: 23
这段代码可以进行如下优化:
1. 使用数组的 map 方法来遍历 checkList 和 detailList,可以减少代码冗余。
2. 将计算税率、折扣含税金额、折扣税额、未税金额、含税金额等操作提取为单独的函数,使代码更加简洁易懂。
3. 使用对象解构来简化代码,避免重复书写 columns["column_xxx"]。
4. 将生成 detailInfo 的代码提取为单独的函数,使代码结构更加清晰。
下面是优化后的代码示例:
```
const calculateValues = (j, columns) => {
const taxRate = Math.round(parseFloat(j[columns.column_tax_rate])) / 100;
const discountTaxAmount = Math.round(j[columns.column_discount_amount] * (1 + taxRate) * 100) / 100;
const taxAmount = Math.round((discountTaxAmount - j[columns.column_discount_amount]) * 100) / 100;
const allTaxAmount = Math.round((j[columns.column_tax_amount] + taxAmount) * 100) / 100;
const allAmountNoTax = Math.round((j[columns.column_amount_no_tax] + j[columns.column_discount_amount]) * 100) / 100;
const allAmount = Math.round((j[columns.column_amount] + discountTaxAmount) * 100) / 100;
return {
taxRate,
discountTaxAmount,
taxAmount,
allTaxAmount,
allAmountNoTax,
allAmount
};
};
const generateDetailInfo = (item, j, columns) => ({
// 这里按照系统设置里的字段顺序
// order_error: false, // 暂时置空
订单号_100: item.单据号_100,
商品名称_200: j[columns.column_material_name],
规格型号_100: j[columns.column_spec],
计量单位_100: j[columns.column_unit_name],
数量_80: j[columns.column_quantity],
税率_70: j.taxRate,
税率标志_100: 1,
未税单价_100: j[columns.column_price],
含税单价_100: j[columns.column_tax_price],
税额_100: j.allTaxAmount,
未税金额_100: j.allAmountNoTax,
含税金额_100: j.allAmount,
// 这三个暂时置为0
折扣税额_100: j.taxAmount,
折扣未税金额_130: j[columns.column_discount_amount],
折扣含税金额_130: j.discountTaxAmount,
分类编码_180: j[columns.column_category_id],
// 备注去掉
// 备注_100: j.fcomment
备注_100: j[columns.column_comment]
});
const detailList = [];
checkList.map(item => ({
...item,
detailList: item.detailList.map(j => ({
...j,
...calculateValues(j, columns)
}))
})).forEach(item => {
item.detailList.forEach(j => {
detailList.push(generateDetailInfo(item, j, columns));
});
});
```
这样优化后的代码更加清晰简洁,易于维护和阅读。