From 8f9e65a587ee29b607010f83025456ee28c9b0d6 Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期二, 13 一月 2026 16:28:35 +0800
Subject: [PATCH] 修改产品结构详情

---
 src/views/productionManagement/productStructure/StructureEdit.vue |  280 ++++++++++++++++++++++++++++++-------------------------
 src/views/productionManagement/productStructure/index.vue         |    6 
 2 files changed, 156 insertions(+), 130 deletions(-)

diff --git a/src/views/productionManagement/productStructure/StructureEdit.vue b/src/views/productionManagement/productStructure/StructureEdit.vue
index 679a37c..4d07f5d 100644
--- a/src/views/productionManagement/productStructure/StructureEdit.vue
+++ b/src/views/productionManagement/productStructure/StructureEdit.vue
@@ -19,130 +19,147 @@
                @click="cancelEdit"
                style="margin-bottom: 10px">鍙栨秷
     </el-button>
-    <el-form ref="form"
-             :model="dataValue">
-      <el-table :data="dataValue.dataList"
-                style="width: 100%">
-        <el-table-column prop="productName"
-                         label="浜у搧"
-                         width="150" />
-        <el-table-column prop="model"
-                         label="瑙勬牸"
-                         width="150">
-          <template #default="{ row, $index }">
-            <el-form-item v-if="dataValue.isEdit"
-                          :prop="`dataList.${$index}.model`"
-                          :rules="[{ required: true, message: '璇烽�夋嫨瑙勬牸', trigger: ['blur','change'] }]"
-                          style="margin: 0">
-              <el-select v-model="row.model"
-                         placeholder="璇烽�夋嫨浜у搧"
-                         clearable
-                         :disabled="!dataValue.isEdit"
-                         style="width: 100%"
-                         @visible-change="(v) => { if (v) openDialog($index) }">
-                <el-option v-if="row.model"
-                           :label="row.model"
-                           :value="row.model" />
-              </el-select>
-            </el-form-item>
-          </template>
-        </el-table-column>
-        <el-table-column prop="processId"
-                         label="娑堣�楀伐搴�"
-                         width="150">
-          <template #default="{ row, $index }">
-            <el-form-item :prop="`dataList.${$index}.processId`"
-                          :rules="[{ required: true, message: '璇烽�夋嫨娑堣�楀伐搴�', trigger: 'change' }]"
-                          style="margin: 0">
-              <el-select v-model="row.processId"
-                         placeholder="璇烽�夋嫨"
-                         filterable
-                         clearable
-                         style="width: 100%"
-                         :disabled="!dataValue.isEdit">
-                <el-option v-for="item in dataValue.processOptions"
-                           :key="item.id"
-                           :label="item.name"
-                           :value="item.id" />
-              </el-select>
-            </el-form-item>
-          </template>
-        </el-table-column>
-        <el-table-column prop="unitQuantity"
-                         label="鍗曚綅浜у嚭鎵�闇�鏁伴噺"
-                         width="150">
-          <template #default="{ row, $index }">
-            <el-form-item :prop="`dataList.${$index}.unitQuantity`"
-                          :rules="[{ required: true, message: '璇疯緭鍏ュ崟浣嶄骇鍑烘墍闇�鏁伴噺', trigger: ['blur','change'] }]"
-                          style="margin: 0">
-              <el-input-number v-model="row.unitQuantity"
-                               :min="0"
-                               :precision="2"
-                               :step="1"
-                               controls-position="right"
+
+    <el-table
+        :data="tableData"
+        border
+        :preserve-expanded-content="false"
+        style="width: 100%"
+    >
+      <el-table-column type="expand">
+        <template #default="props">
+          <el-form ref="form"
+                   :model="dataValue">
+            <el-table :data="dataValue.dataList"
+                      style="width: 100%">
+              <el-table-column prop="productName"
+                               label="浜у搧"
+                               width="150" />
+              <el-table-column prop="model"
+                               label="瑙勬牸"
+                               width="150">
+                <template #default="{ row, $index }">
+                  <el-form-item v-if="dataValue.isEdit"
+                                :prop="`dataList.${$index}.model`"
+                                :rules="[{ required: true, message: '璇烽�夋嫨瑙勬牸', trigger: ['blur','change'] }]"
+                                style="margin: 0">
+                    <el-select v-model="row.model"
+                               placeholder="璇烽�夋嫨浜у搧"
+                               clearable
+                               :disabled="!dataValue.isEdit"
                                style="width: 100%"
