From 1464889b1eaab139e7bf85b0d4a46ce7364a0e6e Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期一, 20 四月 2026 10:49:11 +0800
Subject: [PATCH] Merge branch 'dev_New' into dev_西宁_湟水峡

---
 src/views/productionManagement/productionOrder/components/MaterialDetailDialog.vue |  105 +++++-----------------------------------------------
 1 files changed, 11 insertions(+), 94 deletions(-)

diff --git a/src/views/productionManagement/productionOrder/components/MaterialDetailDialog.vue b/src/views/productionManagement/productionOrder/components/MaterialDetailDialog.vue
index f93199a..9c50fc8 100644
--- a/src/views/productionManagement/productionOrder/components/MaterialDetailDialog.vue
+++ b/src/views/productionManagement/productionOrder/components/MaterialDetailDialog.vue
@@ -36,8 +36,9 @@
     <el-dialog v-model="supplementRecordDialogVisible" title="琛ユ枡璁板綍" width="800px">
       <el-table v-loading="supplementRecordLoading" :data="supplementRecordTableData" border row-key="id">
         <el-table-column label="琛ユ枡鏁伴噺" prop="supplementQty" min-width="120" />
-        <el-table-column label="琛ユ枡鏃堕棿" prop="supplementTime" min-width="180" />
-        <el-table-column label="澶囨敞" prop="remark" min-width="200" />
+        <el-table-column label="琛ユ枡浜�" prop="supplementUserName" min-width="120" />
+        <el-table-column label="琛ユ枡鏃ユ湡" prop="supplementTime" min-width="160" />
+        <el-table-column label="琛ユ枡鍘熷洜" prop="supplementReason" min-width="200" />
       </el-table>
       <template #footer>
         <span class="dialog-footer">
@@ -54,29 +55,6 @@
         <el-table-column label="閫�鏂欐眹鎬绘暟閲�" prop="returnQtyTotal" min-width="140" />
       </el-table>
 
-      <el-card class="approver-card" shadow="never">
-        <template #header>
-          <div class="card-header-wrapper">
-            <span class="card-title">瀹℃壒浜洪�夋嫨</span>
-            <el-button type="primary" size="small" @click="addApproverNode">鏂板鑺傜偣</el-button>
-          </div>
-        </template>
-        <div class="approver-nodes-container">
-          <div v-for="(node, index) in approverNodes" :key="node.id" class="approver-node-item">
-            <div class="approver-node-label">
-              <span class="node-step">{{ index + 1 }}</span>
-              <span class="node-text">瀹℃壒浜�</span>
-            </div>
-            <el-select v-model="node.userId" placeholder="閫夋嫨浜哄憳" class="approver-select" clearable>
-              <el-option v-for="user in userList" :key="user.userId" :label="user.nickName" :value="user.userId" />
-            </el-select>
-            <el-button v-if="approverNodes.length > 1" type="danger" size="small" @click="removeApproverNode(index)">
-              鍒犻櫎
-            </el-button>
-          </div>
-        </div>
-      </el-card>
-
       <template #footer>
         <span class="dialog-footer">
           <el-button type="primary" :loading="materialReturnConfirming" @click="handleReturnConfirm">纭鎻愪氦</el-button>
@@ -91,7 +69,6 @@
 import { computed, ref, watch } from "vue";
 import { ElMessage } from "element-plus";
 import { listMaterialPickingDetail, listMaterialSupplementRecord, confirmMaterialReturn } from "@/api/productionManagement/productionOrder.js";
