From 1455e8a5dcea2209b4d1baf4d513aa8fbfb2b39b Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期五, 08 五月 2026 17:44:45 +0800
Subject: [PATCH] 隐藏新财务模块

---
 src/views/productionManagement/productStructure/Detail/index.vue |  153 +++++++++++++++++++++++++++++++++-----------------
 1 files changed, 100 insertions(+), 53 deletions(-)

diff --git a/src/views/productionManagement/productStructure/Detail/index.vue b/src/views/productionManagement/productStructure/Detail/index.vue
index 9f8ad51..750d584 100644
--- a/src/views/productionManagement/productStructure/Detail/index.vue
+++ b/src/views/productionManagement/productStructure/Detail/index.vue
@@ -1,6 +1,6 @@
 <template>
-  <div :class="embedded ? 'embedded-container' : 'app-container'">
-    <PageHeader v-if="!embedded" content="浜у搧缁撴瀯璇︽儏">
+  <div class="app-container">
+    <PageHeader content="浜у搧缁撴瀯璇︽儏">
       <template #right-button>
         <el-button v-if="!dataValue.isEdit && !isOrderPage"
                    type="primary"
@@ -64,6 +64,7 @@
                                filterable
                                clearable
                                style="width: 100%"
+                               @change="value => handleProcessChange(row, value)"
                                :disabled="!dataValue.isEdit || dataValue.dataList.some(item => (item as any).tempId === row.tempId)">
                       <el-option v-for="item in dataValue.processOptions"
                                  :key="item.id"
@@ -148,6 +149,7 @@
     </el-table>
     <product-select-dialog v-if="dataValue.showProductDialog"
                            v-model:model-value="dataValue.showProductDialog"
+                           :single="true"
                            @confirm="handleProduct" />
   </div>
 </template>
@@ -161,7 +163,10 @@
     reactive,
     ref,
   } from "vue";
-  import { queryList, add } 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";
@@ -174,18 +179,6 @@
   const ProductSelectDialog = defineAsyncComponent(
     () => import("@/views/basicData/product/ProductSelectDialog.vue")
   );
-  const props = defineProps({
-    embedded: {
-      type: Boolean,
-      default: false,
-    },
-    // 鏄惧紡鎸囧畾BOM涓婚敭锛堢敤浜庡祵鍏ュ埌鈥滃伐鑹鸿矾绾块」鐩�濈瓑椤甸潰鏃讹紝璺敱 query.id 涓嶆槸 bomId 鐨勬儏鍐碉級
-    bomId: {
-      type: [String, Number],
-      default: undefined,
-    },
-  });
-  const embedded = computed(() => props.embedded);
   const emit = defineEmits(["update:router"]);
   const form = ref();
 
