From faf0dbe7ea8859905e22fb7b82f4eb1db5fbd06f Mon Sep 17 00:00:00 2001
From: yyb <995253665@qq.com>
Date: 星期三, 13 五月 2026 17:05:28 +0800
Subject: [PATCH] 销售退货/采购退货:退货数量=总数量-未退货数量

---
 src/views/salesManagement/returnOrder/components/formDia.vue        |    5 ++
 src/views/salesManagement/returnOrder/components/detailDia.vue      |   15 ++++++-
 src/views/procurementManagement/purchaseReturnOrder/New.vue         |   15 ++++++-
 src/views/procurementManagement/purchaseReturnOrder/index.vue       |   15 ++++++-
 src/views/procurementManagement/purchaseReturnOrder/ProductList.vue |   15 ++++++-
 5 files changed, 56 insertions(+), 9 deletions(-)

diff --git a/src/views/procurementManagement/purchaseReturnOrder/New.vue b/src/views/procurementManagement/purchaseReturnOrder/New.vue
index c412ca7..2c6801d 100644
--- a/src/views/procurementManagement/purchaseReturnOrder/New.vue
+++ b/src/views/procurementManagement/purchaseReturnOrder/New.vue
@@ -261,8 +261,11 @@
                                prop="unQuantity"
                                width="130" />
               <el-table-column label="宸查��璐ф暟閲�"
-                               prop="totalReturnNum"
-                               width="130" />
+                               width="130">
+                <template #default="scope">
+                  {{ calcAlreadyReturned(scope.row) }}
+                </template>
+              </el-table-column>
               <el-table-column label="閫�璐ф暟閲�"
                                prop="returnQuantity"
                                width="180">
@@ -526,6 +529,14 @@
   return Number.isNaN(num) ? 0 : num
 }
 
+/** 宸查��璐ф暟閲� = 鍏ュ簱琛屾�绘暟閲� 鈭� 褰撳墠鍙��璐ф暟閲忥紙鍓╀綑锛� */
+const calcAlreadyReturned = (row) => {
+  const total = Number(row?.stockInNum ?? row?.totalQuantity ?? row?.quantity ?? 0)
+  const un = Number(row?.unQuantity ?? 0)
+  if (!Number.isFinite(total) || !Number.isFinite(un)) return 0
+  return Math.max(total - un, 0)
+}
+
 const getReturnTotal = (row) => {
   const qty = toNumber(row?.returnQuantity)
   const unitPrice = toNumber(row?.taxInclusiveUnitPrice)
diff --git a/src/views/procurementManagement/purchaseReturnOrder/ProductList.vue b/src/views/procurementManagement/purchaseReturnOrder/ProductList.vue
index 24d64c6..27fae4a 100644
--- a/src/views/procurementManagement/purchaseReturnOrder/ProductList.vue
+++ b/src/views/procurementManagement/purchaseReturnOrder/ProductList.vue
@@ -38,8 +38,11 @@
                            prop="unQuantity"
                            width="130" />
           <el-table-column label="宸查��璐ф暟閲�"
-                           prop="totalReturnNum"
-                           width="130" />
+                           width="130">
+            <template #default="scope">
+              {{ calcAlreadyReturned(scope.row) }}
+            </template>
+          </el-table-column>
           <!-- <el-table-column label="搴撳瓨棰勮鏁伴噺"
                            prop="warnNum"
                            width="120"
@@ -116,6 +119,14 @@
   return parseFloat(cellValue).toFixed(2);
 };
 
+/** 宸查��璐ф暟閲� = 鍏ュ簱琛屾�绘暟閲� 鈭� 褰撳墠鍙��璐ф暟閲忥紙鍓╀綑锛� */
+const calcAlreadyReturned = (row) => {
+  const total = Number(row?.stockInNum ?? row?.totalQuantity ?? row?.quantity ?? 0)
+  const un = Number(row?.unQuantity ?? 0)
+  if (!Number.isFinite(total) || !Number.isFinite(un)) return 0
+  return Math.max(total - un, 0)
+}
+
 const handleChangeSelection = (val) => {
   selectedRows.value = val;
 }
diff --git a/src/views/procurementManagement/purchaseReturnOrder/index.vue b/src/views/procurementManagement/purchaseReturnOrder/index.vue
index 3986f03..f8866e1 100644
--- a/src/views/procurementManagement/purchaseReturnOrder/index.vue
+++ b/src/views/procurementManagement/purchaseReturnOrder/index.vue
@@ -146,8 +146,11 @@
                            prop="unQuantity"
                            width="100" />
           <el-table-column label="宸查��璐ф暟閲�"
-                           prop="totalReturnNum"
-                           width="100" />
+                           width="100">
+            <template #default="scope">
+              {{ calcAlreadyReturned(scope.row) }}
+            </template>
+          </el-table-column>
           <!-- <el-table-column label="搴撳瓨棰勮鏁伴噺" prop="warnNum" width="120" /> -->
           <!-- <el-table-column label="绋庣巼(%)" prop="taxRate" width="90" /> -->
           <el-table-column
