From e093877b02cb5725fef570ee49ca2bca31f51871 Mon Sep 17 00:00:00 2001 From: gaoluyang <2820782392@qq.com> Date: 星期五, 11 七月 2025 14:17:06 +0800 Subject: [PATCH] 1.采购台账-销售台账:金额都可以填写,填一个计算另外一个 --- src/views/salesManagement/salesLedger/index.vue | 187 ++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 169 insertions(+), 18 deletions(-) diff --git a/src/views/salesManagement/salesLedger/index.vue b/src/views/salesManagement/salesLedger/index.vue index c2ebd2c..b49a6d8 100644 --- a/src/views/salesManagement/salesLedger/index.vue +++ b/src/views/salesManagement/salesLedger/index.vue @@ -235,38 +235,39 @@ <el-input v-model="productForm.unit" placeholder="璇疯緭鍏�" clearable /> </el-form-item> </el-col> - <el-col :span="12"> - <el-form-item label="鏁伴噺锛�" prop="quantity"> - <el-input-number :step="0.1" :min="0" v-model="productForm.quantity" placeholder="璇疯緭鍏�" clearable - @change="mathNum" style="width: 100%" /> - </el-form-item> - </el-col> + <el-col :span="12"> + <el-form-item label="绋庣巼(%)锛�" prop="taxRate"> + <el-select v-model="productForm.taxRate" placeholder="璇烽�夋嫨" clearable @change="calculateFromTaxRate"> + <el-option label="1" value="1" /> + <el-option label="6" value="6" /> + <el-option label="13" value="13" /> + </el-select> + </el-form-item> + </el-col> </el-row> <el-row :gutter="30"> <el-col :span="12"> <el-form-item label="鍚◣鍗曚环(鍏�)锛�" prop="taxInclusiveUnitPrice"> - <el-input-number :step="0.01" :min="0" v-model="productForm.taxInclusiveUnitPrice" style="width: 100%" placeholder="璇疯緭鍏�" clearable @change="mathNum" /> + <el-input-number :step="0.01" :min="0" v-model="productForm.taxInclusiveUnitPrice" style="width: 100%" + placeholder="璇疯緭鍏�" clearable @change="calculateFromUnitPrice" /> </el-form-item> </el-col> - <el-col :span="12"> - <el-form-item label="绋庣巼(%)锛�" prop="taxRate"> - <el-select v-model="productForm.taxRate" placeholder="璇烽�夋嫨" clearable @change="mathNum"> - <el-option label="1" value="1" /> - <el-option label="6" value="6" /> - <el-option label="13" value="13" /> - </el-select> - </el-form-item> - </el-col> + <el-col :span="12"> + <el-form-item label="鏁伴噺锛�" prop="quantity"> + <el-input-number :step="0.1" :min="0" v-model="productForm.quantity" placeholder="璇疯緭鍏�" clearable + @change="calculateFromQuantity" style="width: 100%" /> + </el-form-item> + </el-col> </el-row> <el-row :gutter="30"> <el-col :span="12"> <el-form-item label="鍚◣鎬讳环(鍏�)锛�" prop="taxInclusiveTotalPrice"> - <el-input v-model="productForm.taxInclusiveTotalPrice" placeholder="璇疯緭鍏�" clearable disabled /> + <el-input v-model="productForm.taxInclusiveTotalPrice" placeholder="璇疯緭鍏�" clearable @change="calculateFromTotalPrice" /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="涓嶅惈绋庢�讳环(鍏�)锛�" prop="taxExclusiveTotalPrice"> - <el-input v-model="productForm.taxExclusiveTotalPrice" placeholder="璇疯緭鍏�" clearable disabled /> + <el-input v-model="productForm.taxExclusiveTotalPrice" placeholder="璇疯緭鍏�" clearable @change="calculateFromExclusiveTotalPrice" /> </el-form-item> </el-col> </el-row> @@ -413,6 +414,8 @@ }, }); const { productForm, productRules } = toRefs(productFormData); +// 闃叉寰幆璁$畻鐨勬爣蹇� +const isCalculating = ref(false); const upload = reactive({ // 涓婁紶鐨勫湴鍧� url: import.meta.env.VITE_APP_BASE_API + "/file/upload", @@ -808,6 +811,154 @@ ); } }; + +// 鏍规嵁鍚◣鎬讳环璁$畻鍚◣鍗曚环鍜屾暟閲� +const calculateFromTotalPrice = () => { + if (isCalculating.value) return; + + const totalPrice = parseFloat(productForm.value.taxInclusiveTotalPrice); + const quantity = parseFloat(productForm.value.quantity); + + if (!totalPrice || !quantity || quantity <= 0) { + return; + } + + isCalculating.value = true; + + // 璁$畻鍚◣鍗曚环 = 鍚◣鎬讳环 / 鏁伴噺 + productForm.value.taxInclusiveUnitPrice = (totalPrice / quantity).toFixed(2); + + // 濡傛灉鏈夌◣鐜囷紝璁$畻涓嶅惈绋庢�讳环 + if (productForm.value.taxRate) { + productForm.value.taxExclusiveTotalPrice = + proxy.calculateTaxExclusiveTotalPrice( + totalPrice, + productForm.value.taxRate + ); + } + + isCalculating.value = false; +}; + +// 鏍规嵁涓嶅惈绋庢�讳环璁$畻鍚◣鍗曚环鍜屾暟閲� +const calculateFromExclusiveTotalPrice = () => { + if (!productForm.value.taxRate) { + proxy.$modal.msgWarning("璇峰厛閫夋嫨绋庣巼"); + return; + } + if (isCalculating.value) return; + + const exclusiveTotalPrice = parseFloat(productForm.value.taxExclusiveTotalPrice); + const quantity = parseFloat(productForm.value.quantity); + const taxRate = parseFloat(productForm.value.taxRate); + + if (!exclusiveTotalPrice || !quantity || quantity <= 0 || !taxRate) { + return; + } + + isCalculating.value = true; + + // 鍏堣绠楀惈绋庢�讳环 = 涓嶅惈绋庢�讳环 / (1 - 绋庣巼/100) + const taxRateDecimal = taxRate / 100; + const inclusiveTotalPrice = exclusiveTotalPrice / (1 - taxRateDecimal); + productForm.value.taxInclusiveTotalPrice = inclusiveTotalPrice.toFixed(2); + + // 璁$畻鍚◣鍗曚环 = 鍚◣鎬讳环 / 鏁伴噺 + productForm.value.taxInclusiveUnitPrice = (inclusiveTotalPrice / quantity).toFixed(2); + + isCalculating.value = false; +}; + +// 鏍规嵁鏁伴噺鍙樺寲璁$畻鎬讳环 +const calculateFromQuantity = () => { + if (!productForm.value.taxRate) { + proxy.$modal.msgWarning("璇峰厛閫夋嫨绋庣巼"); + return; + } + if (isCalculating.value) return; + + const quantity = parseFloat(productForm.value.quantity); + const unitPrice = parseFloat(productForm.value.taxInclusiveUnitPrice); + + if (!quantity || quantity <= 0 || !unitPrice) { + return; + } + + isCalculating.value = true; + + // 璁$畻鍚◣鎬讳环 + productForm.value.taxInclusiveTotalPrice = (unitPrice * quantity).toFixed(2); + + // 濡傛灉鏈夌◣鐜囷紝璁$畻涓嶅惈绋庢�讳环 + if (productForm.value.taxRate) { + productForm.value.taxExclusiveTotalPrice = + proxy.calculateTaxExclusiveTotalPrice( + productForm.value.taxInclusiveTotalPrice, + productForm.value.taxRate + ); + } + + isCalculating.value = false; +}; + +// 鏍规嵁鍚◣鍗曚环鍙樺寲璁$畻鎬讳环 +const calculateFromUnitPrice = () => { + if (!productForm.value.taxRate) { + proxy.$modal.msgWarning("璇峰厛閫夋嫨绋庣巼"); + return; + } + if (isCalculating.value) return; + + const quantity = parseFloat(productForm.value.quantity); + const unitPrice = parseFloat(productForm.value.taxInclusiveUnitPrice); + + if (!quantity || quantity <= 0 || !unitPrice) { + return; + } + + isCalculating.value = true; + + // 璁$畻鍚◣鎬讳环 + productForm.value.taxInclusiveTotalPrice = (unitPrice * quantity).toFixed(2); + + // 濡傛灉鏈夌◣鐜囷紝璁$畻涓嶅惈绋庢�讳环 + if (productForm.value.taxRate) { + productForm.value.taxExclusiveTotalPrice = + proxy.calculateTaxExclusiveTotalPrice( + productForm.value.taxInclusiveTotalPrice, + productForm.value.taxRate + ); + } + + isCalculating.value = false; +}; + +// 鏍规嵁绋庣巼鍙樺寲璁$畻涓嶅惈绋庢�讳环 +const calculateFromTaxRate = () => { + if (!productForm.value.taxRate) { + proxy.$modal.msgWarning("璇峰厛閫夋嫨绋庣巼"); + return; + } + if (isCalculating.value) return; + + const inclusiveTotalPrice = parseFloat(productForm.value.taxInclusiveTotalPrice); + const taxRate = parseFloat(productForm.value.taxRate); + + if (!inclusiveTotalPrice || !taxRate) { + return; + } + + isCalculating.value = true; + + // 璁$畻涓嶅惈绋庢�讳环 + productForm.value.taxExclusiveTotalPrice = + proxy.calculateTaxExclusiveTotalPrice( + inclusiveTotalPrice, + taxRate + ); + + isCalculating.value = false; +}; /** * 涓嬭浇鏂囦欢 * -- Gitblit v1.9.3