From 7726b6cdab80596d2e2f7dd3fe1ec3dfbdeee155 Mon Sep 17 00:00:00 2001
From: yuan <123@>
Date: 星期五, 12 六月 2026 09:42:40 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_pro_河南鹤壁' into dev_pro_河南鹤壁

---
 src/views/productionManagement/workOrderManagement/index.vue |   88 +++++++++++++++++++++++++++-----------------
 1 files changed, 54 insertions(+), 34 deletions(-)

diff --git a/src/views/productionManagement/workOrderManagement/index.vue b/src/views/productionManagement/workOrderManagement/index.vue
index 4f09330..44be8b7 100644
--- a/src/views/productionManagement/workOrderManagement/index.vue
+++ b/src/views/productionManagement/workOrderManagement/index.vue
@@ -1,6 +1,6 @@
 <template>
   <div class="app-container">
-    <div class="search_form">
+    <div class="search_form mb20">
       <div class="search-row">
         <div class="search-item">
           <span class="search_title">宸ュ崟缂栧彿锛�</span>
@@ -13,7 +13,7 @@
         </div>
         <div class="search-item">
           <span class="search_title">鐢熶骇璁㈠崟鍙凤細</span>
-          <el-input v-model="searchForm.productOrderNpsNo"
+          <el-input v-model="searchForm.npsNo"
                     style="width: 240px"
                     placeholder="璇疯緭鍏�"
                     @change="handleQuery"
@@ -133,7 +133,7 @@
           <el-input v-model.number="reportForm.quantity"
                     type="number"
                     min="0"
-                    step="1"
+                    step="0.1"
                     style="width: 300px"
                     placeholder="璇疯緭鍏ョ敓浜у悎鏍兼暟閲�"
                     @input="handleQuantityInput" />
@@ -143,7 +143,7 @@
           <el-input v-model.number="reportForm.scrapQty"
                     type="number"
                     min="0"
-                    step="1"
+                    step="0.1"
                     style="width: 300px"
                     placeholder="璇疯緭鍏ユ姤搴熸暟閲�"
                     @input="handleScrapQtyInput" />
@@ -160,6 +160,17 @@
                        :label="user.nickName"
                        :value="user.userId" />
           </el-select>
+        </el-form-item>
+        <!-- 宸ユ椂 -->
+        <el-form-item label="宸ユ椂"
+                      v-if="currentReportRowData?.type == 0"
+                      prop="workHour">
+          <el-input v-model.number="reportForm.workHour"
+                    type="number"
+                    min="0"
+                    style="width: 280px"
+                    placeholder="璇疯緭鍏ュ伐鏃�" /><span style="margin-left:10px"
+                class="param-unit">h</span>
         </el-form-item>
         <div v-if="params.length > 0"
              class="param-grid"
@@ -244,6 +255,7 @@
                     @refresh="getList" />
     <FileList v-if="fileDialogVisible"
               v-model:visible="fileDialogVisible"
+              :editable="!currentWorkOrderRow?.endOrder"
               :record-type="'production_operation_task'"
               :record-id="currentWorkOrderId" />
   </div>
@@ -258,13 +270,16 @@
     addProductMain,
     downProductWorkOrder,
   } from "@/api/productionManagement/workOrder.js";
+  import { listMaterialPickingDetail } from "@/api/productionManagement/productionOrder.js";
   import { findProcessParamListOrder } from "@/api/productionManagement/productProcessRoute.js";
   import { getUserProfile, userListNoPageByTenantId } from "@/api/system/user.js";
   import { getDicts } from "@/api/system/dict/data";
   import QRCode from "qrcode";
   import { getCurrentInstance, reactive, toRefs } from "vue";
   import MaterialDialog from "./components/MaterialDialog.vue";
-  const FileList = defineAsyncComponent(() => import("@/components/Dialog/FileList.vue"));
+  const FileList = defineAsyncComponent(() =>
+    import("@/components/Dialog/FileList.vue")
+  );
 
   import useUserStore from "@/store/modules/user";
   const { proxy } = getCurrentInstance();
