From 04687ca035e6fa517e88470aac7247812f85eb95 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期五, 17 四月 2026 17:09:29 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_New' into dev_New

---
 src/views/productionManagement/workOrderManagement/components/MaterialDialog.vue |  152 ++++++++++++++++++++++----------------------------
 1 files changed, 67 insertions(+), 85 deletions(-)

diff --git a/src/views/productionManagement/workOrderManagement/components/MaterialDialog.vue b/src/views/productionManagement/workOrderManagement/components/MaterialDialog.vue
index e5eee56..575d888 100644
--- a/src/views/productionManagement/workOrderManagement/components/MaterialDialog.vue
+++ b/src/views/productionManagement/workOrderManagement/components/MaterialDialog.vue
@@ -11,18 +11,33 @@
         <el-table-column label="鍘熸枡鍚嶇О" prop="materialName" min-width="140" />
         <el-table-column label="鍘熸枡鍨嬪彿" prop="materialModel" min-width="140" />
         <el-table-column label="璁¢噺鍗曚綅" prop="unit" min-width="100" />
-        <el-table-column label="棰嗙敤鏁伴噺" prop="pickQty" min-width="100" />
+        <el-table-column label="绾胯竟浠撴暟閲�" prop="pickQty" min-width="100" />
         <el-table-column label="琛ユ枡鏁伴噺" prop="supplementQty" min-width="100" />
-        <el-table-column label="閫�鏂欐暟閲�" prop="returnQty" min-width="100" />
-        <el-table-column label="瀹為檯鏁伴噺" prop="actualQty" min-width="100" />
-        <el-table-column label="鎿嶄綔" align="center" fixed="right" width="220">
+        <el-table-column label="瀹為檯鏁伴噺" min-width="140">
+          <template #default="{ row }">
+            <el-input-number
+              v-model="row.actualQty"
+              :min="0"
+              :precision="3"
+              :step="1"
+              controls-position="right"
+              style="width: 100%;"
+            />
+          </template>
+        </el-table-column>
+        <el-table-column label="鎿嶄綔" align="center" fixed="right" width="180">
           <template #default="{ row }">
             <el-button type="primary" link @click="openSupplementDialog(row)">琛ユ枡</el-button>
-            <el-button type="warning" link @click="openReturnDialog(row)">閫�鏂�</el-button>
             <el-button type="info" link @click="openSupplementRecordDialog(row)">琛ユ枡璁板綍</el-button>
           </template>
         </el-table-column>
       </el-table>
+      <template #footer>
+        <span class="dialog-footer">
+          <el-button type="primary" :loading="pickSubmitting" @click="handleSubmitPick">棰嗙敤</el-button>
+          <el-button @click="dialogVisible = false">鍙栨秷</el-button>
+        </span>
+      </template>
     </el-dialog>
 
     <FormDialog
@@ -60,31 +75,6 @@
       </template>
     </FormDialog>
 
-    <FormDialog
-      v-model="returnDialogVisible"
-      title="閫�鏂�"
-      width="500px"
-      @confirm="handleSubmitReturn"
-    >
-      <el-form ref="returnFormRef" :model="returnForm" :rules="returnRules" label-width="120px">
-        <el-form-item label="閫�鏂欐暟閲�" prop="returnQty">
-          <el-input-number
-            v-model="returnForm.returnQty"
-            :min="0.001"
-            :precision="3"
-            :step="1"
-            style="width: 100%;"
-          />
-        </el-form-item>
-      </el-form>
-      <template #footer>
-        <span class="dialog-footer">
-          <el-button type="primary" :loading="returnSubmitting" @click="handleSubmitReturn">纭畾</el-button>
-          <el-button @click="returnDialogVisible = false">鍙栨秷</el-button>
-        </span>
-      </template>
-    </FormDialog>
-
     <el-dialog v-model="supplementRecordDialogVisible" title="琛ユ枡璁板綍" width="900px">
       <el-table v-loading="supplementRecordLoading" :data="supplementRecordTableData" border row-key="id">
         <el-table-column label="琛ユ枡鏁伴噺" prop="supplementQty" min-width="100" />