@@ -458,6 +461,14 @@
   return num.toFixed(2);
 };
 
+/** 宸查��璐ф暟閲� = 鍏ュ簱琛屾�绘暟閲� 鈭� 褰撳墠鍙��璐ф暟閲忥紙鍓╀綑锛� */
+const calcAlreadyReturned = (row) => {
+  const total = Number(row?.stockInNum ?? row?.totalQuantity ?? row?.quantity ?? 0);
+  const un = Number(row?.unQuantity ?? 0);
+  if (!Number.isFinite(total) || !Number.isFinite(un)) return 0;
+  return Math.max(total - un, 0);
+};
+
 onMounted(() => {
   getList();
 });
diff --git a/src/views/salesManagement/returnOrder/components/detailDia.vue b/src/views/salesManagement/returnOrder/components/detailDia.vue
index e4a69f3..ecc663f 100644
--- a/src/views/salesManagement/returnOrder/components/detailDia.vue
+++ b/src/views/salesManagement/returnOrder/components/detailDia.vue
@@ -20,7 +20,11 @@
 
       <div style="padding-top: 20px">
         <span class="descriptions">浜у搧鍒楄〃</span>
-        <PIMTable :isShowPagination="false" rowKey="id" :column="tableColumn" :tableData="tableData" />
+        <PIMTable :isShowPagination="false" rowKey="id" :column="tableColumn" :tableData="tableData">
+          <template #totalReturnNum="{ row }">
+            {{ calcAlreadyReturned(row) }}
+          </template>
+        </PIMTable>
       </div>
     </div>
     <template #footer>
@@ -101,6 +105,13 @@
 const firstNonEmptyText = (...vals) => {
   const hit = vals.find((v) => !isEmptyText(v));
   return hit === undefined ? "" : hit;
+};
+
+const calcAlreadyReturned = (row) => {
+  const total = Number(row?.stockOutNum ?? row?.totalQuantity ?? row?.totalReturnNum ?? 0);
+  const un = Number(row?.unQuantity ?? 0);
+  if (!Number.isFinite(total) || !Number.isFinite(un)) return 0;
+  return Math.max(total - un, 0);
 };
 
 /** 璇︽儏琛ㄧ敤 productName / model锛涘悎骞舵椂鍕胯绌轰覆鐩栨帀鍑哄簱琛屽瓧娈� */
@@ -241,7 +252,7 @@
   {align: "center", label: "瑙勬牸鍨嬪彿", prop: "model"},
   {align: "center", label: "鍗曚綅", prop: "unit", width: 80},
   {align: "center", label: "鎬绘暟閲�", prop: "stockOutNum", width: 120},
-  {align: "center", label: "宸查��璐ф暟閲�", prop: "totalReturnNum", width: 120},
+  {align: "center", label: "宸查��璐ф暟閲�", prop: "totalReturnNum", width: 120, dataType: "slot", slot: "totalReturnNum"},
   {align: "center", label: "鏈��璐ф暟閲�", prop: "unQuantity", width: 120},
   {align: "center", label: "閫�璐ф暟閲�", prop: "returnQuantity", width: 120},
   {align: "center", label: "閫�璐т骇鍝佸崟浠�", prop: "price", width: 120},
diff --git a/src/views/salesManagement/returnOrder/components/formDia.vue b/src/views/salesManagement/returnOrder/components/formDia.vue
index fe0a75c..6a6d756 100644
--- a/src/views/salesManagement/returnOrder/components/formDia.vue
+++ b/src/views/salesManagement/returnOrder/components/formDia.vue
@@ -82,6 +82,9 @@
             <el-button type="primary" @click="openProductSelection" :disabled="!form.shippingId">娣诲姞浜у搧</el-button>
           </div>
           <PIMTable :isShowPagination="false" rowKey="id" :column="tableColumn" :tableData="tableData">
+            <template #totalReturnNum="{ row }">
+              {{ calcAlreadyReturned(row) }}
+            </template>
             <template #returnQuantity="{ row }">
               <el-input 
                 v-model="row.returnQuantity" 
@@ -223,7 +226,7 @@
   {align: "center", label: "瑙勬牸鍨嬪彿", prop: "specificationModel" },
   {align: "center", label: "鍗曚綅", prop: "unit", width: 80 },
   {align: "center", label: "鎬绘暟閲�", prop: "stockOutNum", width: 120 },
-  {align: "center", label: "宸查��璐ф暟閲�", prop: "totalReturnNum", width: 120 },
+  {align: "center", label: "宸查��璐ф暟閲�", prop: "totalReturnNum", width: 120, dataType: "slot", slot: "totalReturnNum" },
   {align: "center", label: "鏈��璐ф暟閲�", prop: "unQuantity", width: 120 },
   {align: "center", label: "閫�璐ф暟閲�", prop: "returnQuantity", dataType: "slot", slot: "returnQuantity", width: 120 },
   {align: "center", label: "閫�璐т骇鍝佸崟浠�", prop: "price", dataType: "slot", slot: "price", width: 120 },

--
Gitblit v1.9.3