From 2d9fa4f40833ec76c481720cdb3329407657b4a5 Mon Sep 17 00:00:00 2001
From: zhangwencui <1064582902@qq.com>
Date: 星期二, 21 四月 2026 17:20:06 +0800
Subject: [PATCH] 工艺路线一些对接(部分接口有问题)

---
 src/views/productionManagement/productStructure/Detail/index.vue       |   17 
 src/views/productionManagement/productionProcess/index.vue             |    6 
 src/views/productionManagement/processRoute/index.vue                  |  350 +++++++-------
 src/api/productionManagement/processRouteItem.js                       |   29 
 src/views/productionManagement/processRoute/New.vue                    |  285 ++++++------
 src/api/productionManagement/processRoute.js                           |   29 
 src/api/productionManagement/productionProcess.js                      |   17 
 src/views/productionManagement/processRoute/processRouteItem/index.vue |  556 ++---------------------
 src/components/ProcessParamListDialog.vue                              |   83 +-
 9 files changed, 475 insertions(+), 897 deletions(-)

diff --git a/src/api/productionManagement/processRoute.js b/src/api/productionManagement/processRoute.js
index c13b2fc..c07c6d3 100644
--- a/src/api/productionManagement/processRoute.js
+++ b/src/api/productionManagement/processRoute.js
@@ -4,7 +4,7 @@
 // 鍒嗛〉鏌ヨ
 export function listPage(query) {
   return request({
-    url: "/processRoute/page",
+    url: "/technologyRouting/page",
     method: "get",
     params: query,
   });
@@ -12,31 +12,38 @@
 
 export function add(data) {
   return request({
-    url: "/processRoute",
+    url: "/technologyRouting",
     method: "post",
     data: data,
   });
 }
 
+// export function del(ids) {
+//   return request({
+//     url: "/processRoute/" + ids,
+//     method: "delete",
+//   });
+// }
 export function del(ids) {
   return request({
-    url: '/processRoute/' + ids,
-    method: 'delete',
-  })
+    url: "/technologyRouting/delete",
+    method: "delete",
+    data: ids,
+  });
 }
 
 export function update(data) {
   return request({
-    url: '/processRoute',
-    method: 'put',
+    url: "/technologyRouting",
+    method: "put",
     data: data,
-  })
+  });
 }
 
 // 鑾峰彇璇︽儏
 export function getById(id) {
   return request({
     url: `/processRoute/${id}`,
-    method: 'get',
-  })
-}
\ No newline at end of file
+    method: "get",
+  });
+}
diff --git a/src/api/productionManagement/processRouteItem.js b/src/api/productionManagement/processRouteItem.js
index 7b66f8f..3843203 100644
--- a/src/api/productionManagement/processRouteItem.js
+++ b/src/api/productionManagement/processRouteItem.js
@@ -4,7 +4,7 @@
 // 鍒楄〃鏌ヨ
 export function findProcessRouteItemList(query) {
   return request({
-    url: "/processRouteItem/list",
+    url: "/technologyRoutingOperation/list",
     method: "get",
     params: query,
   });
@@ -12,8 +12,15 @@
 
 export function addOrUpdateProcessRouteItem(data) {
   return request({
-    url: "/processRouteItem",
+    url: "/technologyRoutingOperation",
     method: "post",
+    data: data,
+  });
+}
+export function addOrUpdateProcessRouteItem1(data) {
+  return request({
+    url: "/technologyRoutingOperation",
+    method: "put",
     data: data,
   });
 }
@@ -32,14 +39,14 @@
   // 灏唅d鏁扮粍杞崲涓洪�楀彿鍒嗛殧鐨勫瓧绗︿覆锛屾嫾鎺ュ埌URL鍚庨潰
   const idsStr = Array.isArray(ids) ? ids.join(",") : ids;
   return request({
-    url: `/processRouteItem/batchDelete/${idsStr}`,
+    url: `/technologyRoutingOperation/${idsStr}`,
     method: "delete",
   });
 }
 // 鑾峰彇宸ュ簭鍙傛暟鍒楄〃
 export function getProcessParamList(query) {
   return request({
-    url: `/ProcessRouteItemParam/pageList`,
+    url: `/technologyRoutingOperationParam/list`,
     method: "get",
     params: query,
   });
@@ -47,7 +54,7 @@
 // 宸ヨ壓璺嚎鍙傛暟鏂板
 export function addProcessRouteItemParam(data) {
   return request({
-    url: "/ProcessRouteItemParam/save",
+    url: "/technologyRoutingOperationParam",
     method: "post",
     data: data,
   });
@@ -55,7 +62,7 @@
 // 宸ヨ壓璺嚎鍙傛暟淇敼
 export function editProcessRouteItemParam(data) {
   return request({
-    url: "/ProcessRouteItemParam/edit",
+    url: "/technologyRoutingOperationParam",
     method: "put",
     data: data,
   });
@@ -63,7 +70,15 @@
 // 宸ヨ壓璺嚎鍙傛暟鍒犻櫎
 export function delProcessRouteItemParam(id) {
   return request({
-    url: `/ProcessRouteItemParam/remove/${id}`,
+    url: `/technologyRoutingOperationParam/${id}`,
     method: "delete",
   });
 }
+// 鎸夊伐鑹鸿矾绾垮伐搴忓悓姝ュ伐搴忓弬鏁�
+export function syncProcessParamItem(data) {
+  return request({
+    url: "/technologyRoutingOperationParam/sync",
+    method: "post",
+    data: data,
+  });
+}
diff --git a/src/api/productionManagement/productionProcess.js b/src/api/productionManagement/productionProcess.js
index 7eda917..fbede6e 100644
--- a/src/api/productionManagement/productionProcess.js
+++ b/src/api/productionManagement/productionProcess.js
@@ -18,6 +18,14 @@
   });
 }
 
+// 宸ュ簭鏌ヨ
+export function list(query) {
+  return request({
+    url: "/technologyOperation/listPage",
+    method: "get",
+    params: query,
+  });
+}
 export function add(data) {
   return request({
     url: "/technologyOperation/",
@@ -39,15 +47,6 @@
     url: "/technologyOperation/update",
     method: "put",
     data: data,
-  });
-}
-
-// 宸ュ簭鏌ヨ
-export function list(query) {
-  return request({
-    url: "/technologyOperation/listPage",
-    method: "get",
-    params: query,
   });
 }
 
diff --git a/src/components/ProcessParamListDialog.vue b/src/components/ProcessParamListDialog.vue
index c835f29..8ea5856 100644
--- a/src/components/ProcessParamListDialog.vue
+++ b/src/components/ProcessParamListDialog.vue
@@ -6,15 +6,26 @@
     <div class="param-list-container">
       <div class="params-header">
         <span>鍙傛暟鍒楄〃</span>
-        <el-button v-if="editable"
-                   type="primary"
-                   link
-                   size="small"
-                   @click="handleAddParam">
-          <el-icon>
-            <Plus />
-          </el-icon>鏂板
-        </el-button>
+        <div>
+          <el-button v-if="editable"
+                     type="primary"
+                     link
+                     size="small"
+                     @click="handleAddParam">
+            <el-icon>
+              <Plus />
+            </el-icon>鏂板
+          </el-button>
+          <el-button v-if="editable"
+                     type="primary"
+                     link
+                     size="small"
+                     @click="getsyncProcessParamItem">
+            <el-icon>
+              <Refresh />
+            </el-icon>鍚屾宸ュ簭鍙傛暟
+          </el-button>
+        </div>
       </div>
       <div class="params-list">
         <div v-for="param in paramList"
@@ -87,8 +98,8 @@
           <!-- 鍒嗛〉鎺т欢 -->
           <div class="pagination-container"
                style="margin-top: 10px;">
