From aaf943ada13005f2b22d01e3d7080b8740d9aa96 Mon Sep 17 00:00:00 2001
From: zhang_12370 <z2864490065@outlook.com>
Date: 星期二, 15 七月 2025 15:09:49 +0800
Subject: [PATCH] 添加待入库功能及优化配煤计算器

---
 src/views/production/components/ProductionDialog.vue |  115 ++++++++++++++++++++++++++++++++++++---------------------
 1 files changed, 72 insertions(+), 43 deletions(-)

diff --git a/src/views/production/components/ProductionDialog.vue b/src/views/production/components/ProductionDialog.vue
index 3b96834..4a21fa4 100644
--- a/src/views/production/components/ProductionDialog.vue
+++ b/src/views/production/components/ProductionDialog.vue
@@ -1,12 +1,12 @@
 <template>
   <el-dialog
       v-model="dialogVisible"
-      :title="dialogType === 'add' ? '鏂板鐢熶骇鍔犲伐' : '缂栬緫鐢熶骇鍔犲伐'"
+      :title="dialogType === 'add' ? '鏂板鐢熶骇鍔犲伐' : dialogType === 'viewRow' ? '鏌ョ湅鐢熶骇鍔犲伐' : '缂栬緫鐢熶骇鍔犲伐'"
       width="1200px"
       :close-on-click-modal="false"
       @close="handleClose"
   >
-    <el-row :gutter="10" style="margin-bottom: 10px">
+    <el-row :gutter="10" style="margin-bottom: 10px" v-if="dialogType !== 'viewRow'">
       <el-col :span="3">
         <el-button type="primary" @click="handlData"
         >
@@ -40,20 +40,21 @@
     </el-row>
     <ETableModify
         :columns="columns"
-        :showOperations="false"
+        :showOperations="dialogType !== 'viewRow'"
         height="200"
         @cell-edit="handleCellEdit"
         :tableData="tableData"
         :showOverflowTooltip="false"
         @row-click="handleRowClick"
-        :editableColumns="['usedQuantity']"
+        :editableColumns="dialogType === 'viewRow' ? [] : ['usedQuantity']"
+        :editableCells="dialogType !== 'viewRow'"
         @delete="handleRemoveItem"
     />
     <div class="empty-table">
       <h1>鐢熶骇鏄庣粏</h1>
       <el-row :gutter="10">
         <el-col :span="2">
-          <el-button type="primary" @click="addNewRow">
+          <el-button type="primary" @click="addNewRow" v-if="dialogType !== 'viewRow'">
             <el-icon>
               <Plus/>
             </el-icon>
@@ -72,10 +73,11 @@
       <ProductionDetailsTable
           v-model="detailsTableData"
           :border="false"
-          :show-operations="true"
+          :show-operations="dialogType !== 'viewRow'"
           :auto-calculate="true"
           @input-change="handleDetailsChange"
           @delete-row="handleDeleteRow"
+          :dialogType="dialogType"
       />
     </div>
 
@@ -83,14 +85,17 @@
       <div class="dialog-footer">
         <el-button
             @click="handleClose"
-            v-if="dialogType === 'add' || dialogType === 'edit'"
-        >鍙� 娑�
+        >{{ dialogType === 'viewRow' ? '鍏� 闂�' : '鍙� 娑�' }}
         </el-button
         >
         <!-- <el-button @click="handleReset" v-if="dialogType === 'edit'"
           >閲� 缃�</el-button
         > -->
-        <el-button type="primary" :loading="loading" @click="handleSubmit"
+        <el-button 
+            v-if="dialogType !== 'viewRow'"
+            type="primary" 
+            :loading="loading" 
+            @click="handleSubmit"
         >纭� 瀹�
         </el-button
         >
@@ -160,6 +165,7 @@
   getCoalInfoList,
   deleteProductionInventory,
 } from "@/api/production/index.js";
+import { getSupplyList } from "@/api/procureMent/index.js"
 import {validateFormData, validateNumber, deepClone, createDefaultProductionRow} from "@/utils/production";
 import {useCoalData} from "./useCoalData";
 import useUserStore from "@/store/modules/user";
@@ -194,10 +200,10 @@
 const currentRow = ref(null);
 const copyForm = ref(null);
 const coalList = ref([])
