From 807df6dedd5078e0dd9f6515a8e1ea93e19a6f52 Mon Sep 17 00:00:00 2001
From: zhang_12370 <z2864490065@outlook.com>
Date: 星期三, 25 六月 2025 15:21:51 +0800
Subject: [PATCH] 文档管理 树形菜单 新增修改优化 生产加工模块的 数据tags 显示 生产人的匹配

---
 src/views/basicInformation/index.vue                       |  124 ------------------------
 src/views/production/components/ProductionDetailsTable.vue |    9 +
 src/views/inspectionUpload/index.vue                       |    2 
 src/views/archiveManagement/mould/archiveDialog.vue        |    1 
 src/components/dialog/Descriptions.vue                     |   34 ++++++
 src/views/production/index.vue                             |   76 +++++++++++---
 src/views/archiveManagement/index.vue                      |   24 +---
 src/utils/production.js                                    |    3 
 src/views/production/components/ProductionDialog.vue       |    2 
 9 files changed, 106 insertions(+), 169 deletions(-)

diff --git a/src/components/dialog/Descriptions.vue b/src/components/dialog/Descriptions.vue
index eef36d5..dd53b35 100644
--- a/src/components/dialog/Descriptions.vue
+++ b/src/components/dialog/Descriptions.vue
@@ -96,6 +96,11 @@
   fieldLabels: {
     type: Object,
     default: () => ({})
+  },
+  // 瀛楁鏄剧ず椤哄簭
+  fieldOrder: {
+    type: Array,
+    default: () => []
   }
 });
 
@@ -113,25 +118,46 @@
   }
 
   const data = { ...props.formData };
-  let result = {};
+  let filteredResult = {};
 
   // 濡傛灉鎸囧畾浜嗗寘鍚瓧娈碉紝鍒欏彧鏄剧ず杩欎簺瀛楁
   if (props.includeFields.length > 0) {
     props.includeFields.forEach(field => {
       if (data.hasOwnProperty(field)) {
-        result[field] = data[field];
+        filteredResult[field] = data[field];
       }
     });
   } else {
     // 鍚﹀垯鎺掗櫎鎸囧畾瀛楁
     Object.keys(data).forEach(key => {
       if (!props.excludeFields.includes(key)) {
-        result[key] = data[key];
+        filteredResult[key] = data[key];
       }
     });
   }
 
-  return result;
+  // 濡傛灉鎸囧畾浜嗗瓧娈甸『搴忥紝鍒欐寜椤哄簭閲嶆柊缁勭粐鏁版嵁
+  if (props.fieldOrder.length > 0) {
+    const orderedResult = {};
+    
+    // 鍏堟寜鎸囧畾椤哄簭娣诲姞瀛楁
+    props.fieldOrder.forEach(field => {
+      if (filteredResult.hasOwnProperty(field)) {
+        orderedResult[field] = filteredResult[field];
+      }
+    });
+    
+    // 鍐嶆坊鍔犳湭鍦ㄩ『搴忎腑鎸囧畾鐨勫叾浠栧瓧娈�
+    Object.keys(filteredResult).forEach(key => {
+      if (!props.fieldOrder.includes(key)) {
+        orderedResult[key] = filteredResult[key];
+      }
+    });
+    
+    return orderedResult;
+  }
+
+  return filteredResult;
 });
 
 // 鑾峰彇瀛楁鏄剧ず鏍囩