-            <el-pagination v-model:current-page="paramPage.current"
-                           v-model:page-size="paramPage.size"
+            <el-pagination :current-page="paramPage.current"
+                           :page-size="paramPage.size"
                            :page-sizes="[10, 20, 50, 100]"
                            layout="total, sizes, prev, pager, next, jumper"
                            :total="paramPage.total"
@@ -120,17 +131,11 @@
             <el-form-item label="鏍囧噯鍊�"
                           v-if="selectedParam.paramType == '1'">
               <el-input v-model="selectedParam.standardValue"
-                        type="number"
                         placeholder="璇疯緭鍏ラ粯璁ゅ��" />
             </el-form-item>
-            <el-form-item label="鎺掑簭">
-              <el-input v-model="selectedParam.sort"
-                        type="number"
-                        placeholder="璇疯緭鍏ユ帓搴�" />
-            </el-form-item>
             <el-form-item label="鏄惁蹇呭~">
-              <el-switch :active-value="true"
-                         :inactive-value="false"
+              <el-switch :active-value="1"
+                         :inactive-value="0"
                          v-model="selectedParam.isRequired" />
             </el-form-item>
           </el-form>
@@ -261,8 +266,7 @@
     paramId: null,
     paramName: "",
     standardValue: null,
-    sort: 1,
-    isRequired: false,
+    isRequired: 0,
     paramType: null,
     paramFormat: "",
     unit: "",
@@ -276,7 +280,7 @@
   const handleAddParam = () => {
     selectedParam.value = null;
     paramSearchKeyword.value = "";
-    paramPage.current = 1;
+    paramPage.value.current = 1;
     // 鑾峰彇鍙�夊弬鏁板垪琛�
     getBaseParamListData();
     selectParamDialogVisible.value = true;
@@ -290,8 +294,7 @@
       paramId: param.paramId,
       paramName: param.parameterName || param.paramName,
       standardValue: param.standardValue,
-      sort: param.sort || 1,
-      isRequired: param.isRequired || false,
+      isRequired: param.isRequired || 0,
       paramType: param.parameterType || param.paramType,
       paramFormat: param.parameterFormat || param.paramFormat,
       unit: param.unit || param.unit,
@@ -332,17 +335,22 @@
       })
       .catch(() => {});
   };
