From ca1a6bae22d176c12fdc8e86f754c4df4d661191 Mon Sep 17 00:00:00 2001
From: liyong <18434998025@163.com>
Date: 星期三, 04 三月 2026 17:01:00 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_KTHG' into dev_KTHG

---
 src/views/productionManagement/workOrder/index.vue |   99 +++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 83 insertions(+), 16 deletions(-)

diff --git a/src/views/productionManagement/workOrder/index.vue b/src/views/productionManagement/workOrder/index.vue
index de91893..621501c 100644
--- a/src/views/productionManagement/workOrder/index.vue
+++ b/src/views/productionManagement/workOrder/index.vue
@@ -24,10 +24,12 @@
                 :page="page"
                 :tableLoading="tableLoading"
                 @pagination="pagination">
-                <template #completionStatus="{ row }">
-                  <el-progress :percentage="toProgressPercentage(row?.completionStatus)" :color="progressColor(toProgressPercentage(row?.completionStatus))" :status="toProgressPercentage(row?.completionStatus) >= 100 ? 'success' : ''" />
-                </template>
-              </PIMTable>
+        <template #completionStatus="{ row }">
+          <el-progress :percentage="toProgressPercentage(row?.completionStatus)"
+                       :color="progressColor(toProgressPercentage(row?.completionStatus))"
+                       :status="toProgressPercentage(row?.completionStatus) >= 100 ? 'success' : ''" />
+        </template>
+      </PIMTable>
     </div>
     <el-dialog v-model="editDialogVisible"
                title="缂栬緫鏃堕棿"
@@ -104,7 +106,6 @@
                 transferCardRowData.status 
               }}</span>
             </div> -->
-           
             <div class="info-item">
               <span class="info-label">璁″垝寮�濮嬫椂闂�</span>
               <span class="info-value">{{ transferCardRowData.planStartTime }}</span>
@@ -196,7 +197,7 @@
                      @change="handleUserChange">
             <el-option v-for="user in userOptions"
                        :key="user.userId"
-                       :label="user.userName"
+                       :label="user.nickName"
                        :value="user.userId" />
           </el-select>
         </el-form-item>
@@ -209,6 +210,7 @@
         </span>
       </template>
     </el-dialog>
+    <FilesDia ref="workOrderFilesRef" />
   </div>
 </template>
 
@@ -220,21 +222,23 @@
     productWorkOrderPage,
     updateProductWorkOrder,
     addProductMain,
+    downProductWorkOrder,
   } from "@/api/productionManagement/workOrder.js";
   import { getUserProfile, userListNoPageByTenantId } from "@/api/system/user.js";
   import QRCode from "qrcode";
   import { getCurrentInstance, reactive, toRefs } from "vue";
+  import FilesDia from "./components/filesDia.vue";
   const { proxy } = getCurrentInstance();
 
   const tableColumn = ref([
     {
-      label: "宸ュ崟缂栧彿",
-      prop: "workOrderNo",
-      width: "140",
+      label: "宸ュ崟绫诲瀷",
+      prop: "workOrderType",
+      width: "80",
     },
     {
-      label: "鐢熶骇璁㈠崟鍙�",
-      prop: "productOrderNpsNo",
+      label: "宸ュ崟缂栧彿",
+      prop: "workOrderNo",
       width: "140",
     },
     {
@@ -304,10 +308,16 @@
             handleEdit(row);
           },
         },
+        // {
+        //   name: "娴佽浆鍗�",
+        //   clickFun: row => {
+        //     downloadAndPrintWorkOrder(row);
+        //   },
+        // },
         {
-          name: "娴佽浆鍗�",
+          name: "闄勪欢",
           clickFun: row => {
-            showTransferCard(row);
+            openWorkOrderFiles(row);
           },
         },
         {
@@ -330,6 +340,7 @@
   const transferCardQrUrl = ref("");
   const transferCardRowData = ref(null);
   const reportDialogVisible = ref(false);
+  const workOrderFilesRef = ref(null);
   const userOptions = ref([]);
   const reportForm = reactive({
     planQuantity: 0,
@@ -395,6 +406,58 @@
       });
   };
 
+  // 涓嬭浇骞舵墦鍗板伐鍗曟祦杞崱锛堟枃浠舵祦锛�
+  const downloadAndPrintWorkOrder = async row => {
+    if (!row || !row.id) {
+      proxy.$modal.msgError("缂哄皯宸ュ崟ID锛屾棤娉曚笅杞芥祦杞崱");
+      return;
+    }
+    const fileName = row.workOrderNo
+      ? `宸ュ崟娴佽浆鍗${row.workOrderNo}.xlsx`
+      : "宸ュ崟娴佽浆鍗�.xlsx";
+    try {
+      // 璋冪敤鎺ュ彛锛屼互 responseType: 'blob' 鑾峰彇鏂囦欢娴�
+      const blob = await downProductWorkOrder(row.id);
+
+      if (!blob) {
+        proxy.$modal.msgError("鏈幏鍙栧埌娴佽浆鍗℃枃浠�");
+        return;
+      }
+
+      // 鍒涘缓 Blob URL
+      const fileBlob =
+        blob instanceof Blob
+          ? blob
+          : new Blob([blob], { type: blob.type || "application/octet-stream" });
+      const url = window.URL.createObjectURL(fileBlob);
+
+      // 鍒涘缓闅愯棌 iframe锛岀敤浜庤Е鍙戞祻瑙堝櫒鎵撳嵃
+      const iframe = document.createElement("iframe");
+      iframe.style.position = "fixed";
+      iframe.style.right = "0";
+      iframe.style.bottom = "0";
+      iframe.style.width = "0";
+      iframe.style.height = "0";
+      iframe.style.border = "0";
+      iframe.src = url;
+      document.body.appendChild(iframe);
+
+      iframe.onload = () => {
+        try {
+          iframe.contentWindow?.focus();
+          iframe.contentWindow?.print();
+        } catch (e) {
+          console.error("鑷姩璋冪敤鎵撳嵃澶辫触", e);
+          // 閫�鑰屾眰鍏舵锛屾墦寮�鏂扮獥鍙g敱鐢ㄦ埛鎵嬪姩鎵撳嵃
+          window.open(url);
+        }
+      };
+    } catch (e) {
+      console.error("涓嬭浇宸ュ崟娴佽浆鍗″け璐�", e);
+      proxy.$modal.msgError("涓嬭浇宸ュ崟娴佽浆鍗″け璐�");
+    }
+  };
+
   const showTransferCard = async row => {
     transferCardRowData.value = row;
     const qrContent = String(row.id);
@@ -440,7 +503,7 @@
       .then(res => {
         if (res.code === 200) {
           reportForm.userId = res.data.userId;
-          reportForm.userName = res.data.userName;
+          reportForm.userName = res.data.nickName;
         }
       })
       .catch(err => {
@@ -448,6 +511,10 @@
       });
 
     reportDialogVisible.value = true;
+  };
+
+  const openWorkOrderFiles = row => {
+    workOrderFilesRef.value?.openDialog(row);
   };
 
   const handleReport = () => {
@@ -497,11 +564,11 @@
   };
 
   // 鐢ㄦ埛閫夋嫨鍙樺寲鏃舵洿鏂� userName
-  const handleUserChange = (userId) => {
+  const handleUserChange = userId => {
     if (userId) {
       const selectedUser = userOptions.value.find(user => user.userId === userId);
       if (selectedUser) {
-        reportForm.userName = selectedUser.userName;
+        reportForm.userName = selectedUser.nickName;
       }
     } else {
       reportForm.userName = "";

--
Gitblit v1.9.3