-const supplierList = ref({});
+const supplierList = ref([]);
 // 琛ㄦ牸鍒楅厤缃�
 const columns = [
-  {prop: "coalId", label: "鐓ょ", minwidth: 60,slot:false,
+  {prop: "coalId", label: "鐓ょ", minwidth: 60,
     formatter: (row) => {
       return coalList.value.find(coal => coal.id === row.coalId)?.coal || "--";
     }
@@ -213,15 +219,8 @@
 ];
 
 const formalDatabaseColumns = ref([
-  {prop: "supplierName", label: "渚涘簲鍟嗗悕绉�", minwidth: 150
-  // ,formatter: (row) => {
-  //     console.log(row);
-  //     return supplierList.value[row.supplierId] || "--";
-  //   }
-  },
   {prop: "coalId", label: "鐓ょ", minwidth: 60,
     formatter: (row) => {
-      // return coalList.value[row.coalId].coal || "--";
       return coalList.value.find(coal => coal.id === row.coalId)?.coal || "--";
     }
   },
@@ -243,28 +242,51 @@
   currentRow.value = row;
 };
 
+// 鑾峰彇鍩虹鏁版嵁锛堢叅绉嶅拰渚涘簲鍟嗭級
+const loadBasicData = async () => {
+  try {
+    const [coalResponse, supplierResponse] = await Promise.all([
+      getCoalInfoList(),
+      getSupplyList()
+    ]);
+    
+    coalList.value = coalResponse.data || [];
+    supplierList.value = supplierResponse.data || [];
+  } catch (error) {
+    ElMessage.error("鑾峰彇鍩虹鏁版嵁澶辫触");
+  }
+};
+
 // 鑾峰彇閰嶇疆鏁版嵁
 const handlData = async () => {
   innerVisible.value = true;
-  let getSupplier = await getOfficialAll();
-  let getCoalName = await getCoalInfoList();
-  coalList.value = getCoalName.data || [];
-  supplierList.value = getSupplier.data || [];
-  if (getSupplier.code === 200) {
-    formalDatabaseData.value = getSupplier.data;
-    const existingOfficialIds = tableData.value
-        .map((item) => item.officialId)
-        .filter((id) => id);
-    selectedIds.value = existingOfficialIds;
-    debugIdMatching();
-    nextTick(() => {
-      setTimeout(() => {
-        if (etableRef.value && existingOfficialIds.length > 0) {
-          etableRef.value.setDefaultSelection();
-        }
-      }, 100);
-    });
-  } else {
+  
+  // 纭繚鍩虹鏁版嵁宸插姞杞�
+  if (coalList.value.length === 0 || supplierList.value.length === 0) {
+    await loadBasicData();
+  }
+  
+  try {
+    const OfficialAll = await getOfficialAll();
+    
+    if (OfficialAll.code === 200) {
+      formalDatabaseData.value = OfficialAll.data;
+      const existingOfficialIds = tableData.value
+          .map((item) => item.officialId)
+          .filter((id) => id);
+      selectedIds.value = existingOfficialIds;
+      debugIdMatching();
+      nextTick(() => {
+        setTimeout(() => {
+          if (etableRef.value && existingOfficialIds.length > 0) {
+            etableRef.value.setDefaultSelection();
+          }
+        }, 100);
+      });
+    } else {
+      ElMessage.error("鑾峰彇閰嶇疆鏁版嵁澶辫触");
+    }
+  } catch (error) {
     ElMessage.error("鑾峰彇閰嶇疆鏁版嵁澶辫触");
   }
 };
@@ -291,22 +313,28 @@
 };
 
 // 鍒濆鍖栧拰缂栬緫鍒濆鍖�
-const Initialization = () => {
+const Initialization = async () => {
   tableData.value = [];
   detailsTableData.value = [];
   copyForm.value = null;
   dialogType.value = "add";
+  
+  // 鍔犺浇鍩虹鏁版嵁
+  await loadBasicData();
 };
 
-const editInitialization = (data) => {
+const editInitialization = async (type, data) => {
   copyForm.value = deepClone(data);
   tableData.value = data.productionInventoryList || [];
   detailsTableData.value = data.productionList || [];
-  dialogType.value = "edit";
+  dialogType.value = type;
   const existingOfficialIds = tableData.value
       .map((item) => item.officialId)
       .filter((id) => id);
   selectedIds.value = existingOfficialIds;
+  
+  // 鍔犺浇鍩虹鏁版嵁
+  await loadBasicData();
 };
 // 鐩戝惉瀵硅瘽妗嗙姸鎬侊紝鍦ㄦ墦寮�鏃惰缃�変腑鐘舵��
 watch(innerVisible, (newVal) => {
@@ -396,7 +424,7 @@
   for (let i = 0; i < tableData.value.length; i++) {
     const element = tableData.value[i];
     if (element.usedQuantity == 0 || element.usedQuantity === null) {
-      ElMessage.warning(`璇峰~鍐欎娇鐢ㄦ暟閲�: ${element.coal}`);
+      ElMessage.warning(`璇峰~鍐欑敓浜у姞宸ョ叅绉嶇殑浣跨敤鏁伴噺`);
       return;
     }
   }
@@ -452,12 +480,13 @@
   }
 };
 
-// 鑾峰彇鐢ㄦ埛淇℃伅
+// 鑾峰彇鐢ㄦ埛淇℃伅骞跺姞杞藉熀纭�鏁版嵁
 onMounted(async () => {
   try {
     userInfo = await userStore.getInfo();
+    await loadBasicData();
   } catch (error) {
-    ElMessage.error("鑾峰彇鐢ㄦ埛淇℃伅澶辫触锛岃閲嶈瘯");
+    ElMessage.error("鍒濆鍖栧け璐ワ紝璇烽噸璇�");
   }
 });
 

--
Gitblit v1.9.3