From d90576a14722936d2bbac4595f561512a480c36a Mon Sep 17 00:00:00 2001 From: gaoluyang <2820782392@qq.com> Date: 星期五, 11 七月 2025 15:22:00 +0800 Subject: [PATCH] 1.来票登记-新增登记计算报错,关闭弹框后没有刷新列表问题 --- src/views/salesManagement/salesLedger/index.vue | 209 ++++++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 184 insertions(+), 25 deletions(-) diff --git a/src/views/salesManagement/salesLedger/index.vue b/src/views/salesManagement/salesLedger/index.vue index eb0855d..b49a6d8 100644 --- a/src/views/salesManagement/salesLedger/index.vue +++ b/src/views/salesManagement/salesLedger/index.vue @@ -3,7 +3,7 @@ <div class="search_form"> <el-form :model="searchForm" :inline="true"> <el-form-item label="瀹㈡埛鍚嶇О锛�"> - <el-input v-model="searchForm.customerContractNo" placeholder="璇疯緭鍏�" clearable prefix-icon="Search" + <el-input v-model="searchForm.customerName" placeholder="璇疯緭鍏�" clearable prefix-icon="Search" @change="handleQuery" /> </el-form-item> <el-form-item label="瀹㈡埛鍚堝悓鍙凤細"> @@ -64,7 +64,7 @@ <el-table-column label="涓氬姟鍛�" prop="salesman" width="100" show-overflow-tooltip /> <el-table-column label="椤圭洰鍚嶇О" prop="projectName" width="180" show-overflow-tooltip /> <el-table-column label="浠樻鏂瑰紡" prop="paymentMethod" show-overflow-tooltip /> - <el-table-column label="鍚堝悓閲戦(鍏�)" prop="contractAmount" width="180" show-overflow-tooltip + <el-table-column label="鍚堝悓閲戦(鍏�)" prop="contractAmount" width="220" show-overflow-tooltip :formatter="formattedNumber" /> <el-table-column label="褰曞叆浜�" prop="entryPersonName" width="100" show-overflow-tooltip /> <el-table-column label="褰曞叆鏃ユ湡" prop="entryDate" width="120" show-overflow-tooltip /> @@ -153,7 +153,7 @@ <el-row> <el-form-item label="浜у搧淇℃伅锛�" prop="entryDate"> <el-button type="primary" @click="openProductForm('add')">娣诲姞</el-button> - <el-button plain type="danger" @click="deleteProduct">鍒犻櫎</el-button> + <el-button plain type="danger" @click="deleteProduct" >鍒犻櫎</el-button> </el-form-item> </el-row> <el-table :data="productData" border @selection-change="productSelected" show-summary @@ -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 type="number" :step="0.1" :min="0" v-model="productForm.quantity" placeholder="璇疯緭鍏�" clearable - @change="mathNum" /> - </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 v-model="productForm.taxInclusiveUnitPrice" 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> @@ -288,6 +289,7 @@ </div> </template> </el-dialog> + <FileList ref="fileListRef" /> </div> </template> @@ -298,6 +300,7 @@ import { ElMessageBox } from "element-plus"; import useUserStore from "@/store/modules/user"; import { userListNoPage } from "@/api/system/user.js"; +import FileList from "./fileList.vue"; import { ledgerListPage, productList, @@ -411,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", @@ -491,7 +496,7 @@ if (nodes[i].children && nodes[i].children.length > 0) { const foundNode = findNodeById(nodes[i].children, productId); if (foundNode) { - return foundNode.label; // 鍦ㄥ瓙鑺傜偣涓壘鍒帮紝杩斿洖璇ヨ妭鐐� + return foundNode; // 鍦ㄥ瓙鑺傜偣涓壘鍒帮紝杩斿洖璇ヨ妭鐐� } } } @@ -629,14 +634,15 @@ const submitForm = () => { proxy.$refs["formRef"].validate((valid) => { if (valid) { - if (productData.value.length > 0) { + console.log('productData.value--', productData.value) + if (productData.value !== null && productData.value.length > 0) { form.value.productData = proxy.HaveJson(productData.value); } else { proxy.$modal.msgWarning("璇锋坊鍔犱骇鍝佷俊鎭�"); return; } let tempFileIds = []; - if (fileList.value.length > 0) { + if (fileList.value !== null && fileList.value.length > 0) { tempFileIds = fileList.value.map((item) => item.tempId); } form.value.tempFileIds = tempFileIds; @@ -680,6 +686,7 @@ }; const submitProductEdit = () => { productForm.value.salesLedgerId = currentId.value; + productForm.value.type = 1 addOrUpdateSalesLedgerProduct(productForm.value).then((res) => { proxy.$modal.msgSuccess("鎻愪氦鎴愬姛"); closeProductDia(); @@ -804,13 +811,165 @@ ); } }; + +// 鏍规嵁鍚◣鎬讳环璁$畻鍚◣鍗曚环鍜屾暟閲� +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; +}; /** * 涓嬭浇鏂囦欢 * * @param row 涓嬭浇鏂囦欢鐨勭浉鍏充俊鎭璞� */ +const fileListRef = ref(null) const downLoadFile = (row) => { - console.log('row', row) + getSalesLedgerWithProducts({ id: row.id, type: 1 }).then((res) => { + fileListRef.value.open(res.salesLedgerFiles) + }); + } getList(); </script> -- Gitblit v1.9.3