From 437a70bd86d8adda3da41853b8b1c2706a22fdd7 Mon Sep 17 00:00:00 2001
From: 张诺 <zhang_12370@163.com>
Date: 星期四, 12 六月 2025 18:03:59 +0800
Subject: [PATCH] 优化文档管理及基础信息页面

---
 src/views/procureMent/components/ProductionDialog.vue |  214 ++++++++++++++++++++++++++++++++++-------------------
 1 files changed, 136 insertions(+), 78 deletions(-)

diff --git a/src/views/procureMent/components/ProductionDialog.vue b/src/views/procureMent/components/ProductionDialog.vue
index 5a0f8a9..5069233 100644
--- a/src/views/procureMent/components/ProductionDialog.vue
+++ b/src/views/procureMent/components/ProductionDialog.vue
@@ -17,81 +17,86 @@
         style="max-width: 400px; margin: 0 auto"
       >
         <el-form-item label="渚涘簲鍟嗗悕绉�" prop="supplierName">
-          <el-input v-model="form.supplierName" placeholder="璇疯緭鍏�" />
+          <el-select v-model="form.supplierName" 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-select v-model="form.coal" 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="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" 
+          <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" 
+              <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>
+              <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" 
+          <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 
+        </el-form-item>
+        <el-form-item label="鍗曚环(鍚◣)" prop="priceIncludingTax">
+          <el-input
             v-model.number="form.priceIncludingTax"
-            placeholder="鑷姩璁$畻" 
+            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 
+          <el-input
             v-model.number="form.totalPriceExcludingTax"
-            placeholder="鑷姩璁$畻" 
+            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 
+          <el-input
             v-model.number="form.totalPriceIncludingTax"
-            placeholder="鑷姩璁$畻" 
+            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">
@@ -111,14 +116,10 @@
       <template #footer>
         <div class="dialog-footer">
           <!-- 閲嶇疆鍜屽彇娑� -->
-          <el-button
-            @click="handleClose"
-            v-if="title.includes('鏂板')"
+          <el-button @click="handleClose" v-if="title.includes('鏂板')"
             >鍙栨秷</el-button
           >
-          <el-button
-            @click="handleReset"
-            v-if="title.includes('缂栬緫')"
+          <el-button @click="handleReset" v-if="title.includes('缂栬緫')"
             >閲嶇疆</el-button
           >
           <el-button type="primary" @click="handleSubmit">纭</el-button>
@@ -129,10 +130,12 @@
 </template>
 
 <script setup name="ProductionDialog">
-import { ref, defineProps, watch, onMounted, nextTick, computed  } 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";
+import useUserStore from "@/store/modules/user";
+import { addOrEditPR } from "@/api/procureMent";
+import { getSupply } from "@/api/basicInformation/supplier";
+import { getCoalInfo } from "@/api/basicInformation/coal";
 const props = defineProps({
   title: {
     type: String,
@@ -152,12 +155,42 @@
   required: true,
   type: Object,
 });
+const supplyList = ref([]);
+const coalList = ref([]);
+// 鑾峰彇渚涘簲鍟嗕笅鎷夊拰鐓ょ涓嬫媺
+const getDropdownData = async () => {
+  try {
+    const [supplyRes, coalRes] = await Promise.all([
+      getSupply(),
+      getCoalInfo(),
+    ]);
+    let supplyData = supplyRes.data.records;
+    let coalData = coalRes.data.records;
+    supplyList.value = supplyData.map((item) => ({
+      value: item.id,
+      label: item.supplierName,
+    }));
+    coalList.value = coalData.map((item) => ({
+      value: item.id,
+      label: item.coal,
+    }));
+    console.log(supplyList.value, coalList.value);
+  } catch (error) {
+    console.error("鑾峰彇涓嬫媺鏁版嵁澶辫触:", 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 +208,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 +222,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,34 +244,52 @@
   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;
-})
+});
 const rules = {
   supplierName: [
     { required: true, message: "璇疯緭鍏ヤ緵搴斿晢鍚嶇О", trigger: "blur" },
@@ -249,10 +300,18 @@
     { 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" }],
+  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: [
@@ -280,25 +339,25 @@
   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 +366,4 @@
 };
 </script>
 
-<style lang="sass" scoped>
-</style>
\ No newline at end of file
+<style lang="sass" scoped></style>

--
Gitblit v1.9.3