From a563ea879ef5fb6897e76d2df661e465dce2ab9b Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期一, 01 六月 2026 15:02:27 +0800
Subject: [PATCH] Merge branch 'dev_新疆_大罗素马铃薯new' of http://114.132.189.42:9002/r/product-inventory-management into dev_新疆_大罗素马铃薯new

---
 src/views/productionManagement/processRoute/index.vue |  298 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 298 insertions(+), 0 deletions(-)

diff --git a/src/views/productionManagement/processRoute/index.vue b/src/views/productionManagement/processRoute/index.vue
new file mode 100644
index 0000000..1ef5b9d
--- /dev/null
+++ b/src/views/productionManagement/processRoute/index.vue
@@ -0,0 +1,298 @@
+<template>
+  <div class="app-container">
+    <div class="search_form">
+      <el-form :model="searchForm"
+               :inline="true">
+        <el-form-item label="瑙勬牸鍚嶇О:">
+          <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-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>
+      <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" />
+    <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";
+  const FileList = defineAsyncComponent(() =>
+    import("@/components/Dialog/FileList.vue")
+  );
+
+  import { useRouter } from "vue-router";
+  import { ElMessage, ElMessageBox } from "element-plus";
+
+  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 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,
+    }));
+    fileListDialogRef.value?.setList(mapped);
+  };
+
+  // 鎵撳紑闄勪欢寮圭獥
+  const openFileDialog = async row => {
+    currentProcessRouteId.value = row.id;
+    fileDialogVisible.value = true;
+    await fetchProcessRouteFiles(row.id);
+  };
+
+  // 鍒锋柊闄勪欢鍒楄〃
+  const refreshFileList = async () => {
+    if (!currentProcessRouteId.value) return;
+    await fetchProcessRouteFiles(currentProcessRouteId.value);
+  };
+
+  // 涓婁紶闄勪欢
+  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();
+  };
+
+  // 鏌ヨ鍒楄〃
+  /** 鎼滅储鎸夐挳鎿嶄綔 */
+  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);
+      })
+      .then(() => {
+        getList();
+        proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+      })
+      .catch(() => {});
+  }
+
+  onMounted(() => {
+    getList();
+  });
+</script>
+
+<style scoped>
+  .table_list {
+    margin-top: unset;
+  }
+</style>

--
Gitblit v1.9.3