From ff1e38350372a20b673c211b88843c48d96b48ca Mon Sep 17 00:00:00 2001
From: zhangwencui <1064582902@qq.com>
Date: 星期四, 19 三月 2026 10:16:33 +0800
Subject: [PATCH] 工艺路线和BOM修改

---
 src/views/productionManagement/processRoute/processRouteItem/index.vue |  147 ++++++++++++++++++++++++++++---------------------
 1 files changed, 84 insertions(+), 63 deletions(-)

diff --git a/src/views/productionManagement/processRoute/processRouteItem/index.vue b/src/views/productionManagement/processRoute/processRouteItem/index.vue
index ce3ee0b..cd9260a 100644
--- a/src/views/productionManagement/processRoute/processRouteItem/index.vue
+++ b/src/views/productionManagement/processRoute/processRouteItem/index.vue
@@ -16,18 +16,10 @@
         </div>
         <div class="info-item">
           <div class="info-label-wrapper">
-            <span class="info-label">浜у搧鍚嶇О</span>
+            <span class="info-label">浜у搧绫诲瀷</span>
           </div>
           <div class="info-value-wrapper">
-            <span class="info-value">{{ routeInfo.productName || '-' }}</span>
-          </div>
-        </div>
-        <div class="info-item">
-          <div class="info-label-wrapper">
-            <span class="info-label">瑙勬牸鍚嶇О</span>
-          </div>
-          <div class="info-value-wrapper">
-            <span class="info-value">{{ routeInfo.model || '-' }}</span>
+            <span class="info-value">{{ routeInfo.dictLabel || '-' }}</span>
           </div>
         </div>
         <div class="info-item">
@@ -71,7 +63,9 @@
               :data="tableData"
               :header-cell-style="{ background: '#F0F1F5', color: '#333333' }"
               row-key="id"
+              height="350"
               tooltip-effect="dark"
+              style="margin-bottom: 20px;"
               class="lims-table">
       <el-table-column align="center"
                        label="搴忓彿"
@@ -84,12 +78,6 @@
           {{ getProcessName(scope.row.processId) || '-' }}
         </template>
       </el-table-column>
-      <el-table-column label="浜у搧鍚嶇О"
-                       prop="productName"
-                       min-width="160" />
-      <el-table-column label="瑙勬牸鍚嶇О"
-                       prop="model"
-                       min-width="140" />
       <el-table-column label="鍙傛暟鍒楄〃"
                        min-width="160">
         <template #default="scope">
@@ -99,14 +87,12 @@
                      @click="handleViewParams(scope.row)">鍙傛暟鍒楄〃</el-button>
         </template>
       </el-table-column>
-      <el-table-column label="鍗曚綅"
-                       prop="unit"
-                       width="100" />
       <el-table-column label="鏄惁璐ㄦ"
-                       prop="isQuality"
-                       width="100">
+                       prop="isQuality">
         <template #default="scope">
-          {{scope.row.isQuality ? "鏄�" : "鍚�"}}
+          <el-tag :type="scope.row.isQuality ? 'success' : 'danger'">
+            {{scope.row.isQuality ? '鏄�' : '鍚�' }}
+          </el-tag>
         </template>
       </el-table-column>
       <el-table-column label="鎿嶄綔"
@@ -119,10 +105,6 @@
                      size="small"
                      @click="handleEdit(scope.row)"
                      :disabled="scope.row.isComplete">缂栬緫</el-button>
-          <!-- <el-button type="info"
-                     link
-                     size="small"
-                     @click="handleViewParams(scope.row)">鍙傛暟鍒楄〃</el-button> -->
           <el-button type="danger"
                      link
                      size="small"
@@ -160,20 +142,6 @@
             </div>
             <!-- 浜у搧淇℃伅 -->
             <div class="card-content">
-              <div v-if="item.productName"
-                   class="product-info">
-                <div class="product-name">{{ item.productName }}</div>
-                <div v-if="item.model"
-                     class="product-model">
-                  {{ item.model }}
-                  <!-- <span v-if="item.unit" class="product-unit">{{ item.unit }}</span> -->
-                </div>
-                <el-tag type="primary"
-                        class="product-tag"
-                        v-if="item.isQuality">璐ㄦ</el-tag>
-              </div>
-              <div v-else
-                   class="product-info empty">鏆傛棤浜у搧淇℃伅</div>
             </div>
             <!-- 鎿嶄綔鎸夐挳 -->
             <div class="card-footer">
@@ -196,6 +164,50 @@
         </div>
       </div>
     </template>
