From 9d9c62348e3296a597405e6f6416da8efc0fe18b Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期四, 12 六月 2025 10:29:14 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev' into dev
---
src/views/procureMent/components/ProductionDialog.vue | 160 ++++++++++++++++++++++++++++++++++++++++++++++-------
1 files changed, 138 insertions(+), 22 deletions(-)
diff --git a/src/views/procureMent/components/ProductionDialog.vue b/src/views/procureMent/components/ProductionDialog.vue
index 3e6d937..5a0f8a9 100644
--- a/src/views/procureMent/components/ProductionDialog.vue
+++ b/src/views/procureMent/components/ProductionDialog.vue
@@ -20,44 +20,79 @@
<el-input v-model="form.supplierName" placeholder="璇疯緭鍏�" />
</el-form-item>
<el-form-item label="鐓ょ" prop="coal">
- <el-input v-model="form.coal" placeholder="璇疯緭鍏�" />
- </el-form-item>
+ <el-select v-model="form.coal" placeholder="璇烽�夋嫨鐓ょ" clearable style="width: 100%">
+ <el-option label="鐦︾叅" value="鐦︾叅" />
+ <el-option label="姘旂叅" value="姘旂叅" />
+ <el-option label="鏃犵儫鐓�" value="鏃犵儫鐓�" />
+ <el-option label="闀跨劙鐓�" value="闀跨劙鐓�" />
+ <el-option label="璐叅" value="璐叅" />
+ </el-select>
+ </el-form-item>
<el-form-item label="鍗曚綅" prop="unit">
- <el-input v-model="form.unit" placeholder="璇疯緭鍏�" />
- </el-form-item>
- <el-form-item label="閲囪喘鏁伴噺" prop="purchaseQuantity">
- <el-input v-model="form.purchaseQuantity" placeholder="璇疯緭鍏�" />
+ <el-select v-model="form.unit" placeholder="璇烽�夋嫨鍗曚綅" clearable style="width: 100%">
+ <el-option label="鍚�" value="鍚�" />
+ <el-option label="鍗冨厠" value="鍗冨厠" />
+ </el-select>
+ </el-form-item> <el-form-item label="閲囪喘鏁伴噺" prop="purchaseQuantity">
+ <el-input
+ v-model.number="form.purchaseQuantity"
+ placeholder="璇疯緭鍏�"
+ @blur="handleQuantityBlur"
+ >
+ <template v-slot:suffix>
+ <i style="font-style:normal;">{{form.unit?form.unit:''}}</i>
+ </template>
+ </el-input>
+ </el-form-item><el-form-item label="绋庣巼" prop="taxRate">
+ <el-input
+ v-model.number="form.taxRate"
+ placeholder="璇疯緭鍏ョ◣鐜�"
+ @blur="handleTaxRateBlur"
+ >
+ <template v-slot:suffix>
+ <i style="font-style:normal;">%</i>
+ </template>
+ </el-input>
</el-form-item>
<el-form-item label="鍗曚环(涓嶅惈绋�)" prop="priceExcludingTax">
- <el-input v-model="form.priceExcludingTax" placeholder="璇疯緭鍏�" >
+ <el-input
+ v-model.number="form.priceExcludingTax"
+ placeholder="璇疯緭鍏�"
+ @blur="handlePriceBlur"
+ >
+ <template v-slot:suffix>
+ <i style="font-style:normal;">鍏�</i>
+ </template>
+ </el-input>
+ </el-form-item> <el-form-item label="鍗曚环(鍚◣)" prop="priceIncludingTax">
+ <el-input
+ v-model.number="form.priceIncludingTax"
+ placeholder="鑷姩璁$畻"
+ >
<template v-slot:suffix>
<i style="font-style:normal;">鍏�</i>
</template>
</el-input>
</el-form-item>
<el-form-item label="鎬讳环(涓嶅惈绋�)" prop="totalPriceExcludingTax">
- <el-input v-model="form.totalPriceExcludingTax" placeholder="璇疯緭鍏�" >
- <template v-slot:suffix>
- <i style="font-style:normal;">鍏�</i>
- </template>
- </el-input>
- </el-form-item>
- <el-form-item label="鍗曚环(鍚◣)" prop="priceIncludingTax">
- <el-input v-model="form.priceIncludingTax" placeholder="璇疯緭鍏�" >
+ <el-input
+ v-model.number="form.totalPriceExcludingTax"
+ placeholder="鑷姩璁$畻"
+ >
<template v-slot:suffix>
<i style="font-style:normal;">鍏�</i>
</template>
</el-input>
</el-form-item>
<el-form-item label="鎬讳环(鍚◣)" prop="totalPriceIncludingTax">
- <el-input v-model="form.totalPriceIncludingTax" placeholder="璇疯緭鍏�" >
+ <el-input
+ v-model.number="form.totalPriceIncludingTax"
+ placeholder="鑷姩璁$畻"
+ >
<template v-slot:suffix>
<i style="font-style:normal;">鍏�</i>
</template>
</el-input>
- </el-form-item>
- <el-form-item label="绋庣巼" prop="taxRate">
- <el-input v-model="form.taxRate" placeholder="璇疯緭鍏�" />
</el-form-item>
<el-form-item label="鐧昏浜�" prop="registrantId">
<el-input v-model="form.registrantId" disabled placeholder="璇疯緭鍏�" />
@@ -94,7 +129,7 @@
</template>
<script setup name="ProductionDialog">
-import { ref, defineProps, watch, onMounted, nextTick } from "vue";
+import { ref, defineProps, watch, onMounted, nextTick, computed } from "vue";
import { ElMessage } from "element-plus";
import useUserStore from '@/store/modules/user'
import {addOrEditPR} from "@/api/procureMent";
@@ -117,8 +152,89 @@
required: true,
type: Object,
});
+
+const toFixed = (num, precision = 2) => {
+ if (isNaN(num) || num === null || num === undefined || num === '') {
+ return 0;
+ }
+ return Math.floor(parseFloat(num) * Math.pow(10, precision)) / Math.pow(10, precision);
+};
+// 鍚◣鍗曚环璁$畻
+const unitPriceWithTax = computed(() => {
+ const priceExcludingTax = parseFloat(form.value.priceExcludingTax) || 0;
+ const taxRate = parseFloat(form.value.taxRate) || 0;
+ if (!priceExcludingTax || !taxRate) {
+ return 0;
+ }
+ const result = priceExcludingTax * (1 + taxRate / 100);
+ return toFixed(result, 2);
+});
+
+// 鍚◣鎬讳环璁$畻
+const totalUnitPriceWithTax = computed(() => {
+ const priceExcludingTax = parseFloat(form.value.priceExcludingTax) || 0;
+ const taxRate = parseFloat(form.value.taxRate) || 0;
+ const purchaseQuantity = parseFloat(form.value.purchaseQuantity) || 0;
+
+ if (!priceExcludingTax || !taxRate || !purchaseQuantity) {
+ return 0;
+ }
+
+ const unitPriceWithTaxValue = priceExcludingTax * (1 + taxRate / 100);
+ const result = unitPriceWithTaxValue * purchaseQuantity;
+ return toFixed(result, 2);
+});
+
+// 涓嶅惈绋庢�讳环璁$畻
+const taxExclusiveTotalPrice = computed(() => {
+ const purchaseQuantity = parseFloat(form.value.purchaseQuantity) || 0;
+ const priceExcludingTax = parseFloat(form.value.priceExcludingTax) || 0;
+
+ if (!purchaseQuantity || !priceExcludingTax) {
+ return 0;
+ }
+
+ const result = purchaseQuantity * priceExcludingTax;
+ return toFixed(result, 2);
+});
+
+// 鐩戝惉璁$畻鍊煎彉鍖栵紝鍚屾鍒� form 瀵硅薄涓�
+watch(unitPriceWithTax, (newValue) => {
+ form.value.priceIncludingTax = newValue;
+});
+
+watch(totalUnitPriceWithTax, (newValue) => {
+ form.value.totalPriceIncludingTax = newValue;
+});
+
+watch(taxExclusiveTotalPrice, (newValue) => {
+ form.value.totalPriceExcludingTax = newValue;
+});
+
const userStore = useUserStore()
const userInfo = ref({});
+
+// 澶勭悊绋庣巼杈撳叆妗嗗け鐒︼紝纭繚绮惧害
+const handleTaxRateBlur = () => {
+ if (form.value.taxRate !== null && form.value.taxRate !== undefined && form.value.taxRate !== '') {
+ form.value.taxRate = toFixed(parseFloat(form.value.taxRate), 2);
+ }
+};
+
+// 澶勭悊涓嶅惈绋庡崟浠疯緭鍏ユ澶辩劍锛岀‘淇濈簿搴�
+const handlePriceBlur = () => {
+ if (form.value.priceExcludingTax !== null && form.value.priceExcludingTax !== undefined && form.value.priceExcludingTax !== '') {
+ form.value.priceExcludingTax = toFixed(parseFloat(form.value.priceExcludingTax), 2);
+ }
+};
+
+// 澶勭悊閲囪喘鏁伴噺杈撳叆妗嗗け鐒︼紝纭繚绮惧害
+const handleQuantityBlur = () => {
+ if (form.value.purchaseQuantity !== null && form.value.purchaseQuantity !== undefined && form.value.purchaseQuantity !== '') {
+ form.value.purchaseQuantity = toFixed(parseFloat(form.value.purchaseQuantity), 3); // 鏁伴噺淇濈暀3浣嶅皬鏁�
+ }
+};
+
onMounted(async () => {
let res = await userStore.getInfo()
userInfo.value = res;
@@ -131,6 +247,7 @@
unit: [{ required: true, message: "璇疯緭鍏ュ崟浣�", trigger: "blur" }],
purchaseQuantity: [
{ required: true, message: "璇疯緭鍏ラ噰璐暟閲�", trigger: "blur" },
+ { type: "number", message: "閲囪喘鏁伴噺蹇呴』涓烘暟瀛�", trigger: "blur" },
],
priceExcludingTax: [{ required: true, message: "璇疯緭鍏ュ崟浠�", trigger: "blur" }],
totalPriceExcludingTax: [{ required: true, message: "璇疯緭鍏ユ�讳环", trigger: "blur" }],
@@ -154,15 +271,14 @@
if (formRef.value) {
formRef.value.clearValidate();
}
- console.log(form.value);
};
const formRef = ref(null);
// 鎻愪氦琛ㄥ崟
const handleSubmit = async () => {
+ console.log("鎻愪氦琛ㄥ崟", form.value);
if (!formRef.value) return;
await formRef.value.validate(async (valid) => {
if (valid) {
- console.log("琛ㄥ崟楠岃瘉閫氳繃", form.value);
const obj = ref({});
if (props.title.includes('鏂板')) {
let result = await addOrEditPR({
--
Gitblit v1.9.3