@@ -108,8 +98,8 @@
 import {
   listWorkOrderMaterialLedger,
   addWorkOrderMaterialSupplement,
-  addWorkOrderMaterialReturn,
   listWorkOrderMaterialSupplementRecord,
+  pickWorkOrderMaterial,
 } from "@/api/productionManagement/workOrder.js";
 
 const props = defineProps({
@@ -134,6 +124,7 @@
 const materialTableData = ref([]);
 const currentMaterialRow = ref(null);
 const currentMaterialOrderRow = ref(null);
+const pickSubmitting = ref(false);
 
 const supplementDialogVisible = ref(false);
 const supplementSubmitting = ref(false);
@@ -141,13 +132,6 @@
 const supplementForm = reactive({
   supplementQty: null,
   supplementReason: "",
-});
-
-const returnDialogVisible = ref(false);
-const returnSubmitting = ref(false);
-const returnFormRef = ref(null);
-const returnForm = reactive({
-  returnQty: null,
 });
 
 const supplementRecordDialogVisible = ref(false);
@@ -158,10 +142,6 @@
   supplementQty: [{ required: true, message: "璇疯緭鍏ヨˉ鏂欐暟閲�", trigger: "blur" }],
   supplementReason: [{ required: true, message: "璇疯緭鍏ヨˉ鏂欏師鍥�", trigger: "blur" }],
 };
-const returnRules = {
-  returnQty: [{ required: true, message: "璇疯緭鍏ラ��鏂欐暟閲�", trigger: "blur" }],
-};
-
 const loadMaterialTable = async row => {
   if (!row?.id) return;
   currentMaterialOrderRow.value = row;
@@ -234,49 +214,6 @@
   });
 };
 
-const openReturnDialog = row => {
-  currentMaterialRow.value = row;
-  returnForm.returnQty = null;
-  returnDialogVisible.value = true;
-  nextTick(() => {
-    returnFormRef.value?.clearValidate();
-  });
-};
-
-const handleSubmitReturn = () => {
-  returnFormRef.value?.validate(async valid => {
-    if (!valid || !currentMaterialRow.value?.id) {
-      ElMessage.warning("缂哄皯鐗╂枡鏄庣粏ID");
-      return;
-    }
-    const returnQty = Number(returnForm.returnQty);
-    const minQty =
-      Number(currentMaterialRow.value.pickQty || 0) +
-      Number(currentMaterialRow.value.supplementQty || 0);
-    if (returnQty < minQty) {
-      ElMessage.warning(`閫�鏂欐暟閲忎笉鑳戒綆浜庨鐢ㄦ暟閲�+琛ユ枡鏁伴噺锛�${minQty}锛塦);
-      return;
-    }
-    returnSubmitting.value = true;
-    try {
-      await addWorkOrderMaterialReturn({
-        materialLedgerId: currentMaterialRow.value.id,
-        returnQty,
-        workOrderId: currentMaterialOrderRow.value?.id,
-      });
-      returnDialogVisible.value = false;
-      await loadMaterialTable(currentMaterialOrderRow.value);
-      ElMessage.success("閫�鏂欐垚鍔�");
-      emit("refresh");
-    } catch (e) {
-      console.error("閫�鏂欏け璐�", e);
-      ElMessage.error("閫�鏂欏け璐�");
-    } finally {
-      returnSubmitting.value = false;
-    }
-  });
-};
-
 const openSupplementRecordDialog = async row => {
   supplementRecordDialogVisible.value = true;
   supplementRecordLoading.value = true;
@@ -293,4 +230,49 @@
     supplementRecordLoading.value = false;
   }
 };
+
+const validatePickRows = () => {
+  if (materialTableData.value.length === 0) {
+    return { valid: false, message: "鏆傛棤鍙鐢ㄧ墿鏂�" };
+  }
+  const invalidRow = materialTableData.value.find(item => item.actualQty === null || item.actualQty === undefined || item.actualQty === "");
+  if (invalidRow) {
+    return { valid: false, message: "璇峰~鍐欏疄闄呮暟閲忓悗鍐嶉鐢�" };
+  }
+  const exceedRow = materialTableData.value.find(item => {
+    const maxQty = Number(item.pickQty || 0) + Number(item.supplementQty || 0);
+    return Number(item.actualQty || 0) > maxQty;
+  });
+  if (exceedRow) {
+    return { valid: false, message: "瀹為檯鏁伴噺涓嶈兘澶т簬棰嗙敤鏁伴噺+琛ユ枡鏁伴噺" };
+  }
+  return { valid: true, message: "" };
+};
+
+const handleSubmitPick = async () => {
+  if (!currentMaterialOrderRow.value?.id) return;
+  const validateResult = validatePickRows();
+  if (!validateResult.valid) {
+    ElMessage.warning(validateResult.message);
+    return;
+  }
+  pickSubmitting.value = true;
+  try {
+    await pickWorkOrderMaterial({
+      workOrderId: currentMaterialOrderRow.value.id,
+      items: materialTableData.value.map(item => ({
+        materialLedgerId: item.id,
+        actualQty: Number(item.actualQty || 0),
+      })),
+    });
+    ElMessage.success("棰嗙敤鎴愬姛");
+    await loadMaterialTable(currentMaterialOrderRow.value);
+    emit("refresh");
+  } catch (e) {
+    console.error("棰嗙敤澶辫触", e);
+    ElMessage.error("棰嗙敤澶辫触");
+  } finally {
+    pickSubmitting.value = false;
+  }
+};
 </script>

--
Gitblit v1.9.3