+    <div class="section-BOM">
+      <div class="section-header">
+        <div class="section-title">BOM</div>
+      </div>
+      <div>
+        <!-- BOM琛ㄦ牸 -->
+        <el-table :data="bomTableData"
+                  border
+                  :preserve-expanded-content="false"
+                  :default-expand-all="true"
+                  style="width: 100%">
+          <el-table-column type="expand">
+            <template #default="props">
+              <el-table :data="props.row.bomList"
+                        row-key="id"
+                        default-expand-all
+                        :tree-props="{children: 'children', hasChildren: 'hasChildren'}"
+                        style="width: 100%">
+                <el-table-column prop="productName"
+                                 label="浜у搧" />
+                <el-table-column prop="model"
+                                 label="瑙勬牸" />
+                <el-table-column prop="processName"
+                                 label="娑堣�楀伐搴�" />
+                <el-table-column prop="unitQuantity"
+                                 label="鍗曚綅浜у嚭鎵�闇�鏁伴噺" />
+                <el-table-column prop="unit"
+                                 label="鍗曚綅" />
+              </el-table>
+            </template>
+          </el-table-column>
+          <el-table-column label="BOM缂栧彿"
+                           prop="bomNo" />
+          <el-table-column label="浜у搧绫诲瀷"
+                           prop="dictLabel" />
+          <!-- <el-table-column label="浜у搧缂栫爜"
+                           prop="productCode" />
+          <el-table-column label="浜у搧鍚嶇О"
+                           prop="productName" />
+          <el-table-column label="瑙勬牸鍨嬪彿"
+                           prop="model" /> -->
+        </el-table>
+      </div>
+    </div>
     <!-- 鏂板/缂栬緫寮圭獥 -->
     <el-dialog v-model="dialogVisible"
                :title="operationType === 'add' ? '鏂板宸ヨ壓璺嚎椤圭洰' : '缂栬緫宸ヨ壓璺嚎椤圭洰'"
@@ -216,22 +228,6 @@
                        :label="process.name"
                        :value="process.id" />
           </el-select>
-        </el-form-item>
-        <el-form-item label="浜у搧鍚嶇О"
-                      prop="productModelId">
-          <el-button type="primary"
-                     @click="showProductSelectDialog = true">
-            {{ form.productName && form.model 
-              ? `${form.productName} - ${form.model}` 
-              : '閫夋嫨浜у搧' }}
-          </el-button>
-        </el-form-item>
-        <el-form-item label="鍗曚綅"
-                      prop="unit">
-          <el-input v-model="form.unit"
-                    :placeholder="form.productModelId ? '鏍规嵁閫夋嫨鐨勪骇鍝佽嚜鍔ㄥ甫鍑�' : '璇峰厛閫夋嫨浜у搧'"
-                    clearable
-                    :disabled="true" />
         </el-form-item>
         <el-form-item label="鏄惁璐ㄦ"
                       prop="isQuality">
@@ -288,6 +284,7 @@
     sortRouteItem,
   } from "@/api/productionManagement/productProcessRoute.js";
   import { processList } from "@/api/productionManagement/productionProcess.js";
+  import { queryList } from "@/api/productionManagement/productStructure.js";
   import { useRoute } from "vue-router";
   import { ElMessageBox, ElMessage } from "element-plus";
   import Sortable from "sortablejs";
@@ -313,6 +310,7 @@
     productName: "",
     model: "",
     bomNo: "",
+    dictLabel: "",
     bomId: null,
     description: "",
   });
@@ -322,6 +320,7 @@
   const showParamListDialog = ref(false);
   const currentProcess = ref(null);
   const paramList = ref([]);
+  const bomTableData = ref([]);
   let tableSortable = null;
   let cardSortable = null;
 
@@ -347,9 +346,6 @@
 
   const rules = {
     processId: [{ required: true, message: "璇烽�夋嫨宸ュ簭", trigger: "change" }],
-    productModelId: [
-      { required: true, message: "璇烽�夋嫨浜у搧", trigger: "change" },
-    ],
   };
 
   // 鏍规嵁宸ュ簭ID鑾峰彇宸ュ簭鍚嶇О
@@ -401,9 +397,32 @@
       productName: route.query.productName || "",
       model: route.query.model || "",
       bomNo: route.query.bomNo || "",
+      dictLabel: route.query.dictLabel || "",
       bomId: route.query.bomId || null,
       description: route.query.description || "",
     };
+
+    // 濡傛灉鏈塨omId锛岃幏鍙朆OM鏁版嵁
+    if (routeInfo.value.bomId) {
+      queryList(routeInfo.value.bomId)
+        .then(res => {
+          if (res.data) {
+            bomTableData.value = [
+              {
+                bomNo: routeInfo.value.bomNo,
+                dictLabel: routeInfo.value.dictLabel,
+                productCode: "",
+                productName: routeInfo.value.productName,
+                model: routeInfo.value.model,
+                bomList: res.data,
+              },
+            ];
+          }
+        })
+        .catch(err => {
+          console.error("鑾峰彇BOM鏁版嵁澶辫触锛�", err);
+        });
+    }
   };
 
   // 鏂板
@@ -765,6 +784,8 @@
 <style scoped>
   .card-container {
     padding: 20px 0;
+    /* height: 350px; */
+    margin-bottom: 20px;
   }
 
   .cards-wrapper {
@@ -902,13 +923,13 @@
     opacity: 0.8;
   }
 
-  /* 琛ㄦ牸瑙嗗浘鏍峰紡 */
-  :deep(.el-table__row) {
+  /* 琛ㄦ牸瑙嗗浘鏍峰紡 - 浠呭簲鐢ㄤ簬椤圭洰鍒楄〃 */
+  :deep(.lims-table .el-table__row) {
     transition: background-color 0.2s;
     cursor: move;
   }
 
-  :deep(.el-table__row:hover) {
+  :deep(.lims-table .el-table__row:hover) {
     background-color: #f9fafc !important;
   }
 
@@ -957,7 +978,7 @@
 
   .route-info {
     display: grid;
-    grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
+    grid-template-columns: repeat(auto-fit, minmax(400px, 1fr));
     gap: 16px;
     padding: 4px;
   }

--
Gitblit v1.9.3