-                               :disabled="!dataValue.isEdit" />
-            </el-form-item>
-          </template>
-        </el-table-column>
-        <el-table-column prop="demandedQuantity"
-                         label="闇�姹傛�婚噺"
-                         width="150">
-          <template #default="{ row, $index }">
-            <el-form-item :prop="`dataList.${$index}.demandedQuantity`"
-                          :rules="[{ required: true, message: '璇疯緭鍏ラ渶姹傛�婚噺', trigger: ['blur','change'] }]"
-                          style="margin: 0">
-              <el-input-number v-model="row.demandedQuantity"
-                               :min="0"
-                               :precision="2"
-                               :step="1"
-                               controls-position="right"
+                               @visible-change="(v) => { if (v) openDialog($index) }">
+                      <el-option v-if="row.model"
+                                 :label="row.model"
+                                 :value="row.model" />
+                    </el-select>
+                  </el-form-item>
+                </template>
+              </el-table-column>
+              <el-table-column prop="processId"
+                               label="娑堣�楀伐搴�"
+                               width="150">
+                <template #default="{ row, $index }">
+                  <el-form-item :prop="`dataList.${$index}.processId`"
+                                :rules="[{ required: true, message: '璇烽�夋嫨娑堣�楀伐搴�', trigger: 'change' }]"
+                                style="margin: 0">
+                    <el-select v-model="row.processId"
+                               placeholder="璇烽�夋嫨"
+                               filterable
+                               clearable
                                style="width: 100%"
-                               :disabled="!dataValue.isEdit" />
-            </el-form-item>
-          </template>
-        </el-table-column>
-        <el-table-column prop="unit"
-                         label="鍗曚綅"
-                         width="150">
-          <template #default="{ row, $index }">
-            <el-form-item :prop="`dataList.${$index}.unit`"
-                          :rules="[{ required: true, message: '璇疯緭鍏ュ崟浣�', trigger: ['blur','change'] }]"
-                          style="margin: 0">
-              <el-input v-model="row.unit"
-                        placeholder="璇疯緭鍏ュ崟浣�"
-                        clearable
-                        :disabled="!dataValue.isEdit" />
-            </el-form-item>
-          </template>
-        </el-table-column>
-        <el-table-column prop="diskQuantity"
-                         label="鐩樻暟锛堢洏锛�"
-                         width="150">
-          <template #default="{ row, $index }">
-            <el-form-item :prop="`dataList.${$index}.diskQuantity`"
-                          :rules="[{ required: true, message: '璇疯緭鍏ョ洏鏁�', trigger: ['blur','change'] }]"
-                          style="margin: 0">
-              <el-input-number v-model="row.diskQuantity"
-                               :min="0"
-                               :precision="0"
-                               :step="1"
-                               controls-position="right"
-                               style="width: 100%"
-                               :disabled="!dataValue.isEdit" />
-            </el-form-item>
-          </template>
-        </el-table-column>
-        <el-table-column label="鎿嶄綔">
-          <template #default="{ row, $index }">
-            <el-button type="danger"
-                       text
-                       @click="dataValue.dataList.splice($index, 1)">鍒犻櫎
-            </el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-    </el-form>
+                               :disabled="!dataValue.isEdit">
+                      <el-option v-for="item in dataValue.processOptions"
+                                 :key="item.id"
+                                 :label="item.name"
+                                 :value="item.id" />
+                    </el-select>
+                  </el-form-item>
+                </template>
+              </el-table-column>
+              <el-table-column prop="unitQuantity"
+                               label="鍗曚綅浜у嚭鎵�闇�鏁伴噺"
+                               width="150">
+                <template #default="{ row, $index }">
+                  <el-form-item :prop="`dataList.${$index}.unitQuantity`"
+                                :rules="[{ required: true, message: '璇疯緭鍏ュ崟浣嶄骇鍑烘墍闇�鏁伴噺', trigger: ['blur','change'] }]"
+                                style="margin: 0">
+                    <el-input-number v-model="row.unitQuantity"
+                                     :min="0"
+                                     :precision="2"
+                                     :step="1"
+                                     controls-position="right"
+                                     style="width: 100%"
+                                     :disabled="!dataValue.isEdit" />
+                  </el-form-item>
+                </template>
+              </el-table-column>
+              <el-table-column prop="demandedQuantity"
+                               label="闇�姹傛�婚噺"
+                               width="150">
+                <template #default="{ row, $index }">
+                  <el-form-item :prop="`dataList.${$index}.demandedQuantity`"
+                                :rules="[{ required: true, message: '璇疯緭鍏ラ渶姹傛�婚噺', trigger: ['blur','change'] }]"
+                                style="margin: 0">
+                    <el-input-number v-model="row.demandedQuantity"
+                                     :min="0"
+                                     :precision="2"
+                                     :step="1"
+                                     controls-position="right"
+                                     style="width: 100%"
+                                     :disabled="!dataValue.isEdit" />
+                  </el-form-item>
+                </template>
+              </el-table-column>
+              <el-table-column prop="unit"
+                               label="鍗曚綅"
+                               width="150">
+                <template #default="{ row, $index }">
+                  <el-form-item :prop="`dataList.${$index}.unit`"
+                                :rules="[{ required: true, message: '璇疯緭鍏ュ崟浣�', trigger: ['blur','change'] }]"
+                                style="margin: 0">
+                    <el-input v-model="row.unit"
+                              placeholder="璇疯緭鍏ュ崟浣�"
+                              clearable
+                              :disabled="!dataValue.isEdit" />
+                  </el-form-item>
+                </template>
+              </el-table-column>
+              <el-table-column prop="diskQuantity"
+                               label="鐩樻暟锛堢洏锛�"
+                               width="150">
+                <template #default="{ row, $index }">
+                  <el-form-item :prop="`dataList.${$index}.diskQuantity`"
+                                :rules="[{ required: true, message: '璇疯緭鍏ョ洏鏁�', trigger: ['blur','change'] }]"
+                                style="margin: 0">
+                    <el-input-number v-model="row.diskQuantity"
+                                     :min="0"
+                                     :precision="0"
+                                     :step="1"
+                                     controls-position="right"
+                                     style="width: 100%"
+                                     :disabled="!dataValue.isEdit" />
+                  </el-form-item>
+                </template>
+              </el-table-column>
+              <el-table-column label="鎿嶄綔">
+                <template #default="{ row, $index }">
+                  <el-button type="danger"
+                             text
+                             @click="dataValue.dataList.splice($index, 1)">鍒犻櫎
+                  </el-button>
+                </template>
+              </el-table-column>
+            </el-table>
+          </el-form>
+        </template>
+      </el-table-column>
+      <el-table-column label="浜у搧缂栫爜" prop="productCode" />
+      <el-table-column label="浜у搧鍚嶇О" prop="productName" />
+      <el-table-column label="瑙勬牸鍨嬪彿" prop="model" />
+      <el-table-column label="鍗曚綅" prop="unit" />
+    </el-table>
+
     <product-select-dialog v-if="dataValue.showProductDialog"
                            v-model:model-value="dataValue.showProductDialog"
                            @confirm="handleProduct" />
