From df1406d0f571972d033dffd6a93fb4b94febeb56 Mon Sep 17 00:00:00 2001 From: gaoluyang <2820782392@qq.com> Date: 星期二, 24 六月 2025 16:46:44 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/dev' into dev --- src/views/procureMent/components/ProductionDialog.vue | 288 +++++++++++++++++++++++++++++++++------------------------ 1 files changed, 168 insertions(+), 120 deletions(-) diff --git a/src/views/procureMent/components/ProductionDialog.vue b/src/views/procureMent/components/ProductionDialog.vue index 5a0f8a9..3c03cbb 100644 --- a/src/views/procureMent/components/ProductionDialog.vue +++ b/src/views/procureMent/components/ProductionDialog.vue @@ -1,125 +1,119 @@ <template> <div> <el-dialog - v-model="dialogFormVisible" - :title="title" - width="600" - :close-on-click-modal="false" - @close="handleClose" + v-model="dialogFormVisible" + :title="title" + width="600" + :close-on-click-modal="false" + @close="handleClose" > <el-form - ref="formRef" - :model="form" - :rules="rules" - label-width="auto" - class="production-form" - label-position="right" - style="max-width: 400px; margin: 0 auto" + ref="formRef" + :model="form" + :rules="rules" + label-width="auto" + class="production-form" + label-position="right" + style="max-width: 400px; margin: 0 auto" > - <el-form-item label="渚涘簲鍟嗗悕绉�" prop="supplierName"> - <el-input v-model="form.supplierName" placeholder="璇疯緭鍏�" /> + <el-form-item label="渚涘簲鍟嗗悕绉�" prop="supplierId"> + <el-select v-model="form.supplierId" placeholder="璇烽�夋嫨渚涘簲鍟�"> + <el-option :label="item.label" v-for="item in supplyList" :key="item.value" :value="item.value"/> + </el-select> </el-form-item> - <el-form-item label="鐓ょ" prop="coal"> - <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-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" + <el-form-item label="鐓ょ" prop="coalId"> + <el-select v-model="form.coalId" placeholder="璇烽�夋嫨鐓ょ"> + <el-option :label="item.label" v-for="item in coalList" :key="item.value" :value="item.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> + <i style="font-style: normal">鍚�</i> + </template> </el-input> - </el-form-item><el-form-item label="绋庣巼" prop="taxRate"> - <el-input - v-model.number="form.taxRate" - placeholder="璇疯緭鍏ョ◣鐜�" - @blur="handleTaxRateBlur" + </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> + <i style="font-style: normal">%</i> + </template> + </el-input> </el-form-item> <el-form-item label="鍗曚环(涓嶅惈绋�)" prop="priceExcludingTax"> - <el-input - v-model.number="form.priceExcludingTax" - placeholder="璇疯緭鍏�" - @blur="handlePriceBlur" + <el-input + v-model.number="form.priceExcludingTax" + placeholder="璇疯緭鍏�" + @blur="handlePriceBlur" > <template v-slot:suffix> - <i style="font-style:normal;">鍏�</i> - </template> + <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="鑷姩璁$畻" + </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> + <i style="font-style: normal">鍏�</i> + </template> </el-input> </el-form-item> <el-form-item label="鎬讳环(涓嶅惈绋�)" prop="totalPriceExcludingTax"> - <el-input - v-model.number="form.totalPriceExcludingTax" - placeholder="鑷姩璁$畻" + <el-input + v-model.number="form.totalPriceExcludingTax" + placeholder="鑷姩璁$畻" > <template v-slot:suffix> - <i style="font-style:normal;">鍏�</i> - </template> + <i style="font-style: normal">鍏�</i> + </template> </el-input> </el-form-item> <el-form-item label="鎬讳环(鍚◣)" prop="totalPriceIncludingTax"> - <el-input - v-model.number="form.totalPriceIncludingTax" - placeholder="鑷姩璁$畻" + <el-input + v-model.number="form.totalPriceIncludingTax" + placeholder="鑷姩璁$畻" > <template v-slot:suffix> - <i style="font-style:normal;">鍏�</i> - </template> + <i style="font-style: normal">鍏�</i> + </template> </el-input> </el-form-item> <el-form-item label="鐧昏浜�" prop="registrantId"> - <el-input v-model="form.registrantId" disabled placeholder="璇疯緭鍏�" /> + <el-input v-model="form.registrantId" disabled placeholder="璇疯緭鍏�"/> </el-form-item> <el-form-item label="鐧昏鏃ユ湡" prop="registrationDate"> <el-date-picker - disabled - v-model="form.registrationDate" - type="date" - placeholder="YYYY-MM-DD" - style="width: 100%" - value-format="YYYY-MM-DD" + disabled + v-model="form.registrationDate" + type="date" + placeholder="YYYY-MM-DD" + style="width: 100%" + value-format="YYYY-MM-DD" /> </el-form-item> </el-form> <template #footer> <div class="dialog-footer"> <!-- 閲嶇疆鍜屽彇娑� --> - <el-button - @click="handleClose" - v-if="title.includes('鏂板')" - >鍙栨秷</el-button + <el-button @click="handleClose" v-if="title.includes('鏂板')" + >鍙栨秷 + </el-button > - <el-button - @click="handleReset" - v-if="title.includes('缂栬緫')" - >閲嶇疆</el-button + <el-button @click="handleReset" v-if="title.includes('缂栬緫')" + >閲嶇疆 + </el-button > <el-button type="primary" @click="handleSubmit">纭</el-button> </div> @@ -129,10 +123,11 @@ </template> <script setup name="ProductionDialog"> -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"; +import {ref, defineProps, watch, onMounted, nextTick, computed} from "vue"; +import {ElMessage} from "element-plus"; +import useUserStore from "@/store/modules/user"; +import {addOrEditPR, getSupplyList, getCoalInfoList} from "@/api/procureMent"; + const props = defineProps({ title: { type: String, @@ -152,12 +147,41 @@ required: true, type: Object, }); +const supplyList = ref([]); +const coalList = ref([]); +// 鑾峰彇渚涘簲鍟嗕笅鎷夊拰鐓ょ涓嬫媺 +const getDropdownData = async () => { + try { + const [supplyRes, coalRes] = await Promise.all([ + getSupplyList(), + getCoalInfoList(), + ]); + let supplyData = supplyRes.data; + let coalData = coalRes.data; + supplyList.value = supplyData.map((item) => ({ + value: item.id, + label: item.supplierName, + })); + coalList.value = coalData.map((item) => ({ + value: item.id, + label: item.coal, + })); + } catch (error) { + ElMessage.error("鑾峰彇涓嬫媺鏁版嵁澶辫触锛岃绋嶅悗閲嶈瘯"); + } +}; +defineExpose({ + getDropdownData, +}); const toFixed = (num, precision = 2) => { - if (isNaN(num) || num === null || num === undefined || num === '') { + if (isNaN(num) || num === null || num === undefined || num === "") { return 0; } - return Math.floor(parseFloat(num) * Math.pow(10, precision)) / Math.pow(10, precision); + return ( + Math.floor(parseFloat(num) * Math.pow(10, precision)) / + Math.pow(10, precision) + ); }; // 鍚◣鍗曚环璁$畻 const unitPriceWithTax = computed(() => { @@ -175,11 +199,11 @@ 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); @@ -189,11 +213,11 @@ 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); }); @@ -211,52 +235,78 @@ form.value.totalPriceExcludingTax = newValue; }); -const userStore = useUserStore() +const userStore = useUserStore(); const userInfo = ref({}); // 澶勭悊绋庣巼杈撳叆妗嗗け鐒︼紝纭繚绮惧害 const handleTaxRateBlur = () => { - if (form.value.taxRate !== null && form.value.taxRate !== undefined && form.value.taxRate !== '') { + 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); + 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浣嶅皬鏁� + 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() + let res = await userStore.getInfo(); userInfo.value = res; -}) + getDropdownData() +}); const rules = { supplierName: [ - { required: true, message: "璇疯緭鍏ヤ緵搴斿晢鍚嶇О", trigger: "blur" }, + {required: true, message: "璇疯緭鍏ヤ緵搴斿晢鍚嶇О", trigger: "blur"}, ], - coal: [{ required: true, message: "璇疯緭鍏ョ叅绉�", trigger: "blur" }], - unit: [{ required: true, message: "璇疯緭鍏ュ崟浣�", trigger: "blur" }], + coal: [{required: true, message: "璇疯緭鍏ョ叅绉�", trigger: "blur"}], purchaseQuantity: [ - { required: true, message: "璇疯緭鍏ラ噰璐暟閲�", trigger: "blur" }, - { type: "number", message: "閲囪喘鏁伴噺蹇呴』涓烘暟瀛�", trigger: "blur" }, + {required: true, message: "璇疯緭鍏ラ噰璐暟閲�", trigger: "blur"}, + {type: "number", message: "閲囪喘鏁伴噺蹇呴』涓烘暟瀛�", trigger: "blur"}, ], - priceExcludingTax: [{ required: true, message: "璇疯緭鍏ュ崟浠�", trigger: "blur" }], - totalPriceExcludingTax: [{ required: true, message: "璇疯緭鍏ユ�讳环", trigger: "blur" }], - priceIncludingTax: [{ required: true, message: "璇疯緭鍏ュ惈绋庡崟浠�", trigger: "blur" }], - totalPriceIncludingTax: [{ required: true, message: "璇疯緭鍏ュ惈绋庢�讳环", trigger: "blur" }], - taxRate: [{ required: true, message: "璇疯緭鍏ョ◣鐜�", trigger: "blur" }], - registrantId: [{ required: true, message: "璇疯緭鍏ョ櫥璁颁汉", trigger: "blur" }], + priceExcludingTax: [ + {required: true, message: "璇疯緭鍏ュ崟浠�", trigger: "blur"}, + ], + totalPriceExcludingTax: [ + {required: true, message: "璇疯緭鍏ユ�讳环", trigger: "blur"}, + ], + priceIncludingTax: [ + {required: true, message: "璇疯緭鍏ュ惈绋庡崟浠�", trigger: "blur"}, + ], + totalPriceIncludingTax: [ + {required: true, message: "璇疯緭鍏ュ惈绋庢�讳环", trigger: "blur"}, + ], + taxRate: [{required: true, message: "璇疯緭鍏ョ◣鐜�", trigger: "blur"}], + registrantId: [{required: true, message: "璇疯緭鍏ョ櫥璁颁汉", trigger: "blur"}], registrationDate: [ - { required: true, message: "璇烽�夋嫨鐧昏鏃ユ湡", trigger: "change" }, + {required: true, message: "璇烽�夋嫨鐧昏鏃ユ湡", trigger: "change"}, ], }; // 鍏抽棴寮圭獥 @@ -275,30 +325,29 @@ const formRef = ref(null); // 鎻愪氦琛ㄥ崟 const handleSubmit = async () => { - console.log("鎻愪氦琛ㄥ崟", form.value); if (!formRef.value) return; await formRef.value.validate(async (valid) => { if (valid) { const obj = ref({}); - if (props.title.includes('鏂板')) { + if (props.title.includes("鏂板")) { let result = await addOrEditPR({ ...form.value, - }) + }); obj.value = { title: "鏂板", ...form.value, - result + result, }; } else { - delete form.value.updateTime - delete form.value.createTime + delete form.value.updateTime; + delete form.value.createTime; let result = await addOrEditPR({ ...form.value, - }) + }); obj.value = { title: "缂栬緫", ...form.value, - result + result, }; } emit("submit", obj.value); @@ -307,5 +356,4 @@ }; </script> -<style lang="sass" scoped> -</style> \ No newline at end of file +<style lang="sass" scoped></style> -- Gitblit v1.9.3