From 07f9f8657d057a38792c3822acc9b08d83478967 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期四, 07 五月 2026 14:23:10 +0800
Subject: [PATCH] 合并代码

---
 src/views/productionManagement/processRoute/index.vue |  414 ++++++++++++++++++++++++++++++++++++----------------------
 1 files changed, 258 insertions(+), 156 deletions(-)

diff --git a/src/views/productionManagement/processRoute/index.vue b/src/views/productionManagement/processRoute/index.vue
index 7d5ab5d..43425c6 100644
--- a/src/views/productionManagement/processRoute/index.vue
+++ b/src/views/productionManagement/processRoute/index.vue
@@ -1,181 +1,279 @@
 <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" />
+    <FileList v-if="fileDialogVisible"
+              v-model:visible="fileDialogVisible"
+              :record-type="'technology_routing'"
+              :record-id="currentProcessRouteId" />
   </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";
+  const FileList = defineAsyncComponent(() => import("@/components/Dialog/FileList.vue"));
 
-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: "鎻忚堪",
-    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()
+  import { useRouter } from "vue-router";
+  import { ElMessage, ElMessageBox } from "element-plus";
 
-// 鏌ヨ鍒楄〃
-/** 鎼滅储鎸夐挳鎿嶄綔 */
-const handleQuery = () => {
-  page.current = 1;
-  getList();
-};
+  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);
+          },
+        },
+        {
+          name: "闄勪欢",
+          type: "text",
+          clickFun: row => {
+            openFileDialog(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 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,
+  // 闄勪欢鐩稿叧
+  const fileDialogVisible = ref(false);
+  const fileListDialogRef = ref(null);
+  const currentProcessRouteId = ref(null);
+  const filePage = reactive({
+    current: 1,
+    size: 1000,
+    total: 0,
+  });
+
+  const { proxy } = getCurrentInstance();
+
+  // 闄勪欢锛氭煡璇�
+  const fetchProcessRouteFiles = async processRouteId => {
+    const params = {
+      current: filePage.current,
+      size: filePage.size,
+      processRouteId,
+    };
+    const res = await listProcessRouteFiles(params);
+    const records = res?.data?.records || [];
+    filePage.total = res?.data?.total || records.length;
+    const mapped = records.map(item => ({
+      id: item.id,
+      name: item.fileName || item.name,
+      url: item.fileUrl || item.url,
+      raw: item,
     }));
-    page.total = res.data.total;
-  }).catch(err => {
-    tableLoading.value = false;
-  })
-};
-// 琛ㄦ牸閫夋嫨鏁版嵁
-const handleSelectionChange = (selection) => {
-  selectedRows.value = selection;
-};
+    fileListDialogRef.value?.setList(mapped);
+  };
 
-// 鎵撳紑鏂板寮规
-const showNewModal = () => {
-  isShowNewModal.value = true
-};
+  // 鎵撳紑闄勪欢寮圭獥
+  const openFileDialog = async row => {
+    currentProcessRouteId.value = row.id;
+    fileDialogVisible.value = true;
+    await fetchProcessRouteFiles(row.id);
+  };
 
-const showEditModal = (row) => {
-  isShowEditModal.value = true
-  record.value = row
-};
+  // 鍒锋柊闄勪欢鍒楄〃
+  const refreshFileList = async () => {
+    if (!currentProcessRouteId.value) return;
+    await fetchProcessRouteFiles(currentProcessRouteId.value);
+  };
 
-const showItemModal = (row) => {
-  router.push({
-    path: '/productionManagement/processRouteItem',
-    query: {
-      id: row.id
+  // 涓婁紶闄勪欢
+  const handleAttachmentUpload = async filePayload => {
+    if (!currentProcessRouteId.value) return;
+    const payload = {
+      fileName: filePayload?.fileName || filePayload?.name,
+      fileUrl: filePayload?.fileUrl || filePayload?.url,
+      processRouteId: currentProcessRouteId.value,
+    };
+    await addProcessRouteFile(payload);
+    ElMessage.success("鏂囦欢涓婁紶鎴愬姛");
+    await refreshFileList();
+  };
+
+  // 鍒犻櫎闄勪欢
+  const handleAttachmentDelete = async row => {
+    if (!row?.id) return false;
+    try {
+      await ElMessageBox.confirm("纭鍒犻櫎璇ラ檮浠讹紵", "鎻愮ず", {
+        type: "warning",
+      });
+    } catch {
+      return false;
     }
-  })
-};
+    await delProcessRouteFile([row.id]);
+    ElMessage.success("鍒犻櫎鎴愬姛");
+    await refreshFileList();
+  };
 
-// 鍒犻櫎
-function handleDelete() {
-  const ids = selectedRows.value.map((item) => item.id);
-  proxy.$modal
-      .confirm('鏄惁纭鍒犻櫎宸插嬀閫夌殑鏁版嵁椤癸紵')
+  // 鏌ヨ鍒楄〃
+  /** 鎼滅储鎸夐挳鎿嶄綔 */
+  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 || "",
+        bomId: row.bomId || "",
+        description: row.description || "",
+        type: "route",
+      },
+    });
+  };
+
+  // 鍒犻櫎
+  function handleDelete() {
+    const ids = selectedRows.value.map(item => item.id);
+    proxy.$modal
+      .confirm("鏄惁纭鍒犻櫎宸插嬀閫夌殑鏁版嵁椤癸紵")
       .then(function () {
         return del(ids);
       })
@@ -184,11 +282,15 @@
         proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛");
       })
       .catch(() => {});
-}
+  }
 
-onMounted(() => {
-  getList();
-});
+  onMounted(() => {
+    getList();
+  });
 </script>
 
-<style scoped></style>
+<style scoped>
+  .table_list {
+    margin-top: unset;
+  }
+</style>

--
Gitblit v1.9.3