+  const getsyncProcessParamItem = () => {
+    emit("getsyncProcessParamItem");
+  };
 
   // 鑾峰彇鍙�夊弬鏁板垪琛�
   const getBaseParamListData = () => {
+    console.log(paramPage, "paramPage.size");
+
     getBaseParamList({
       paramName: paramSearchKeyword.value,
-      current: paramPage.current,
-      size: paramPage.size,
+      current: paramPage.value.current,
+      size: paramPage.value.size,
     }).then(res => {
       if (res.code === 200) {
         filteredParamList.value = res.data?.records || [];
-        paramPage.total = res.data?.total || 0;
+        paramPage.value.total = res.data.total || 0;
       } else {
         ElMessage.error(res.msg || "鏌ヨ澶辫触");
       }
@@ -380,8 +388,7 @@
         standardValue: isNumericMode
           ? selectedParam.value.standardValue || ""
           : "",
-        isRequired: selectedParam.value.isRequired || false,
-        sort: selectedParam.value.sort || 1,
+        isRequired: selectedParam.value.isRequired || 0,
       })
         .then(res => {
           if (res.code === 200) {
@@ -397,14 +404,15 @@
           console.error("娣诲姞鍙傛暟澶辫触锛�", err);
         });
     } else {
+      console.log(selectedParam.value, "selectedParam");
+
       addProcessRouteItemParam({
-        routeItemId: props.process.id,
+        technologyRoutingOperationId: props.process.id,
         paramId: selectedParam.value.id,
         standardValue: isNumericMode
           ? selectedParam.value.standardValue || ""
           : "",
-        isRequired: selectedParam.value.isRequired || false,
-        sort: selectedParam.value.sort || 1,
+        isRequired: selectedParam.value.isRequired || 0,
       })
         .then(res => {
           if (res.code === 200) {
@@ -438,7 +446,7 @@
             standardValue: isNumericMode
               ? editParamForm.value.standardValue || ""
               : "",
-            isRequired: editParamForm.value.isRequired || false,
+            isRequired: editParamForm.value.isRequired || 0,
           })
             .then(res => {
               if (res.code === 200) {
@@ -457,12 +465,12 @@
           // 璋冪敤API淇敼鍙傛暟
           editProcessRouteItemParam({
             id: editParamForm.value.id,
-            routeItemId: props.process.id,
+            technologyRoutingOperationId: props.process.id,
             paramId: editParamForm.value.paramId,
             standardValue: isNumericMode
               ? editParamForm.value.standardValue || ""
               : "",
-            isRequired: editParamForm.value.isRequired || false,
+            isRequired: editParamForm.value.isRequired || 0,
           })
             .then(res => {
               if (res.code === 200) {
@@ -513,7 +521,7 @@
         editParamDialogVisible.value = false;
         selectedParam.value = null;
         paramSearchKeyword.value = "";
-        paramPage.current = 1;
+        paramPage.value.current = 1;
         filteredParamList.value = [];
         editParamForm.value = {
           id: null,
@@ -521,8 +529,7 @@
           paramId: null,
           paramName: "",
           standardValue: null,
-          sort: 1,
-          isRequired: false,
+          isRequired: 0,
           paramType: null,
           paramFormat: "",
           unit: "",
diff --git a/src/views/productionManagement/processRoute/New.vue b/src/views/productionManagement/processRoute/New.vue
index 62c6873..b7f4f26 100644
--- a/src/views/productionManagement/processRoute/New.vue
+++ b/src/views/productionManagement/processRoute/New.vue
@@ -1,71 +1,63 @@
 <template>
   <div>
-    <el-dialog
-        v-model="isShow"
-        title="鏂板宸ヨ壓璺嚎"
-        width="400"
-        @close="closeModal"
-    >
-      <el-form label-width="140px" :model="formState" label-position="top" ref="formRef">
-        <el-form-item
-            label="浜у搧鍚嶇О"
-            prop="productModelId"
-            :rules="[
+    <el-dialog v-model="isShow"
+               title="鏂板宸ヨ壓璺嚎"
+               width="400"
+               @close="closeModal">
+      <el-form label-width="140px"
+               :model="formState"
+               label-position="top"
+               ref="formRef">
+        <el-form-item label="浜у搧鍚嶇О"
+                      prop="productModelId"
+                      :rules="[
                 {
                 required: true,
                 message: '璇烽�夋嫨浜у搧',
                 trigger: 'change',
               }
-            ]"
-        >
-          <el-button type="primary" @click="showProductSelectDialog = true">
+            ]">
+          <el-button type="primary"
+                     @click="showProductSelectDialog = true">
             {{ formState.productName && formState.productModelName 
               ? `${formState.productName} - ${formState.productModelName}` 
               : '閫夋嫨浜у搧' }}
           </el-button>
         </el-form-item>
-
-        <el-form-item
-            label="BOM"
-            prop="bomId"
-            :rules="[
+        <el-form-item label="BOM"
+                      prop="bomId"
+                      :rules="[
                 {
                 required: true,
                 message: '璇烽�夋嫨BOM',
                 trigger: 'change',
               }
-            ]"
-        >
-          <el-select
-              v-model="formState.bomId"
-              placeholder="璇烽�夋嫨BOM"
-              clearable
-              :disabled="!formState.productModelId || bomOptions.length === 0"
-              style="width: 100%"
-          >
-            <el-option
-                v-for="item in bomOptions"
-                :key="item.id"
-                :label="item.bomNo || `BOM-${item.id}`"
-                :value="item.id"
-            />
+            ]">
+          <el-select v-model="formState.bomId"
+                     placeholder="璇烽�夋嫨BOM"
+                     clearable
+                     :disabled="!formState.productModelId || bomOptions.length === 0"
+                     style="width: 100%">
+            <el-option v-for="item in bomOptions"
+                       :key="item.id"
+                       :label="item.bomNo || `BOM-${item.id}`"
+                       :value="item.id" />
           </el-select>
         </el-form-item>
-
-        <el-form-item label="澶囨敞" prop="description">
-          <el-input v-model="formState.description" type="textarea" />
+        <el-form-item label="澶囨敞"
+                      prop="description">
+          <el-input v-model="formState.description"
+                    type="textarea" />
         </el-form-item>
       </el-form>
-      
       <!-- 浜у搧閫夋嫨寮圭獥 -->
-      <ProductSelectDialog
-          v-model="showProductSelectDialog"
-          @confirm="handleProductSelect"
-          single
-      />
+      <ProductSelectDialog v-model="showProductSelectDialog"
+                           @confirm="handleProductSelect"
+                           single />
       <template #footer>
         <div class="dialog-footer">
-          <el-button type="primary" @click="handleSubmit">纭</el-button>
+          <el-button type="primary"
+                     @click="handleSubmit">纭</el-button>
           <el-button @click="closeModal">鍙栨秷</el-button>
         </div>
       </template>
@@ -74,121 +66,122 @@
 </template>
 
 <script setup>
-import {ref, computed, getCurrentInstance} from "vue";
-import {add} from "@/api/productionManagement/processRoute.js";
-import {getByModel} from "@/api/productionManagement/productBom.js";
-import ProductSelectDialog from "@/views/basicData/product/ProductSelectDialog.vue";
+  import { ref, computed, getCurrentInstance } from "vue";
+  import { add } from "@/api/productionManagement/processRoute.js";
+  import { getByModel } from "@/api/productionManagement/productBom.js";
+  import ProductSelectDialog from "@/views/basicData/product/ProductSelectDialog.vue";
 
-const props = defineProps({
-  visible: {
-    type: Boolean,
-    required: true,
-  },
-});
+  const props = defineProps({
+    visible: {
+      type: Boolean,
+      required: true,
+    },
+  });
 
-const emit = defineEmits(['update:visible', 'completed']);
+  const emit = defineEmits(["update:visible", "completed"]);
 
-// 鍝嶅簲寮忔暟鎹紙鏇夸唬閫夐」寮忕殑 data锛�
-const formState = ref({
-  productId: undefined,
-  productModelId: undefined,
-  productName: "",
-  productModelName: "",
-  bomId: undefined,
-  description: '',
-});
-
-const isShow = computed({
-  get() {
-    return props.visible;
-  },
-  set(val) {
-    emit('update:visible', val);
-  },
-});
-
-const showProductSelectDialog = ref(false);
-const bomOptions = ref([]);
-
-let { proxy } = getCurrentInstance()
-
-const closeModal = () => {
-  // 閲嶇疆琛ㄥ崟鏁版嵁
-  formState.value = {
+  // 鍝嶅簲寮忔暟鎹紙鏇夸唬閫夐」寮忕殑 data锛�
+  const formState = ref({
     productId: undefined,
     productModelId: undefined,
     productName: "",
     productModelName: "",
     bomId: undefined,
-    description: '',
-  };
-  bomOptions.value = [];
-  isShow.value = false;
-};
+    description: "",
+  });
 
-// 浜у搧閫夋嫨澶勭悊
-const handleProductSelect = async (products) => {
-  if (products && products.length > 0) {
-    const product = products[0];
-    // 鍏堟煡璇OM鍒楄〃锛堝繀閫夛級
-    try {
-      const res = await getByModel(product.id);
-      // 澶勭悊杩斿洖鐨凚OM鏁版嵁锛氬彲鑳芥槸鏁扮粍銆佸璞℃垨鍖呭惈data瀛楁
-      let bomList = [];
-      if (Array.isArray(res)) {
-        bomList = res;
-      } else if (res && res.data) {
-        bomList = Array.isArray(res.data) ? res.data : [res.data];
-      } else if (res && typeof res === 'object') {
-        bomList = [res];
-      }
-      
-      if (bomList.length > 0) {
-        formState.value.productModelId = product.id;
-        formState.value.productName = product.productName;
-        formState.value.productModelName = product.model;
-        formState.value.bomId = undefined; // 閲嶇疆BOM閫夋嫨
-        bomOptions.value = bomList;
-        showProductSelectDialog.value = false;
-        // 瑙﹀彂琛ㄥ崟楠岃瘉鏇存柊
-        proxy.$refs["formRef"]?.validateField('productModelId');
-      } else {
+  const isShow = computed({
+    get() {
+      return props.visible;
+    },
+    set(val) {
+      emit("update:visible", val);
+    },
+  });
+
+  const showProductSelectDialog = ref(false);
+  const bomOptions = ref([]);
+
+  let { proxy } = getCurrentInstance();
+
+  const closeModal = () => {
+    // 閲嶇疆琛ㄥ崟鏁版嵁
+    formState.value = {
+      productId: undefined,
+      productModelId: undefined,
+      productName: "",
+      productModelName: "",
+      bomId: undefined,
+      description: "",
+    };
+    bomOptions.value = [];
+    isShow.value = false;
+  };
+
+  // 浜у搧閫夋嫨澶勭悊
+  const handleProductSelect = async products => {
+    if (products && products.length > 0) {
+      const product = products[0];
+      // 鍏堟煡璇OM鍒楄〃锛堝繀閫夛級
+      try {
+        const res = await getByModel(product.id);
+        // 澶勭悊杩斿洖鐨凚OM鏁版嵁锛氬彲鑳芥槸鏁扮粍銆佸璞℃垨鍖呭惈data瀛楁
+        let bomList = [];
+        if (Array.isArray(res)) {
+          bomList = res;
+        } else if (res && res.data) {
+          bomList = Array.isArray(res.data) ? res.data : [res.data];
+        } else if (res && typeof res === "object") {
+          bomList = [res];
+        }
+
+        if (bomList.length > 0) {
+          formState.value.productModelId = product.id;
+          formState.value.productName = product.productName;
+          formState.value.productModelName = product.model;
+          formState.value.bomId = undefined; // 閲嶇疆BOM閫夋嫨
+          bomOptions.value = bomList;
+          showProductSelectDialog.value = false;
+          // 瑙﹀彂琛ㄥ崟楠岃瘉鏇存柊
+          proxy.$refs["formRef"]?.validateField("productModelId");
+        } else {
+          proxy.$modal.msgError("璇ヤ骇鍝佹病鏈塀OM锛岃鍏堝垱寤築OM");
+        }
+      } catch (error) {
+        // 濡傛灉鎺ュ彛杩斿洖404鎴栧叾浠栭敊璇紝璇存槑娌℃湁BOM
         proxy.$modal.msgError("璇ヤ骇鍝佹病鏈塀OM锛岃鍏堝垱寤築OM");
       }
-    } catch (error) {
-      // 濡傛灉鎺ュ彛杩斿洖404鎴栧叾浠栭敊璇紝璇存槑娌℃湁BOM
-      proxy.$modal.msgError("璇ヤ骇鍝佹病鏈塀OM锛岃鍏堝垱寤築OM");
     }
-  }
-};
+  };
 
-const handleSubmit = () => {
-  proxy.$refs["formRef"].validate(valid => {
-    if (valid) {
-      // 楠岃瘉鏄惁閫夋嫨浜嗕骇鍝佸拰BOM
-      if (!formState.value.productModelId) {
-        proxy.$modal.msgError("璇烽�夋嫨浜у搧");
-        return;
+  const handleSubmit = () => {
+    proxy.$refs["formRef"].validate(valid => {
+      if (valid) {
+        // 楠岃瘉鏄惁閫夋嫨浜嗕骇鍝佸拰BOM
+        if (!formState.value.productModelId) {
+          proxy.$modal.msgError("璇烽�夋嫨浜у搧");
+          return;
+        }
+        if (!formState.value.bomId) {
+          proxy.$modal.msgError("璇烽�夋嫨BOM");
+          return;
+        }
+        console.log(formState.value, "formState.value====");
+
+        add(formState.value).then(res => {
+          // 鍏抽棴妯℃�佹
+          isShow.value = false;
+          // 鍛婄煡鐖剁粍浠跺凡瀹屾垚
+          emit("completed");
+          proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
+        });
       }
-      if (!formState.value.bomId) {
-        proxy.$modal.msgError("璇烽�夋嫨BOM");
-        return;
-      }
-      add(formState.value).then(res => {
-        // 鍏抽棴妯℃�佹
-        isShow.value = false;
-        // 鍛婄煡鐖剁粍浠跺凡瀹屾垚
-        emit('completed');
-        proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
-      })
-    }
-  })
-};
+    });
+  };
 
-
-defineExpose({
-  closeModal,
-  handleSubmit,
-  isShow,
-});
+  defineExpose({
+    closeModal,
+    handleSubmit,
+    isShow,
+  });
 </script>
diff --git a/src/views/productionManagement/processRoute/index.vue b/src/views/productionManagement/processRoute/index.vue
index 0d1bb14..3a8acc5 100644
--- a/src/views/productionManagement/processRoute/index.vue
+++ b/src/views/productionManagement/processRoute/index.vue
@@ -1,191 +1,193 @@
 <template>
   <div class="app-container">
     <div class="search_form">
-      <el-form :model="searchForm" :inline="true">
+      <el-form :model="searchForm"
+               :inline="true">
         <el-form-item label="瑙勬牸鍚嶇О:">
-          <el-input v-model="searchForm.model" placeholder="璇疯緭鍏�" clearable prefix-icon="Search"
+          <el-input v-model="searchForm.model"
+                    placeholder="璇疯緭鍏�"
+                    clearable
+                    prefix-icon="Search"
                     style="width: 200px;"
                     @change="handleQuery" />
         </el-form-item>
         <el-form-item>
-          <el-button type="primary" @click="handleQuery">鎼滅储</el-button>
+          <el-button type="primary"
+                     @click="handleQuery">鎼滅储</el-button>
         </el-form-item>
       </el-form>
     </div>
     <div class="table_list">
-      <div style="text-align: right" class="mb10">
-        <el-button type="primary" @click="showNewModal">鏂板宸ヨ壓璺嚎</el-button>
-        <el-button type="danger" @click="handleDelete" :disabled="selectedRows.length === 0" plain>鍒犻櫎宸ヨ壓璺嚎</el-button>
+      <div style="text-align: right"
+           class="mb10">
+        <el-button type="primary"
+                   @click="showNewModal">鏂板宸ヨ壓璺嚎</el-button>
+        <el-button type="danger"
+                   @click="handleDelete"
+                   :disabled="selectedRows.length === 0"
+                   plain>鍒犻櫎宸ヨ壓璺嚎</el-button>
       </div>
-      <PIMTable
-          rowKey="id"
-          :column="tableColumn"
-          :tableData="tableData"
-          :page="page"
-          :isSelection="true"
-          @selection-change="handleSelectionChange"
-          :tableLoading="tableLoading"
-          @pagination="pagination"
-          :total="page.total"
-      />
+      <PIMTable rowKey="id"
+                :column="tableColumn"
+                :tableData="tableData"
+                :page="page"
+                :isSelection="true"
+                @selection-change="handleSelectionChange"
+                :tableLoading="tableLoading"
+                @pagination="pagination"
+                :total="page.total" />
     </div>
-    <new-process
-        v-if="isShowNewModal"
-        v-model:visible="isShowNewModal"
-        @completed="getList"
-    />
-
-    <edit-process
-        v-if="isShowEditModal"
-        v-model:visible="isShowEditModal"
-        :record="record"
-        @completed="getList"
-    />
-
-    <route-item-form
-        v-if="isShowItemModal"
-        v-model:visible="isShowItemModal"
-        :record="record"
-        @completed="getList"
-    />
+    <new-process v-if="isShowNewModal"
+                 v-model:visible="isShowNewModal"
+                 @completed="getList" />
+    <edit-process v-if="isShowEditModal"
+                  v-model:visible="isShowEditModal"
+                  :record="record"
+                  @completed="getList" />
+    <route-item-form v-if="isShowItemModal"
+                     v-model:visible="isShowItemModal"
+                     :record="record"
+                     @completed="getList" />
   </div>
 </template>
 
 <script setup>
-import {onMounted, ref} from "vue";
-import NewProcess from "@/views/productionManagement/processRoute/New.vue";
-import EditProcess from "@/views/productionManagement/processRoute/Edit.vue";
-import RouteItemForm from "@/views/productionManagement/processRoute/ItemsForm.vue";
-import {listPage, del} from "@/api/productionManagement/processRoute.js";
-import { useRouter } from 'vue-router'
+  import { onMounted, ref } from "vue";
+  import NewProcess from "@/views/productionManagement/processRoute/New.vue";
+  import EditProcess from "@/views/productionManagement/processRoute/Edit.vue";
+  import RouteItemForm from "@/views/productionManagement/processRoute/ItemsForm.vue";
+  import { listPage, del } from "@/api/productionManagement/processRoute.js";
+  import { useRouter } from "vue-router";
 
-const router = useRouter()
-const data = reactive({
-  searchForm: {
-    model: "",
-  },
-});
-const { searchForm } = toRefs(data);
-const tableColumn = ref([
-  {
-    label: "宸ヨ壓璺嚎缂栧彿",
-    prop: "processRouteCode",
-  },
-  {
-    label: "浜у搧鍚嶇О",
-    prop: "productName",
-  },
-  {
-    label: "瑙勬牸鍚嶇О",
-    prop: "model",
-  },
-  {
-    label: "BOM缂栧彿",
-    prop: "bomNo",
-  },
-  {
-    label: "鎻忚堪",
-    prop: "description",
-  },
-  {
-    dataType: "action",
-    label: "鎿嶄綔",
-    align: "center",
-    fixed: "right",
-    width: 280,
-    operation: [
-      {
-        name: "缂栬緫",
-        type: "text",
-        clickFun: (row) => {
-          showEditModal(row);
-        }
+  const router = useRouter();
+  const data = reactive({
+    searchForm: {
+      model: "",
+    },
+  });
+  const { searchForm } = toRefs(data);
+  const tableColumn = ref([
+    {
+      label: "宸ヨ壓璺嚎缂栧彿",
+      prop: "processRouteCode",
+    },
+    {
+      label: "浜у搧鍚嶇О",
+      prop: "productName",
+    },
+    {
+      label: "瑙勬牸鍚嶇О",
+      prop: "model",
+    },
+    {
+      label: "BOM缂栧彿",
+      prop: "bomNo",
+    },
+    {
+      label: "鎻忚堪",
+      prop: "description",
+    },
+    {
+      dataType: "action",
+      label: "鎿嶄綔",
+      align: "center",
+      fixed: "right",
+      width: 280,
+      operation: [
+        {
+          name: "缂栬緫",
+          type: "text",
+          clickFun: row => {
+            showEditModal(row);
+          },
+        },
+        {
+          name: "璺嚎椤圭洰",
+          type: "text",
+          clickFun: row => {
+            showItemModal(row);
+          },
+        },
+      ],
+    },
+  ]);
+  const tableData = ref([]);
+  const selectedRows = ref([]);
+  const tableLoading = ref(false);
+  const isShowNewModal = ref(false);
+  const isShowEditModal = ref(false);
+  const isShowItemModal = ref(false);
+  const record = ref({});
+  const page = reactive({
+    current: 1,
+    size: 100,
+    total: 0,
+  });
+  const { proxy } = getCurrentInstance();
+
+  // 鏌ヨ鍒楄〃
+  /** 鎼滅储鎸夐挳鎿嶄綔 */
+  const handleQuery = () => {
+    page.current = 1;
+    getList();
+  };
+
+  const pagination = obj => {
+    page.current = obj.page;
+    page.size = obj.limit;
+    getList();
+  };
+  const getList = () => {
+    tableLoading.value = true;
+    const params = { ...searchForm.value, ...page };
+    params.entryDate = undefined;
+    listPage(params)
+      .then(res => {
+        tableLoading.value = false;
+        tableData.value = res.data.records.map(item => ({
+          ...item,
+        }));
+        page.total = res.data.total;
+      })
+      .catch(err => {
+        tableLoading.value = false;
+      });
+  };
+  // 琛ㄦ牸閫夋嫨鏁版嵁
+  const handleSelectionChange = selection => {
+    selectedRows.value = selection;
+  };
+
+  // 鎵撳紑鏂板寮规
+  const showNewModal = () => {
+    isShowNewModal.value = true;
+  };
+
+  const showEditModal = row => {
+    isShowEditModal.value = true;
+    record.value = row;
+  };
+
+  const showItemModal = row => {
+    router.push({
+      path: "/productionManagement/processRouteItem",
+      query: {
+        id: row.id,
+        processRouteCode: row.processRouteCode || "",
+        productName: row.productName || "",
+        model: row.model || "",
+        bomNo: row.bomNo || "",
+        description: row.description || "",
+        type: "route",
       },
-      {
-        name: "璺嚎椤圭洰",
-        type: "text",
-        clickFun: (row) => {
-          showItemModal(row);
-        }
-      }
-    ]
-  }
-]);
-const tableData = ref([]);
-const selectedRows = ref([]);
-const tableLoading = ref(false);
-const isShowNewModal = ref(false);
-const isShowEditModal = ref(false);
-const isShowItemModal = ref(false);
-const record = ref({});
-const page = reactive({
-  current: 1,
-  size: 100,
-  total: 0,
-});
-const { proxy } = getCurrentInstance()
+    });
+  };
 
-// 鏌ヨ鍒楄〃
-/** 鎼滅储鎸夐挳鎿嶄綔 */
-const handleQuery = () => {
-  page.current = 1;
-  getList();
-};
-
-const pagination = (obj) => {
-  page.current = obj.page;
-  page.size = obj.limit;
-  getList();
-};
-const getList = () => {
-  tableLoading.value = true;
-  const params = { ...searchForm.value, ...page };
-  params.entryDate = undefined
-  listPage(params).then(res => {
-    tableLoading.value = false;
-    tableData.value = res.data.records.map(item => ({
-      ...item,
-    }));
-    page.total = res.data.total;
-  }).catch(err => {
-    tableLoading.value = false;
-  })
-};
-// 琛ㄦ牸閫夋嫨鏁版嵁
-const handleSelectionChange = (selection) => {
-  selectedRows.value = selection;
-};
-
-// 鎵撳紑鏂板寮规
-const showNewModal = () => {
-  isShowNewModal.value = true
-};
-
-const showEditModal = (row) => {
-  isShowEditModal.value = true
-  record.value = row
-};
-
-const showItemModal = (row) => {
-  router.push({
-    path: '/productionManagement/processRouteItem',
-    query: {
-      id: row.id,
-      processRouteCode: row.processRouteCode || '',
-      productName: row.productName || '',
-      model: row.model || '',
-      bomNo: row.bomNo || '',
-      description: row.description || '',
-      type: 'route',
-    }
-  })
-};
-
-// 鍒犻櫎
-function handleDelete() {
-  const ids = selectedRows.value.map((item) => item.id);
-  proxy.$modal
-      .confirm('鏄惁纭鍒犻櫎宸插嬀閫夌殑鏁版嵁椤癸紵')
+  // 鍒犻櫎
+  function handleDelete() {
+    const ids = selectedRows.value.map(item => item.id);
+    proxy.$modal
+      .confirm("鏄惁纭鍒犻櫎宸插嬀閫夌殑鏁版嵁椤癸紵")
       .then(function () {
         return del(ids);
       })
@@ -194,15 +196,15 @@
         proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛");
       })
       .catch(() => {});
-}
+  }
 
-onMounted(() => {
-  getList();
-});
+  onMounted(() => {
+    getList();
+  });
 </script>
 
 <style scoped>
-.table_list {
-	margin-top: unset;
-}
+  .table_list {
+    margin-top: unset;
+  }
 </style>
diff --git a/src/views/productionManagement/processRoute/processRouteItem/index.vue b/src/views/productionManagement/processRoute/processRouteItem/index.vue
index be7138d..c310b45 100644
--- a/src/views/productionManagement/processRoute/processRouteItem/index.vue
+++ b/src/views/productionManagement/processRoute/processRouteItem/index.vue
@@ -77,10 +77,10 @@
                        width="60"
                        type="index" />
       <el-table-column label="宸ュ簭鍚嶇О"
-                       prop="processId"
+                       prop="technologyOperationId"
                        width="200">
         <template #default="scope">
-          {{ getProcessName(scope.row.processId) || '-' }}
+          {{ getProcessName(scope.row.technologyOperationId) || '-' }}
         </template>
       </el-table-column>
       <el-table-column label="鍙傛暟鍒楄〃"
@@ -151,7 +151,7 @@
             <!-- 搴忓彿鍦嗗湀 -->
             <div class="card-header">
               <div class="card-number">{{ index + 1 }}</div>
-              <div class="card-process-name">{{ getProcessName(item.processId) || '-' }}</div>
+              <div class="card-process-name">{{ getProcessName(item.technologyOperationId) || '-' }}</div>
             </div>
             <!-- 浜у搧淇℃伅 -->
             <div class="card-content">
@@ -191,168 +191,6 @@
         </div>
       </div>
     </template>
-    <div class="section-BOM">
-      <div class="section-header">
-        <div class="section-title">BOM</div>
-        <div class="section-actions">
-          <el-button type="primary"
-                     @click="toggleBomEdit">
-            {{ bomDataValue.isEdit ? '鍙栨秷' : '缂栬緫' }}
-          </el-button>
-          <el-button v-if=" bomDataValue.isEdit"
-                     type="success"
-                     @click="saveBomChanges">淇濆瓨</el-button>
-        </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-form ref="bomFormRef"
-                       :model="bomDataValue">
-                <el-table :data="props.row.bomList"
-                          row-key="tempId"
-                          default-expand-all
-                          :tree-props="{children: 'children', hasChildren: 'hasChildren'}"
-                          style="width: 100%">
-                  <el-table-column prop="productName"
-                                   label="浜у搧" />
-                  <el-table-column prop="model"
-                                   label="瑙勬牸">
-                    <template #default="{ row }">
-                      <el-form-item v-if="bomDataValue.isEdit"
-                                    :rules="[{ required: true, message: '璇烽�夋嫨瑙勬牸', trigger: ['blur','change'] }]"
-                                    style="margin: 0">
-                        <el-select v-model="row.model"
-                                   placeholder="璇烽�夋嫨瑙勬牸"
-                                   clearable
-                                   :disabled="!bomDataValue.isEdit"
-                                   style="width: 100%"
-                                   @visible-change="(v) => { if (v) openBomProductDialog(row.tempId) }">
-                          <el-option v-if="row.model"
-                                     :label="row.model"
-                                     :value="row.model" />
-                        </el-select>
-                      </el-form-item>
-                      <span v-else>{{ row.model }}</span>
-                    </template>
-                  </el-table-column>
-                  <el-table-column prop="processName"
-                                   label="娑堣�楀伐搴�">
-                    <template #default="{ row }">
-                      <el-form-item v-if="bomDataValue.isEdit"
-                                    :rules="[{ required: true, message: '璇烽�夋嫨娑堣�楀伐搴�', trigger: 'change' }]"
-                                    style="margin: 0">
-                        <el-select v-model="row.processId"
-                                   placeholder="璇烽�夋嫨"
-                                   filterable
-                                   clearable
-                                   :disabled="!bomDataValue.isEdit"
-                                   style="width: 100%">
-                          <el-option v-for="process in processOptions"
-                                     :key="process.id"
-                                     :label="process.name"
-                                     :value="process.id" />
-                        </el-select>
-                      </el-form-item>
-                      <span v-else>{{ row.processName }}</span>
-                    </template>
-                  </el-table-column>
-                  <el-table-column prop="unitQuantity"
-                                   label="鍗曚綅浜у嚭鎵�闇�鏁伴噺">
-                    <template #default="{ row }">
-                      <el-form-item v-if="bomDataValue.isEdit"
-                                    :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="!bomDataValue.isEdit" />
-                      </el-form-item>
-                      <span v-else>{{ row.unitQuantity }}</span>
-                    </template>
-                  </el-table-column>
-                  <el-table-column v-if="pageType === 'order'"
-                                   prop="demandedQuantity"
-                                   label="闇�姹傛�婚噺">
-                    <template #default="{ row }">
-                      <el-form-item v-if="bomDataValue.isEdit"
-                                    :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="!bomDataValue.isEdit" />
-                      </el-form-item>
-                      <span v-else>{{ row.demandedQuantity }}</span>
-                    </template>
-                  </el-table-column>
-                  <el-table-column prop="unit"
-                                   label="鍗曚綅">
-                    <template #default="{ row }">
-                      <el-form-item v-if="bomDataValue.isEdit"
-                                    :rules="[{ required: true, message: '璇疯緭鍏ュ崟浣�', trigger: ['blur','change'] }]"
-                                    style="margin: 0">
-                        <el-input v-model="row.unit"
-                                  placeholder="璇疯緭鍏ュ崟浣�"
-                                  clearable
-                                  :disabled="!bomDataValue.isEdit" />
-                      </el-form-item>
-                      <span v-else>{{ row.unit }}</span>
-                    </template>
-                  </el-table-column>
-                  <el-table-column label="鎿嶄綔"
-                                   fixed="right"
-                                   width="180">
-                    <template #default="{ row }">
-                      <el-button v-if="bomDataValue.isEdit"
-                                 type="danger"
-                                 text
-                                 size="small"
-                                 @click="removeBomItem(row.tempId)">鍒犻櫎</el-button>
-                      <el-button v-if="bomDataValue.isEdit"
-                                 type="primary"
-                                 text
-                                 size="small"
-                                 @click="addBomItem2(row.tempId)">娣诲姞瀛愰」</el-button>
-                    </template>
-                  </el-table-column>
-                </el-table>
-              </el-form>
-            </template>
-          </el-table-column>
-          <el-table-column label="BOM缂栧彿"
-                           prop="bomNo" />
-          <el-table-column label="浜у搧鍚嶇О"
-                           prop="productName" />
-          <el-table-column label="瑙勬牸鍨嬪彿"
-                           prop="model" />
-        </el-table>
-        <!-- <div v-if="bomDataValue.isEdit"
-             style="text-align: center;border: 1px solid #e4e7ed;padding: 10px;transition: all 0.3s ease;cursor: pointer;"
-             :class="{'hover-effect': bomDataValue.isEdit}">
-          <el-button type="primary"
-                     text
-                     @click="addBomItem">
-            <el-icon style="vertical-align: middle;margin-right: 5px;">
-              <Plus />
-            </el-icon>
-            娣诲姞
-          </el-button>
-        </div> -->
-      </div>
-    </div>
     <!-- 鏂板/缂栬緫寮圭獥 -->
     <el-dialog v-model="dialogVisible"
                :title="operationType === 'add' ? '鏂板宸ヨ壓璺嚎椤圭洰' : '缂栬緫宸ヨ壓璺嚎椤圭洰'"
@@ -363,8 +201,8 @@
                :rules="rules"
                label-width="120px">
         <el-form-item label="宸ュ簭"
-                      prop="processId">
-          <el-select v-model="form.processId"
+                      prop="technologyOperationId">
+          <el-select v-model="form.technologyOperationId"
                      placeholder="璇烽�夋嫨宸ュ簭"
                      clearable
                      style="width: 100%">
@@ -408,19 +246,16 @@
     <ProductSelectDialog v-model="showProductSelectDialog"
                          @confirm="handleProductSelect"
                          single />
-    <!-- BOM浜у搧閫夋嫨瀵硅瘽妗� -->
-    <ProductSelectDialog v-model="bomDataValue.showProductDialog"
-                         @confirm="handleBomProductSelect"
-                         single />
     <!-- 鍙傛暟鍒楄〃瀵硅瘽妗� -->
     <!-- :editable="!routeInfo.status" -->
     <ProcessParamListDialog v-model="showParamListDialog"
-                            :title="`${currentProcess ? (currentProcess.processName || getProcessName(currentProcess.processId)) : ''} - 鍙傛暟鍒楄〃`"
+                            :title="`${currentProcess ? (currentProcess.processName || getProcessName(currentProcess.technologyOperationId)) : ''} - 鍙傛暟鍒楄〃`"
                             :route-id="routeId"
                             :order-id="orderId"
                             :process="currentProcess"
                             :page-type="pageType"
                             :param-list="paramList"
+                            @getsyncProcessParamItem="getsyncProcessParamItem"
                             @refresh="refreshParamList" />
   </div>
 </template>
@@ -439,10 +274,12 @@
   import {
     findProcessRouteItemList,
     addOrUpdateProcessRouteItem,
+    addOrUpdateProcessRouteItem1,
     sortProcessRouteItem,
     batchDeleteProcessRouteItem,
     getProcessParamList,
   } from "@/api/productionManagement/processRouteItem.js";
+  import { syncProcessParamItem } from "@/api/productionManagement/processRouteItem.js";
   import {
     findProductProcessRouteItemList,
     deleteRouteItem,
@@ -452,11 +289,6 @@
     sortRouteItem,
   } from "@/api/productionManagement/productProcessRoute.js";
   import { processList } from "@/api/productionManagement/productionProcess.js";
-  import {
-    queryList2,
-    queryList,
-    add2,
-  } from "@/api/productionManagement/productStructure.js";
   import { useRoute } from "vue-router";
   import { ElMessageBox, ElMessage } from "element-plus";
   import Sortable from "sortablejs";
@@ -490,15 +322,6 @@
   const showParamListDialog = ref(false);
   const currentProcess = ref(null);
   const paramList = ref([]);
-  const bomTableData = ref([]);
-  const bomFormRef = ref(null);
-  const bomDataValue = ref({
-    dataList: [],
-    showProductDialog: false,
-    currentRowName: null,
-    loading: false,
-    isEdit: false,
-  });
   let tableSortable = null;
   let cardSortable = null;
 
@@ -514,7 +337,7 @@
   const form = ref({
     id: undefined,
     routeId: routeId.value,
-    processId: undefined,
+    technologyOperationId: undefined,
     productModelId: undefined,
     productName: "",
     model: "",
@@ -523,16 +346,42 @@
   });
 
   const rules = {
-    processId: [{ required: true, message: "璇烽�夋嫨宸ュ簭", trigger: "change" }],
+    technologyOperationId: [
+      { required: true, message: "璇烽�夋嫨宸ュ簭", trigger: "change" },
+    ],
     productModelId: [
       { required: true, message: "璇烽�夋嫨浜у搧", trigger: "change" },
     ],
   };
 
+  const getsyncProcessParamItem = () => {
+    ElMessageBox.confirm("鏄惁瑕嗙洊褰撳墠宸ュ簭宸插瓨鍦ㄥ弬鏁帮紵", "鎻愮ず", {
+      confirmButtonText: "纭畾",
+      cancelButtonText: "鍙栨秷",
+      type: "warning",
+    })
+      .then(() => {
+        syncProcessParamItem({
+          replaceExisting: true,
+          technologyRoutingOperationId: currentProcess.value.id,
+        }).then(res => {
+          if (res.code === 200) {
+            ElMessage.success("鍚屾鎴愬姛");
+            refreshParamList();
+          } else {
+            ElMessage.error(res.msg || "鍚屾澶辫触");
+          }
+        });
+      })
+      .catch(() => {});
+  };
+
   // 鏍规嵁宸ュ簭ID鑾峰彇宸ュ簭鍚嶇О
-  const getProcessName = processId => {
-    if (!processId) return "";
-    const process = processOptions.value.find(p => p.id === processId);
+  const getProcessName = technologyOperationId => {
+    if (!technologyOperationId) return "";
+    const process = processOptions.value.find(
+      p => p.id === technologyOperationId
+    );
     return process ? process.name : "";
   };
 
@@ -562,9 +411,9 @@
 
   // 鑾峰彇宸ュ簭鍒楄〃
   const getProcessList = () => {
-    processList({})
+    processList({ size: -1, current: -1 })
       .then(res => {
-        processOptions.value = res.data || [];
+        processOptions.value = res.data.records || [];
       })
       .catch(err => {
         console.error("鑾峰彇宸ュ簭澶辫触锛�", err);
@@ -581,73 +430,6 @@
       description: route.query.description || "",
       status: !(route.query.status == 1 || route.query.status === "false"),
     };
-    if (pageType.value === "order") {
-      queryList2(route.query.orderId)
-        .then(res => {
-          if (res.data) {
-            // 涓築OM鏁版嵁璁剧疆tempId
-            const setTempIdRecursively = items => {
-              items.forEach(item => {
-                item.tempId = item.id || new Date().getTime();
-                if (item.children && item.children.length > 0) {
-                  setTempIdRecursively(item.children);
-                }
-              });
-            };
-            setTempIdRecursively(res.data);
-
-            bomTableData.value = [
-              {
-                bomNo: routeInfo.value.bomNo,
-                dictLabel: routeInfo.value.dictLabel,
-                productCode: "",
-                productName: routeInfo.value.productName,
-                model: routeInfo.value.model,
-                bomList: res.data,
-              },
-            ];
-
-            // 淇濆瓨鍘熷BOM鏁版嵁
-            bomDataValue.value.dataList = res.data;
-          }
-        })
-        .catch(err => {
-          console.error("鑾峰彇BOM鏁版嵁澶辫触锛�", err);
-        });
-    } else {
-      queryList(Number(route.query.bomId))
-        .then(res => {
-          if (res.data) {
-            // 涓築OM鏁版嵁璁剧疆tempId
-            const setTempIdRecursively = items => {
-              items.forEach(item => {
-                item.tempId = item.id || new Date().getTime();
-                if (item.children && item.children.length > 0) {
-                  setTempIdRecursively(item.children);
-                }
-              });
-            };
-            setTempIdRecursively(res.data);
-
-            bomTableData.value = [
-              {
-                bomNo: routeInfo.value.bomNo,
-                dictLabel: routeInfo.value.dictLabel,
-                productCode: "",
-                productName: routeInfo.value.productName,
-                model: routeInfo.value.model,
-                bomList: res.data,
-              },
-            ];
-
-            // 淇濆瓨鍘熷BOM鏁版嵁
-            bomDataValue.value.dataList = res.data;
-          }
-        })
-        .catch(err => {
-          console.error("鑾峰彇BOM鏁版嵁澶辫触锛�", err);
-        });
-    }
   };
 
   // 鏂板
@@ -663,7 +445,7 @@
     form.value = {
       id: row.id,
       routeId: routeId.value,
-      processId: row.processId,
+      technologyOperationId: row.technologyOperationId,
       productModelId: row.productModelId,
       productName: row.productName || "",
       model: row.model || "",
@@ -729,14 +511,14 @@
             ? addRouteItem({
                 productOrderId: orderId.value,
                 productRouteId: routeId.value,
-                processId: form.value.processId,
+                technologyOperationId: form.value.technologyOperationId,
                 productModelId: form.value.productModelId,
                 isQuality: form.value.isQuality,
                 dragSort,
               })
             : addOrUpdateProcessRouteItem({
-                routeId: routeId.value,
-                processId: form.value.processId,
+                technologyRoutingId: Number(routeId.value),
+                technologyOperationId: form.value.technologyOperationId,
                 productModelId: form.value.productModelId,
                 isQuality: form.value.isQuality,
                 dragSort,
@@ -761,13 +543,13 @@
           const updatePromise = isOrderPage
             ? addOrUpdateProductProcessRouteItem({
                 id: form.value.id,
-                processId: form.value.processId,
+                technologyOperationId: form.value.technologyOperationId,
                 productModelId: form.value.productModelId,
                 isQuality: form.value.isQuality,
               })
-            : addOrUpdateProcessRouteItem({
-                routeId: routeId.value,
-                processId: form.value.processId,
+            : addOrUpdateProcessRouteItem1({
+                technologyRoutingId: Number(routeId.value),
+                technologyOperationId: form.value.technologyOperationId,
                 productModelId: form.value.productModelId,
                 id: form.value.id,
                 isQuality: form.value.isQuality,
@@ -795,7 +577,7 @@
     form.value = {
       id: undefined,
       routeId: routeId.value,
-      processId: undefined,
+      technologyOperationId: undefined,
       productModelId: undefined,
       productName: "",
       model: "",
@@ -839,231 +621,6 @@
     if (currentProcess.value) {
       handleViewParams(currentProcess.value);
     }
-  };
-
-  // BOM鐩稿叧鏂规硶
-  // 鍒囨崲BOM缂栬緫妯″紡
-  const toggleBomEdit = () => {
-    bomDataValue.value.isEdit = !bomDataValue.value.isEdit;
-    if (!bomDataValue.value.isEdit) {
-      // 鍙栨秷缂栬緫鏃堕噸鏂板姞杞芥暟鎹�
-      getRouteInfo();
-    }
-  };
-
-  // 娣诲姞BOM椤�
-  const addBomItem = () => {
-    if (bomTableData.value.length > 0) {
-      const newItem = {
-        parentId: "",
-        parentTempId: "",
-        productName: "",
-        productId: "",
-        model: undefined,
-        productModelId: undefined,
-        processId: "",
-        processName: "",
-        unitQuantity: 0,
-        demandedQuantity: 0,
-        unit: "",
-        children: [],
-        tempId: new Date().getTime(),
-      };
-      bomTableData.value[0].bomList.push(newItem);
-    }
-  };
-
-  // 娣诲姞BOM瀛愰」
-  const addBomItem2 = tempId => {
-    const addChildItem = (items, tempId) => {
-      for (let i = 0; i < items.length; i++) {
-        const item = items[i];
-        if (item.tempId === tempId) {
-          if (!item.children) {
-            item.children = [];
-          }
-          item.children.push({
-            parentId: item.id || "",
-            parentTempId: item.tempId || "",
-            productName: "",
-            productId: "",
-            model: undefined,
-            productModelId: undefined,
-            processId: "",
-            processName: "",
-            unitQuantity: 0,
-            demandedQuantity: 0,
-            unit: "",
-            children: [],
-            tempId: new Date().getTime(),
-          });
-          return true;
-        }
-        if (item.children && item.children.length > 0) {
-          if (addChildItem(item.children, tempId)) {
-            return true;
-          }
-        }
-      }
-      return false;
-    };
-
-    if (bomTableData.value.length > 0) {
-      addChildItem(bomTableData.value[0].bomList, tempId);
-    }
-  };
-
-  // 鍒犻櫎BOM椤�
-  const removeBomItem = tempId => {
-    if (bomTableData.value.length > 0) {
-      const removeFromList = (items, tempId) => {
-        for (let i = 0; i < items.length; i++) {
-          const item = items[i];
-          if (item.tempId === tempId) {
-            items.splice(i, 1);
-            return true;
-          }
-          if (item.children && item.children.length > 0) {
-            if (removeFromList(item.children, tempId)) {
-              return true;
-            }
-          }
-        }
-        return false;
-      };
-      removeFromList(bomTableData.value[0].bomList, tempId);
-    }
-  };
-
-  // 鎵撳紑BOM浜у搧閫夋嫨瀵硅瘽妗�
-  const openBomProductDialog = tempId => {
-    bomDataValue.value.currentRowName = tempId;
-    bomDataValue.value.showProductDialog = true;
-  };
-
-  // 澶勭悊BOM浜у搧閫夋嫨
-  const handleBomProductSelect = products => {
-    if (products && products.length > 0) {
-      const product = products[0];
-      const updateProductInfo = (items, tempId, productData) => {
-        for (let i = 0; i < items.length; i++) {
-          const item = items[i];
-          if (item.tempId === tempId) {
-            item.productName = productData.productName;
-            item.model = productData.model;
-            item.productModelId = productData.id;
-            item.unit = productData.unit || "";
-            return true;
-          }
-          if (item.children && item.children.length > 0) {
-            if (updateProductInfo(item.children, tempId, productData)) {
-              return true;
-            }
-          }
-        }
-        return false;
-      };
-
-      if (bomTableData.value.length > 0) {
-        updateProductInfo(
-          bomTableData.value[0].bomList,
-          bomDataValue.value.currentRowName,
-          product
-        );
-      }
-      bomDataValue.value.showProductDialog = false;
-    }
-  };
-
-  // 淇濆瓨BOM鏇存敼
-  const saveBomChanges = () => {
-    const validateBomData = (items, isTopLevel = false) => {
-      for (let i = 0; i < items.length; i++) {
-        const item = items[i];
-        if (!item.productModelId) {
-          ElMessage.error("璇烽�夋嫨浜у搧");
-          return false;
-        }
-        if (!isTopLevel && !item.processId) {
-          ElMessage.error("璇烽�夋嫨娑堣�楀伐搴�");
-          return false;
-        }
-        if (
-          item.unitQuantity === undefined ||
-          item.unitQuantity === null ||
-          item.unitQuantity === 0
-        ) {
-          ElMessage.error("璇峰~鍐欏崟浣嶄骇鍑烘墍闇�鏁伴噺");
-          return false;
-        }
-        if (
-          pageType.value === "order" &&
-          (item.demandedQuantity === undefined ||
-            item.demandedQuantity === null ||
-            item.demandedQuantity === 0)
-        ) {
-          ElMessage.error("璇疯緭鍏ラ渶姹傛�婚噺");
-          return false;
-        }
-        if (item.children && item.children.length > 0) {
-          if (!validateBomData(item.children, false)) {
-            return false;
-          }
-        }
-      }
-      return true;
-    };
-
-    if (bomTableData.value.length > 0) {
-      if (!validateBomData(bomTableData.value[0].bomList, true)) {
-        return;
-      }
-    }
-
-    const processBomItem = (item, parentId = null, parentTempId = null) => {
-      const cleanItem = {
-        id: item.id || null,
-        orderId: Number(orderId.value) || null,
-        parentId: parentId,
-        parentTempId: parentTempId || null,
-        productModelId: item.productModelId || null,
-        processId: item.processId || null,
-        unitQuantity: item.unitQuantity || 0,
-        demandedQuantity: item.demandedQuantity || 0,
-        unit: item.unit || "",
-        tempId: item.tempId || new Date().getTime(),
-        bomId: Number(route.query.bomId) || null,
-        children: [],
-      };
-
-      if (item.children && item.children.length > 0) {
-        cleanItem.children = item.children.map(child =>
-          processBomItem(child, item.id, item.tempId)
-        );
-      }
-
-      return cleanItem;
-    };
-
-    const saveData = {
-      orderId: Number(orderId.value),
-      bomId: Number(route.query.bomId),
-      children: bomTableData.value[0].bomList.map(item => processBomItem(item)),
-    };
-
-    const savePromise =
-      pageType.value === "order" ? add2(saveData) : add(saveData);
-
-    savePromise
-      .then(() => {
-        proxy?.$modal?.msgSuccess("淇濆瓨鎴愬姛");
-        bomDataValue.value.isEdit = false;
-        getRouteInfo();
-      })
-      .catch(err => {
-        console.error("淇濆瓨BOM澶辫触锛�", err);
-        proxy?.$modal?.msgError("淇濆瓨澶辫触");
-      });
   };
 
   // 鍒濆鍖栨嫋鎷芥帓搴�
@@ -1470,16 +1027,5 @@
     font-weight: 500;
     line-height: 1.5;
     word-break: break-all;
-  }
-
-  .section-BOM {
-    margin-top: 20px;
-  }
-
-  .hover-effect:hover {
-    border-color: #409eff;
-    background-color: #ecf5ff;
-    transform: translateY(-2px);
-    box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
   }
 </style>
diff --git a/src/views/productionManagement/productStructure/Detail/index.vue b/src/views/productionManagement/productStructure/Detail/index.vue
index 6fbe21b..5787c5d 100644
--- a/src/views/productionManagement/productStructure/Detail/index.vue
+++ b/src/views/productionManagement/productStructure/Detail/index.vue
@@ -163,7 +163,10 @@
     reactive,
     ref,
   } from "vue";
-  import { queryList, addBomDetail } from "@/api/productionManagement/productStructure.js";
+  import {
+    queryList,
+    addBomDetail,
+  } from "@/api/productionManagement/productStructure.js";
   import { listProcessBom } from "@/api/productionManagement/productionOrder.js";
   import { list } from "@/api/productionManagement/productionProcess";
   import { ElMessage } from "element-plus";
@@ -228,9 +231,11 @@
     if (id === undefined || id === null || id === "") {
       return null;
     }
-    return normalizeListData(dataValue.processOptions).find(
-      option => String(option.id) === String(id)
-    ) || null;
+    return (
+      normalizeListData(dataValue.processOptions).find(
+        option => String(option.id) === String(id)
+      ) || null
+    );
   };
 
   const syncProcessOperationFields = (item: any) => {
@@ -502,7 +507,7 @@
           processName: "",
           operationId: "",
           operationName: "",
-          unitQuantity: 0,
+          unitQuantity: 1,
           demandedQuantity: 0,
           unit: "",
           children: [],
@@ -531,7 +536,7 @@
         processName: "",
         operationId: "",
         operationName: "",
-        unitQuantity: 0,
+        unitQuantity: 1,
         demandedQuantity: 0,
         children: [],
         unit: "",
diff --git a/src/views/productionManagement/productionProcess/index.vue b/src/views/productionManagement/productionProcess/index.vue
index e4a1348..ae1732f 100644
--- a/src/views/productionManagement/productionProcess/index.vue
+++ b/src/views/productionManagement/productionProcess/index.vue
@@ -44,7 +44,7 @@
             <div class="card-body">
               <!-- <div class="process-name">{{ process.name }}</div> -->
               <div class="process-desc">{{ process.remark || '鏆傛棤鎻忚堪' }}</div>
-              <div class="process-device">鍏宠仈璁惧: {{ deviceOptions.find(item => item.id === Number(process.deviceLedgerId)).deviceName|| '鏈叧鑱�' }}</div>
+              <div class="process-device">鍏宠仈璁惧: {{ deviceOptions.find(item => item.id === Number(process.deviceLedgerId))?.deviceName|| '鏈叧鑱�' }}</div>
             </div>
             <div class="card-footer">
               <div class="status-tag">
@@ -453,6 +453,10 @@
     getProcessListApi({ size: -1, current: -1 })
       .then(res => {
         processValueList.value = res.data.records || [];
+        console.log(
+          processValueList.value,
+          "reprocessValueList.value==========s"
+        );
       })
       .catch(() => {
         ElMessage.error("鑾峰彇宸ュ簭鍒楄〃澶辫触");

--
Gitblit v1.9.3