@@ -193,8 +186,7 @@
   const router = useRouter();
   const routeId = computed({
     get() {
-      // 浼樺厛浣跨敤澶栭儴浼犲叆鐨� bomId锛屽叾娆′娇鐢ㄨ矾鐢辩殑 bomId锛屾渶鍚庡洖閫�鍒拌矾鐢辩殑 id锛堝吋瀹瑰師椤甸潰锛�
-      return props.bomId ?? route.query.bomId ?? route.query.id;
+      return route.query.id;
     },
 
     set(val) {
@@ -225,6 +217,73 @@
     isEdit: false,
   });
 
+  const normalizeListData = (source: any) => {
+    if (Array.isArray(source)) {
+      return source;
+    }
+    if (Array.isArray(source?.records)) {
+      return source.records;
+    }
+    return [];
+  };
+
+  const getProcessOptionById = (id: any) => {
+    if (id === undefined || id === null || id === "") {
+      return null;
+    }
+    return (
+      normalizeListData(dataValue.processOptions).find(
+        option => String(option.id) === String(id)
+      ) || null
+    );
+  };
+
+  const syncProcessOperationFields = (item: any) => {
+    const processId = item.processId ?? item.operationId ?? "";
+    if (!processId) {
+      item.processId = "";
+      item.operationId = "";
+      item.processName = "";
+      item.operationName = "";
+      return;
+    }
+
+    const option = getProcessOptionById(processId);
+    const processName =
+      option?.name || item.processName || item.operationName || "";
+
+    item.processId = processId;
+    item.operationId = processId;
+    item.processName = processName;
+    item.operationName = processName;
+  };
+
+  const normalizeTreeData = (items: any[]) => {
+    items.forEach((item: any) => {
+      item.tempId = item.tempId || item.id || `${Date.now()}_${Math.random()}`;
+      syncProcessOperationFields(item);
+      if (Array.isArray(item.children) && item.children.length > 0) {
+        normalizeTreeData(item.children);
+      }
+    });
+  };
+
+  const buildSubmitTree = (items: any[]) => {
+    return items.map((item: any) => {
+      const current = { ...item };
+      syncProcessOperationFields(current);
+      current.children = Array.isArray(current.children)
+        ? buildSubmitTree(current.children)
+        : [];
+      return current;
+    });
+  };
+
+  const handleProcessChange = (row: any, value: any) => {
+    row.processId = value || "";
+    syncProcessOperationFields(row);
+  };
+
   const tableData = reactive([
     {
       productName: "",
@@ -240,43 +299,34 @@
   };
 
   const fetchData = async () => {
-    const setNameRecursively = (items: any[]) => {
-      items.forEach((item: any) => {
-        item.tempId = item.tempId || item.id || new Date().getTime() + Math.random();
-        item.processName =
-          dataValue.processOptions.find(option => option.id === item.processId)?.name || item.processName || "";
-        if (item.children && item.children.length > 0) {
-          setNameRecursively(item.children);
-        }
-      });
-    };
-
     if (isOrderPage.value) {
       // 璁㈠崟鎯呭喌锛氫娇鐢ㄨ鍗曠殑浜у搧缁撴瀯鎺ュ彛
       const { data } = await listProcessBom({ orderId: routeOrderId.value });
-      const list = Array.isArray(data) ? data : (data as any)?.records || [];
-      dataValue.dataList = list;
-      setNameRecursively(dataValue.dataList);
+      dataValue.dataList = (data as any) || [];
+      normalizeTreeData(dataValue.dataList);
     } else {
       // 闈炶鍗曟儏鍐碉細浣跨敤鍘熸潵鐨勬帴鍙�
       const { data } = await queryList(routeId.value);
       dataValue.dataList = (data as any) || [];
-      // 涓烘墍鏈夐」鍙婂叾瀛愰」璁剧疆name灞炴��
-      setNameRecursively(dataValue.dataList);
+      console.log(dataValue);
+      normalizeTreeData(dataValue.dataList);
       console.log(dataValue.dataList, "dataValue.dataList");
     }
   };
 
   const fetchProcessOptions = async () => {
-    const { data } = await list();
-    dataValue.processOptions = data as any;
+    const { data } = await list({});
+    console.log(data, "dataValue.dataList");
+    dataValue.processOptions = normalizeListData(data);
   };
 
   const handleProduct = (row: any) => {
-    if (row?.length > 1) {
-      ElMessage.error("鍙兘閫夋嫨涓�涓骇鍝�");
+    if (!Array.isArray(row) || row.length === 0) {
+      ElMessage.warning("璇烽�夋嫨涓�涓骇鍝�");
+      return;
     }
-    const productData = row[0];
+    // 鍙厑璁镐竴涓細濡傛灉涓婃父杩斿洖浜嗗涓紝榛樿浣跨敤鏈�鍚庝竴娆¢�夋嫨骞惰鐩栧綋鍓嶅��
+    const productData = row[row.length - 1];
 
     //  鏈�澶栧眰缁勪欢涓紝涓庡綋鍓嶄骇鍝佺浉鍚岀殑浜у搧鍙兘鏈変竴涓�
     const isTopLevel = dataValue.dataList.some(
@@ -386,19 +436,18 @@
 
   const submit = () => {
     dataValue.loading = true;
+    normalizeTreeData(dataValue.dataList);
 
     // 鍏堣繘琛岃〃鍗曟牎楠�
     const valid = validateAll();
     console.log(dataValue.dataList, "dataValue.dataList");
     if (valid) {
-      add({
+      addBomDetail({
         bomId: routeId.value,
-        children: dataValue.dataList || [],
+        children: buildSubmitTree(dataValue.dataList || []),
       })
         .then(res => {
-          router.push({
-            path: "/productionManagement/productionManagement/productStructure/index",
-          });
+          router.go(-1);
           ElMessage.success("淇濆瓨鎴愬姛");
           dataValue.loading = false;
         })
@@ -456,7 +505,9 @@
           productModelId: undefined,
           processId: "",
           processName: "",
-          unitQuantity: 0,
+          operationId: "",
+          operationName: "",
+          unitQuantity: 1,
           demandedQuantity: 0,
           unit: "",
           children: [],
@@ -482,7 +533,10 @@
         model: undefined,
         productModelId: undefined,
         processId: "",
-        unitQuantity: 0,
+        processName: "",
+        operationId: "",
+        operationName: "",
+        unitQuantity: 1,
         demandedQuantity: 0,
         children: [],
         unit: "",
@@ -533,11 +587,4 @@
     await fetchProcessOptions();
     await fetchData();
   });
-</script>
-
-<style scoped>
-.embedded-container {
-  padding: 0;
-  margin: 0;
-}
-</style>
\ No newline at end of file
+</script>
\ No newline at end of file

--
Gitblit v1.9.3