@@ -187,8 +204,8 @@
       type: Boolean,
       default: false,
     },
-    productModelId: {
-      type: Number,
+    record: {
+      type: Object,
       required: true,
     },
   });
@@ -213,18 +230,27 @@
     isEdit: false,
   });
 
+  const tableData = [
+    {
+      productName: props.record.productName,
+      model: props.record.model,
+      unit: props.record.unit,
+      productCode: props.record.productCode,
+    }
+  ]
+
   const openDialog = index => {
     dataValue.currentRowIndex = index;
     dataValue.showProductDialog = true;
   };
 
   const fetchData = async () => {
-    const { data } = await queryList(props.productModelId);
+    const { data } = await queryList(props.record.id);
     dataValue.dataList = data;
   };
 
   const fetchProcessOptions = async () => {
-    const { data } = await list(props.productModelId);
+    const { data } = await list(props.record.id);
     dataValue.processOptions = data;
   };
 
@@ -245,7 +271,7 @@
         dataValue.loading = true;
         if (valid) {
           add({
-            parentId: props.productModelId,
+            parentId: props.record.id,
             productStructureList: dataValue.dataList || [],
           }).then(res => {
             ElMessage.success("淇濆瓨鎴愬姛");
diff --git a/src/views/productionManagement/productStructure/index.vue b/src/views/productionManagement/productStructure/index.vue
index 6ba2e4a..b17c1f0 100644
--- a/src/views/productionManagement/productStructure/index.vue
+++ b/src/views/productionManagement/productStructure/index.vue
@@ -15,14 +15,14 @@
             type="primary"
             text
             @click="() =>{
-              currentRowId = row.id;
+              currentRow = row;
               showEdit = true;
             }"
         >{{ row.productName }}
         </el-button>
       </template>
     </PIMTable>
-    <StructureEdit v-if="showEdit" v-model:show-model="showEdit" :product-model-id="currentRowId"/>
+    <StructureEdit v-if="showEdit" v-model:show-model="showEdit" :record="currentRow"/>
   </div>
 </template>
 
@@ -57,7 +57,7 @@
 const tableLoading = ref(false);
 const showEdit = ref(false);
 const selectedRows = ref([]);
-const currentRowId = ref(0);
+const currentRow = ref({});
 const page = reactive({
   current: 1,
   size: 10,

--
Gitblit v1.9.3