diff --git a/src/utils/production.js b/src/utils/production.js
index 35e00e5..c95241c 100644
--- a/src/utils/production.js
+++ b/src/utils/production.js
@@ -10,9 +10,7 @@
  */
 export function parseCoalArray(coalString) {
   if (!coalString) return [];
-  
   if (Array.isArray(coalString)) return coalString;
-  
   return String(coalString)
     .replace(/^\[|\]$/g, '')
     .split(',')
@@ -61,7 +59,6 @@
   }
 
   for (let i = 0; i < data.length; i++) {
-    console.log(data[i])
     const item = data[i];
     for (const field of requiredFields) {
       if (item[field] === '' || item[field] === null || item[field] === undefined) {
diff --git a/src/views/archiveManagement/index.vue b/src/views/archiveManagement/index.vue
index c3e56e4..f1fb1e2 100644
--- a/src/views/archiveManagement/index.vue
+++ b/src/views/archiveManagement/index.vue
@@ -201,15 +201,14 @@
     ElMessage.error("鎿嶄綔澶辫触锛岃绋嶅悗閲嶈瘯");
   }
 };
-// 褰撳墠缁勪欢鐨勬暟鎹�
-const initTreeData = ref([]); // 鏍戝舰鏁版嵁
+
 const centerDialogVisible = (val) => {
   dialogVisible.value = val;
 };
 const tableSwitch = ref(false);
 // 澶勭悊鑺傜偣鐐瑰嚮
 const handleNodeClick = (data) => {
-  initTreeData.value = data || [];
+  console.log("鐐瑰嚮鑺傜偣", data);
   tableSwitch.value = true;
   // 鍒囨崲鑺傜偣鏃堕噸缃埌绗竴椤�
   queryParams.current = 1;
@@ -227,7 +226,7 @@
     // 纭繚缁勪欢寮曠敤瀛樺湪鍚庡啀璋冪敤鏂规硶
     nextTick(() => {
       if (archiveDialogs.value && typeof archiveDialogs.value.initForm === 'function') {
-        archiveDialogs.value.initForm(initTreeData); // 閲嶇疆琛ㄥ崟
+        archiveDialogs.value.initForm(); // 閲嶇疆琛ㄥ崟
       }
     });
   } catch (error) {
@@ -489,15 +488,16 @@
     const hasChildren = data.children;
     const nodeKey = data.id || data;
     const node = treeRef.value?.getNode(nodeKey);
-    const isExpanded = node?.expanded;
-    
-    // 濡傛灉鏈夊瓙绾т笖鏈睍寮�锛屽厛灞曞紑鑺傜偣
+    const isExpanded = node?.expanded; // 濡傛灉鏈夊瓙绾т笖鏈睍寮�锛屽厛灞曞紑鑺傜偣
     if (hasChildren && !isExpanded) {
-      if (treeRef.value && treeRef.value.store && treeRef.value.store.nodesMap[nodeKey]) {
+      if (
+          treeRef.value &&
+          treeRef.value.store &&
+          treeRef.value.store.nodesMap[nodeKey]
+      ) {
         treeRef.value.store.nodesMap[nodeKey].expanded = true;
       }
     }
-    
     const newNode = {
       name: "鏂板瓙鑺傜偣",
       isEdit: true,
@@ -508,12 +508,6 @@
     }
     data.children.push(newNode);
     newName.value = "鏂板瓙鑺傜偣";
-
-    // 纭繚鐖惰妭鐐瑰睍寮�
-    if (node) {
-      node.expanded = true;
-      expandParentNodes(node);
-    }
 
     // 鏍规嵁鏄惁闇�瑕佸睍寮�鏉ュ喅瀹氬欢杩熸椂闂�
     const delay = hasChildren && !isExpanded ? 200 : 50;
diff --git a/src/views/archiveManagement/mould/archiveDialog.vue b/src/views/archiveManagement/mould/archiveDialog.vue
index 18014fe..07b1e00 100644
--- a/src/views/archiveManagement/mould/archiveDialog.vue
+++ b/src/views/archiveManagement/mould/archiveDialog.vue
@@ -149,7 +149,6 @@
     // 鍙戦�� emit 浜嬩欢
 
     // 鍏抽棴瀵硅瘽妗�
-    ElMessage.success("鎿嶄綔鎴愬姛");
     centerDialogVisible.value = false;
   } catch (error) {
     ElMessage({
diff --git a/src/views/basicInformation/index.vue b/src/views/basicInformation/index.vue
index caf93be..4f47266 100644
--- a/src/views/basicInformation/index.vue
+++ b/src/views/basicInformation/index.vue
@@ -146,21 +146,6 @@
         :title="title"
         @submit="handleSubmit"
       />
-      <Descriptions
-        v-model:descriptionsVisible="showDialog"
-        title="渚涘簲鍟嗚鎯�"
-        :formData="supplierData"
-        :fieldLabels="supplierFieldLabels"
-        :column="2"
-        :isViewOnly="false"
-        :border="true"
-        :showOperations="true"
-        descriptionsTitle="鍩烘湰淇℃伅"
-        :fieldConfig="fieldConfig"
-        :excludeFields="excludeFields"
-        @edit="descriptionsHandleEdit"
-        @close="handleClose"
-      />
     </el-card>
   </div>
 </template>
@@ -206,74 +191,18 @@
 } from "@/api/basicInformation/coalQualityMaintenance";
 
 const { proxy } = getCurrentInstance();
-import router from "@/router";
 
 // ===== 鍝嶅簲寮忕姸鎬佺鐞� =====
 // 寮圭獥鎺у埗鐘舵��
-const showDialog = ref(false)
-const supplierFieldLabels = {
-  supplierName: '渚涘簲鍟嗗悕绉�',
-  taxpayerId: '缁熶竴绀句細淇$敤浠g爜',
-}
-// 鏁版嵁瀵硅薄
-const supplierData = ref({
-  supplierName: "娴嬭瘯渚涘簲鍟�",
-  taxpayerId: "91320000MA1N2P3Q4R", 
-  contactPerson: "寮犱笁",
-  contactPhone: "13800138000",
-  bankAccount: "6222024200019999999",
-  bankName: "涓浗宸ュ晢閾惰",
-  businessAddress: "姹熻嫃鐪佽嫃宸炲競宸ヤ笟鍥尯鏄熸箹琛�328鍙�",
-  contactAddress: "姹熻嫃鐪佽嫃宸炲競濮戣嫃鍖鸿鍓嶈100鍙�",
-  createTime: "2024-01-15T10:30:00",
-  updateTime: "2024-06-25T14:20:00",
-  id: 123,
-})
-// 瀛楁閰嶇疆
-const fieldConfig = ref({
-  supplierName: { 
-    label: '渚涘簲鍟嗗悕绉�', 
-    span: 2  // 璺�2鍒楁樉绀�
-  },
-  taxpayerId: { 
-    label: '缁熶竴绀句細淇$敤浠g爜' 
-  },
-  contactPhone: { 
-    label: '鑱旂郴鐢佃瘽',
-    formatter: (value) => value || '鏆傛棤鑱旂郴鏂瑰紡'
-  },
-  createTime: {
-    label: '鍒涘缓鏃堕棿',
-    formatter: (value) => new Date(value).toLocaleDateString('zh-CN')
-  },
-  businessAddress: {
-    label: '璇︾粏缁忚惀鍦板潃',
-    span: 2
-  },
-  contactAddress: {
-    label: '璇︾粏鑱旂郴鍦板潃',
-    span: 2
-  }
-})
-// 鎺掗櫎涓嶆樉绀虹殑瀛楁
-const excludeFields = ref(["id", "updateTime", "deleted"]);
+const showDialog = ref(false);
+const currentViewData = ref({}); // 褰撳墠鏌ョ湅鐨勬暟鎹�
 
-// 浜嬩欢澶勭悊
-const descriptionsHandleEdit = (data) => {
-  console.log("缂栬緫鏁版嵁:", data);
-  // 璺宠浆鍒扮紪杈戦〉闈㈡垨鎵撳紑缂栬緫寮圭獥
-};
-
-const handleClose = () => {
-  console.log("寮圭獥鍏抽棴");
-};
 
 const dialogFormVisible = ref(false);
 const form = ref({});
 const title = ref("");
 const copyForm = ref({});
 const addOrEdit = ref("add");
-const descriptionsVisible = ref(false);
 
 // 鏁版嵁缂撳瓨鏄犲皠
 const userList = ref([]);
@@ -430,8 +359,6 @@
   return matchedField ? matchedField.fieldName : numId;
 };
 
-// ===== 璁$畻灞炴�� =====
-
 /**
  * 褰撳墠鏍囩椤垫槸鍚︽敮鎸佸鍑哄姛鑳�
  */
@@ -470,11 +397,6 @@
  * 褰撳墠閫変腑琛屾暟閲�
  */
 const selectedCount = computed(() => selectedRows.value.length);
-
-/**
- * 鏄惁鏈夐�変腑鐨勮
- */
-const hasSelectedRows = computed(() => selectedCount.value > 0);
 
 // ===== 琛ㄦ牸鍒楅厤缃� =====
 
@@ -796,48 +718,6 @@
   handleAddEdit(tabName.value);
 };
 
-/**
- * 鏌ョ湅鎸夐挳鐐瑰嚮澶勭悊
- * @param {Object} row - 琛屾暟鎹�
- * @description 澶勭悊鏌ョ湅鎿嶄綔锛屾瀯寤哄湴鍧�鏁扮粍骞舵墦寮�鏌ョ湅寮圭獥
- */
-const handleView = (row) => {
-  console.log("鏌ョ湅琛屾暟鎹�:", row);
-  // 鎷垮埌鎵�鏈夌殑keys
-  const keys = Object.keys(row);
-  console.log("鎵�鏈塳eys:", keys);
-  showDialog.value = true;
-  // form.value = JSON.parse(JSON.stringify(row));
-  // console.log("鏌ョ湅琛屾暟鎹�:", form.value);
-  // // 鏋勫缓渚涘簲鍟嗕笟鍔″湴鍧�鏁扮粍
-  // if (form.value.bprovinceId && form.value.bdistrictId && form.value.bcityId) {
-  //   form.value.bids = [row.bprovinceId, row.bcityId, row.bdistrictId];
-  // }
-  // // 鏋勫缓渚涘簲鍟嗚仈绯诲湴鍧�鏁扮粍
-  // if (form.value.cprovinceId && form.value.cdistrictId && form.value.ccityId) {
-  //   form.value.cids = [row.cprovinceId, row.ccityId, row.cdistrictId];
-  // }
-  // // 鏋勫缓瀹㈡埛涓氬姟鍦板潃鏁扮粍
-  // if (
-  //   form.value.businessCityId &&
-  //   form.value.businessDistrictId &&
-  //   form.value.businessProvinceId
-  // ) {
-  //   form.value.bids = [
-  //     row.businessProvinceId,
-  //     row.businessCityId,
-  //     row.businessDistrictId,
-  //   ];
-  // }
-
-  // // 鏋勫缓瀹㈡埛鑱旂郴鍦板潃鏁扮粍
-  // if (form.value.cityId && form.value.districtId && form.value.provinceId) {
-  //   form.value.cids = [row.provinceId, row.cityId, row.districtId];
-  // }
-
-  // addOrEdit.value = "viewRow";
-  // handleAddEdit(tabName.value);
-};
 
 /**
  * 鎵归噺鍒犻櫎澶勭悊
diff --git a/src/views/inspectionUpload/index.vue b/src/views/inspectionUpload/index.vue
index 85e92a9..12bb8c8 100644
--- a/src/views/inspectionUpload/index.vue
+++ b/src/views/inspectionUpload/index.vue
@@ -66,7 +66,7 @@
               </template>
             </el-table-column>
           </el-table>
-          <el-table ref="table" :data="tableData" height="480" v-loading="tableLoading" v-if="activeTab === 'qrCode'"border style="width: 100%;height: calc(100vh - 23em)">
+          <el-table ref="table" :data="tableData" height="480" v-loading="tableLoading" v-if="activeTab === 'qrCode'" border style="width: 100%;height: calc(100vh - 23em)">
             <el-table-column label="搴忓彿" type="index" width="60" align="center" />
             <el-table-column prop="deviceName" label="璁惧鍚嶇О" :show-overflow-tooltip="true">
               <template #default="scope">
diff --git a/src/views/production/components/ProductionDetailsTable.vue b/src/views/production/components/ProductionDetailsTable.vue
index 1db3794..8331deb 100644
--- a/src/views/production/components/ProductionDetailsTable.vue
+++ b/src/views/production/components/ProductionDetailsTable.vue
@@ -110,7 +110,7 @@
       <template #default="{ row, $index }">
         <el-select
             clearable
-            :model-value="getUserNameById(row.producer) || row.producer"
+            :model-value="getUserNameById(row.producerId) || row.producerId"
             placeholder="璇烽�夋嫨鐢熶骇浜�"
             @change="(value) => handleUserSelectChange(row, value)"
             filterable
@@ -339,12 +339,13 @@
 };
 // 澶勭悊鐢ㄦ埛閫夋嫨鍙樺寲锛堟柊鏂规硶锛氬悕绉伴�夋嫨杞琁D锛�
 const handleUserSelectChange = (row, selectedName) => {
+  console.log("handleUserSelectChange", row, selectedName);
   // 鏍规嵁閫夋嫨鐨勫悕绉版壘鍒板搴旂殑ID
   const userItem = userList.value.find(item => item.value === selectedName);
   if (userItem) {
-    row.producer = userItem.key; // 璁剧疆涓篒D
+    row.producerId = userItem.key; // 璁剧疆涓篒D
   } else {
-    row.producer = ''; // 濡傛灉娌℃壘鍒帮紝娓呯┖
+    row.producerId = ''; // 濡傛灉娌℃壘鍒帮紝娓呯┖
   }
 };
 // 鏆撮湶鏂规硶缁欑埗缁勪欢浣跨敤
@@ -364,7 +365,7 @@
       equipmentDepreciation: "",
       purchasePrice: "",
       totalCost: "",
-      producer: "",
+      producerId: "",
       ...rowData,
     };
     tableData.value = [...tableData.value, defaultRow];
diff --git a/src/views/production/components/ProductionDialog.vue b/src/views/production/components/ProductionDialog.vue
index 3b96834..8c16696 100644
--- a/src/views/production/components/ProductionDialog.vue
+++ b/src/views/production/components/ProductionDialog.vue
@@ -396,7 +396,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;
     }
   }
diff --git a/src/views/production/index.vue b/src/views/production/index.vue
index 223d465..1003361 100644
--- a/src/views/production/index.vue
+++ b/src/views/production/index.vue
@@ -1,5 +1,5 @@
 <template>
-  <div class="app-container">
+  <div>
     <!-- 鎼滅储琛ㄥ崟 -->
     <el-form :inline="true" :model="queryParams" class="search-form">
       <el-form-item label="鎼滅储">
@@ -39,12 +39,20 @@
           :border="true"
           style="width: 100%;height: calc(100vh - 26em)"
       >
-        <template #coal="{ row }">
+        <template #coalId="{ row }">
           <div class="coal-tags">
-            <el-tag v-for="coal in parseCoalArray(row.coal)" :key="coal" size="small">
-              {{ getCoalNameById(coal) }}
-            </el-tag>
-            <span v-if="!row.coal">--</span>
+            <template v-if="row.coalId">
+              <el-tag 
+                v-for="coal in parseCoalArray(row.coalId)" 
+                :key="coal" 
+                size="small"
+                type="primary"
+                class="coal-tag"
+              >
+                {{ getDisplayCoalName(coal) }}
+              </el-tag>
+            </template>
+            <span v-else class="no-data">--</span>
           </div>
         </template>
       </ETable>      <!-- 鍒嗛〉缁勪欢 -->
@@ -70,7 +78,7 @@
 </template>
 
 <script setup>
-import {onMounted} from "vue";
+import {onMounted, ref} from "vue";
 import {ElMessage} from "element-plus";
 import {Plus, Delete} from "@element-plus/icons-vue";
 import ProductionDialog from "./components/ProductionDialog.vue";
@@ -83,13 +91,12 @@
 import {useCoalData} from "./components/useCoalData.js";
 import {getCoalInfoList} from "@/api/production";
 
+// 鐓ょ淇℃伅鍒楄〃
+const coalInfoList = ref([]);
+
 // 琛ㄦ牸鍒楅厤缃�
 const columns = [
-  {prop: "coalId", label: "鐓ょ", minWidth: 150,
-    formatter: (row) => {
-      return coalInfoList.value.find(item => item.id == row.coalId)?.coal || '--';
-    }
-  },
+  {prop: "coalId", label: "鐓ょ", minWidth: 150, slot: true},
   {prop: "productionQuantity", label: "鐢熶骇鏁伴噺", minWidth: 120},
   {prop: "laborCost", label: "浜哄伐鎴愭湰", minWidth: 150},
   {prop: "energyConsumptionCost", label: "鑳借�楁垚鏈�", minWidth: 120},
@@ -124,6 +131,20 @@
 // 浣跨敤鐓ょ鏁版嵁缁勫悎寮忓嚱鏁�
 const {getCoalNameById, getCoalData} = useCoalData();
 
+// 鑾峰彇鐓ょ鏄剧ず鍚嶇О锛堝甫澶囩敤閫昏緫锛�
+const getDisplayCoalName = (coalId) => {
+  // 浼樺厛浣跨敤 useCoalData 鐨勬柟娉�
+  let name = getCoalNameById(coalId);
+  
+  // 濡傛灉娌℃湁鎵惧埌锛屽皾璇曚粠 coalInfoList 涓煡鎵�
+  if (name === coalId && coalInfoList.value.length > 0) {
+    const found = coalInfoList.value.find(item => item.id == coalId);
+    name = found ? found.coal : coalId;
+  }
+  
+  return name || coalId;
+};
+
 // 澶勭悊鐢熶骇鏁版嵁鏇存柊
 const handleProductionAndProcessing = (row, rows) => {
   const index = tableData.value.findIndex(item => item.id === rows.id);
@@ -139,13 +160,26 @@
     ElMessage.success("鎿嶄綔鎴愬姛");
   });
 };
-const coalInfoList = ref([]);
+
 // 缁勪欢鎸傝浇鏃跺姞杞芥暟鎹�
 onMounted(async () => {
-  await getCoalData(); // 棰勫姞杞界叅绉嶆暟鎹�
-  getList();
-  let res = await getCoalInfoList()
-  coalInfoList.value = res.data;
+  try {
+    // 骞惰鍔犺浇鐓ょ鏁版嵁鍜岃〃鏍兼暟鎹�
+    await Promise.all([
+      getCoalData(), // 棰勫姞杞界叅绉嶆暟鎹�
+      (async () => {
+        const res = await getCoalInfoList();
+        if (res.code === 200) {
+          coalInfoList.value = res.data;
+        }
+      })()
+    ]);
+    
+    // 鍔犺浇琛ㄦ牸鏁版嵁
+    getList();
+  } catch (error) {
+    ElMessage.error('鏁版嵁鍔犺浇澶辫触锛岃鍒锋柊椤甸潰閲嶈瘯');
+  }
 });
 </script>
 
@@ -187,8 +221,9 @@
   display: flex;
   flex-wrap: wrap;
   gap: 4px;
+  align-items: center;
 
-  .el-tag {
+  .coal-tag {
     margin-right: 4px;
     margin-bottom: 4px;
 
@@ -196,5 +231,10 @@
       margin-right: 0;
     }
   }
+
+  .no-data {
+    color: #999;
+    font-style: italic;
+  }
 }
 </style>

--
Gitblit v1.9.3