@@ -348,12 +363,12 @@
       dataType: "action",
       fixed: "right",
       operation: [
-        {
+        /*{
           name: "娴佽浆鍗�",
           clickFun: row => {
             downloadAndPrintWorkOrder(row);
           },
-        },
+        },*/
         {
           name: "闄勪欢",
           clickFun: row => {
@@ -371,6 +386,7 @@
           clickFun: row => {
             showReportDialog(row);
           },
+          showHide: row => !row.endOrder,
           disabled: row => {
             if (row.planQuantity <= 0) return true;
             if (!row.userIds) return false;
@@ -414,6 +430,7 @@
     productMainId: null,
     productionOrderRoutingOperationId: "",
     productionOrderId: "",
+    workHour: 0,
     paramGroups: {},
   });
 
@@ -428,8 +445,7 @@
       return;
     }
     const num = Number(value);
-    // 鏁存暟涓斿ぇ浜庣瓑浜�1
-    if (isNaN(num) || !Number.isInteger(num) || num < 0) {
+    if (isNaN(num) || num < 0) {
       callback(new Error("鐢熶骇鍚堟牸鏁伴噺蹇呴』澶т簬绛変簬0"));
       return;
     }
@@ -443,8 +459,7 @@
       return;
     }
     const num = Number(value);
-    // 鏁存暟涓斿ぇ浜庣瓑浜�0
-    if (isNaN(num) || !Number.isInteger(num) || num < 0) {
+    if (isNaN(num) || num < 0) {
       callback(new Error("鎶ュ簾鏁伴噺蹇呴』澶т簬绛変簬0"));
       return;
     }
@@ -467,20 +482,8 @@
     if (isNaN(num)) {
       return;
     }
-    // 濡傛灉灏忎簬1锛屾竻闄�
     if (num < 0) {
       reportForm.quantity = null;
-      return;
-    }
-    // 濡傛灉鏄皬鏁板彇鏁存暟閮ㄥ垎
-    if (!Number.isInteger(num)) {
-      const intValue = Math.floor(num);
-      // 濡傛灉鍙栨暣鍚庡皬浜�1锛屾竻闄�
-      if (intValue < 0) {
-        reportForm.quantity = null;
-        return;
-      }
-      reportForm.quantity = intValue;
       return;
     }
     reportForm.quantity = num;
@@ -493,21 +496,13 @@
       return;
     }
     const num = Number(value);
-    // 濡傛灉鏄疦aN锛屼繚鎸佸師鍊�
     if (isNaN(num)) {
       return;
     }
-    // 濡傛灉鏄礋鏁帮紝娓呴櫎杈撳叆
     if (num < 0) {
       reportForm.scrapQty = null;
       return;
     }
-    // 濡傛灉鏄皬鏁帮紝鍙栨暣鏁伴儴鍒�
-    if (!Number.isInteger(num)) {
-      reportForm.scrapQty = Math.floor(num);
-      return;
-    }
-    // 鏈夋晥鐨勯潪璐熸暣鏁帮紙鍖呮嫭0锛�
     reportForm.scrapQty = num;
   };
 
@@ -523,7 +518,7 @@
   const data = reactive({
     searchForm: {
       workOrderNo: "",
-      productOrderNpsNo: "",
+      npsNo: "",
     },
   });
   const { searchForm } = toRefs(data);
@@ -632,15 +627,34 @@
   const printTransferCard = () => {
     window.print();
   };
+  const currentWorkOrderRow = ref(null);
 
   const openWorkOrderFiles = row => {
     currentWorkOrderId.value = row.id;
+    currentWorkOrderRow.value = row;
     fileDialogVisible.value = true;
   };
 
-  const showReportDialog = row => {
+  const showReportDialog = async row => {
+    if (row.productionOrderId) {
+      try {
+        const res = await listMaterialPickingDetail(row.productionOrderId);
+        const records = Array.isArray(res.data)
+          ? res.data
+          : res.data?.records || [];
+        if (res.code === 200 && records.length === 0) {
+          proxy.$modal.msgError("鏈鏂欐棤娉曟姤宸�");
+          return;
+        }
+      } catch (error) {
+        console.error("鏌ヨ棰嗘枡璇︽儏澶辫触:", error);
+      }
+    }
     currentReportRowData.value = row;
-    reportForm.planQuantity = row.planQuantity;
+    const planQuantity = Number(row.planQuantity || 0);
+    const completeQuantity = Number(row.completeQuantity || 0);
+    const remainingQuantity = Math.max(0, planQuantity - completeQuantity);
+    reportForm.planQuantity = remainingQuantity;
     reportForm.quantity =
       row.quantity !== undefined && row.quantity !== null ? row.quantity : null;
     reportForm.productProcessRouteItemId = row.productProcessRouteItemId;
@@ -652,6 +666,11 @@
     reportForm.productionOrderRoutingOperationId =
       row.productionOrderRoutingOperationId;
     reportForm.productionOrderId = row.productionOrderId;
+    if (row.type == 0) {
+      reportForm.workHour = row.workHour || 0;
+    } else {
+      reportForm.workHour = 0;
+    }
     nextTick(() => {
       reportFormRef.value?.clearValidate();
       if (row.productionOrderRoutingOperationId && row.productionOrderId) {
@@ -751,6 +770,7 @@
         productionOrderRoutingOperationId:
           reportForm.productionOrderRoutingOperationId,
         productionOrderId: reportForm.productionOrderId,
+        workHour: reportForm.workHour,
         productionOperationParamList: productionOperationParamList,
       };
 

--
Gitblit v1.9.3