-import { userListNoPageByTenantId } from "@/api/system/user.js";
 
 const props = defineProps({
   modelValue: { type: Boolean, default: false },
@@ -112,10 +89,10 @@
 const supplementRecordTableData = ref([]);
 const returnSummaryDialogVisible = ref(false);
 const returnSummaryList = ref([]);
-const userList = ref([]);
-const approverNodes = ref([{ id: Date.now(), userId: undefined }]);
+const calcReturnQty = item =>
+  Number(item.pickQty || 0) + Number(item.supplementQty || 0) - Number(item.actualQty || 0);
 const canOpenReturnSummary = computed(() =>
-  materialDetailTableData.value.some(item => Number(item.returnQty || 0) > 0)
+  materialDetailTableData.value.some(item => calcReturnQty(item) > 0)
 );
 
 const loadDetailList = async () => {
@@ -159,6 +136,8 @@
 const buildReturnSummary = () => {
   const map = new Map();
   materialDetailTableData.value.forEach(item => {
+    const returnQty = calcReturnQty(item);
+    if (returnQty <= 0) return;
     const key = `${item.materialModelId || ""}_${item.materialName || ""}_${item.materialModel || ""}_${item.unit || ""}`;
     const old = map.get(key) || {
       summaryKey: key,
@@ -167,52 +146,28 @@
       unit: item.unit || "",
       returnQtyTotal: 0,
     };
-    old.returnQtyTotal += Number(item.returnQty || 0);
+    old.returnQtyTotal += returnQty;
     map.set(key, old);
   });
   return Array.from(map.values());
 };
 
-const loadUserList = async () => {
-  if (userList.value.length > 0) return;
-  const res = await userListNoPageByTenantId();
-  userList.value = res.data || [];
-};
-
 const openReturnSummaryDialog = async () => {
   if (!canOpenReturnSummary.value) {
-    ElMessage.warning("閫�鏂欐暟閲忓ぇ浜�0鏃舵墠鑳介��鏂欑‘璁�");
+    ElMessage.warning("閫�鏂欐暟閲�=棰嗙敤鏁伴噺+琛ユ枡鏁伴噺-瀹為檯鏁伴噺锛屼笖闇�澶т簬0");
     return;
   }
   returnSummaryList.value = buildReturnSummary();
-  approverNodes.value = [{ id: Date.now(), userId: undefined }];
-  await loadUserList();
   returnSummaryDialogVisible.value = true;
-};
-
-const addApproverNode = () => {
-  approverNodes.value.push({ id: Date.now() + Math.random(), userId: undefined });
-};
-
-const removeApproverNode = index => {
-  approverNodes.value.splice(index, 1);
 };
 
 const handleReturnConfirm = async () => {
   if (!props.orderRow?.id) return;
-  const approverList = approverNodes.value
-    .filter(item => item.userId)
-    .map((item, index) => ({ userId: item.userId, sort: index + 1 }));
-  if (approverList.length === 0) {
-    ElMessage.warning("璇疯嚦灏戦�夋嫨涓�浣嶅鎵逛汉");
-    return;
-  }
   materialReturnConfirming.value = true;
   try {
     await confirmMaterialReturn({
       orderId: props.orderRow.id,
       returnSummaryList: returnSummaryList.value,
-      approverList,
     });
     returnSummaryDialogVisible.value = false;
     dialogVisible.value = false;
@@ -223,42 +178,4 @@
 };
 </script>
 
-<style scoped lang="scss">
-.approver-card {
-  margin-top: 12px;
-}
-.card-header-wrapper {
-  display: flex;
-  align-items: center;
-  justify-content: space-between;
-}
-.approver-nodes-container {
-  display: flex;
-  flex-direction: column;
-  gap: 8px;
-}
-.approver-node-item {
-  display: flex;
-  gap: 8px;
-  align-items: center;
-}
-.approver-node-label {
-  display: flex;
-  gap: 4px;
-  min-width: 88px;
-  align-items: center;
-}
-.node-step {
-  width: 20px;
-  height: 20px;
-  line-height: 20px;
-  text-align: center;
-  border-radius: 50%;
-  background: #409eff;
-  color: #fff;
-  font-size: 12px;
-}
-.approver-select {
-  flex: 1;
-}
-</style>
+<style scoped lang="scss"></style>

--
Gitblit v1.9.3