From 757d06679e650689be15e310c39450148ef12015 Mon Sep 17 00:00:00 2001
From: zouyu <2723363702@qq.com>
Date: 星期三, 01 七月 2026 17:21:12 +0800
Subject: [PATCH] 销售退货:调整新增和编辑时计算可退货数量的逻辑

---
 src/views/salesManagement/returnOrder/components/formDia.vue |   81 +++++++++++++++++++++++-----------------
 1 files changed, 46 insertions(+), 35 deletions(-)

diff --git a/src/views/salesManagement/returnOrder/components/formDia.vue b/src/views/salesManagement/returnOrder/components/formDia.vue
index 81d9487..40c98dc 100644
--- a/src/views/salesManagement/returnOrder/components/formDia.vue
+++ b/src/views/salesManagement/returnOrder/components/formDia.vue
@@ -82,32 +82,29 @@
             <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" 
-                style="width:100px" 
-                placeholder="璇疯緭鍏�" 
+              <el-input
+                v-model="row.returnQuantity"
+                style="width:100px"
+                placeholder="璇疯緭鍏�"
                 type="number"
                 @input="(val) => handleReturnQuantityChange(val, row)"
               />
             </template>
             <template #price="{ row }">
-              <el-input 
-                v-model="row.price" 
-                style="width:100px" 
-                placeholder="璇疯緭鍏�" 
+              <el-input
+                v-model="row.price"
+                style="width:100px"
+                placeholder="璇疯緭鍏�"
                 type="number"
                 @input="(val) => handlePriceChange(val, row)"
               />
             </template>
             <template #amount="{ row }">
-              <el-input 
-                v-model="row.amount" 
-                style="width:100px" 
-                placeholder="鑷姩璁$畻" 
+              <el-input
+                v-model="row.amount"
+                style="width:100px"
+                placeholder="鑷姩璁$畻"
                 type="number"
                 disabled
               />
@@ -119,10 +116,10 @@
               </el-select>
             </template>
             <template #remark="{ row }">
-              <el-input 
-                v-model="row.remark" 
-                style="width:130px" 
-                placeholder="璇疯緭鍏�" 
+              <el-input
+                v-model="row.remark"
+                style="width:130px"
+                placeholder="璇疯緭鍏�"
               />
             </template>
             <template #action="{ index }">
@@ -140,9 +137,9 @@
     </el-dialog>
 
     <el-dialog v-model="productSelectionVisible" title="閫夋嫨浜у搧" width="70%" append-to-body>
-      <el-table 
-        :data="availableProducts" 
-        style="width: 100%" 
+      <el-table
+        :data="availableProducts"
+        style="width: 100%"
         @selection-change="handleSelectionChange"
         ref="productTableRef"
         row-key="id"
@@ -154,11 +151,9 @@
         <el-table-column align="center" prop="specificationModel" label="瑙勬牸鍨嬪彿" />
         <el-table-column align="center" prop="unit" label="鍗曚綅" />
         <el-table-column align="center" prop="stockOutNum" label="鎬绘暟閲�" />
+        <el-table-column align="center" label="宸查��璐ф暟閲�" prop="totalReturnNum"></el-table-column>
         <el-table-column align="center" prop="unQuantity" label="鏈��璐ф暟閲�" />
-        <el-table-column align="center" label="宸查��璐ф暟閲�">
-          <template #default="{ row }">{{ calcAlreadyReturned(row) }}</template>
-        </el-table-column>
-
+        <el-table-column align="center" prop="pendingReturnNum" label="寰呭鐞嗛��璐ф暟閲�" />
       </el-table>
       <template #footer>
         <div class="dialog-footer">
@@ -226,7 +221,8 @@
   {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, dataType: "slot", slot: "totalReturnNum" },
+  {align: "center", label: "宸查��璐ф暟閲�", prop: "totalReturnNum", width: 120 },
+  {align: "center", label: "寰呭鐞嗛��璐ф暟閲�", prop: "pendingReturnNum", width: 120 },
   {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 },
@@ -559,6 +555,18 @@
   proxy.resetForm("formRef");
   dialogFormVisible.value = false;
   emit('close');
+  data.form = {
+        returnNoCheckbox: true,
+        returnNo: "",
+        customerId: "",
+        shippingId: "",
+        projectId: "",
+        maker: "",
+        makeTime: "",
+        status: 0,
+        returnReason: "",
+        refundAmount: "",
+  }
 };
 
 const initCustomers = async () => {
@@ -601,7 +609,7 @@
     form.value.shippingId = "";
     outboundOptions.value = [];
   }
-  
+
   // Find customer name for getSalesLedger if it requires name
   const customer = customerNameOptions.value.find(c => c.id === val);
   if (!customer) return;
@@ -609,7 +617,7 @@
   // Assuming getSalesLedger takes customerName. If it takes ID, adjust accordingly.
   // Previous code used customerName. Let's try passing customerName.
   getSalesLedger({
-    customerName: customer.label, 
+    customerName: customer.label,
   }).then(res => {
     if(res.code === 200){
       outboundOptions.value = res.data.map(item => ({
@@ -626,7 +634,7 @@
   if(res.code === 200){
     // If backend returns project info, set it
     if (res.data.projectId) form.value.projectId = res.data.projectId;
-    
+
     availableProducts.value = mergeShippingProductLists(res.data);
     if (clearTable) tableData.value = [];
   }
@@ -634,9 +642,12 @@
 
 const handleReturnQuantityChange = (val, row) => {
   if (val === "" || val === null) return;
-  const max = row.unQuantity === undefined || row.unQuantity === null ? Infinity : Number(row.unQuantity || 0);
+  const unQuantity = row.unQuantity === undefined || row.unQuantity === null ? Infinity : Number(row.unQuantity || 0);//鏈��璐ф暟閲�
+  const pendingReturnNum = row.pendingReturnNum === undefined || row.pendingReturnNum === null ? Infinity : Number(row.pendingReturnNum || 0);//寰呭鐞嗛��璐ф暟閲�
+  //鏈�澶ч��璐ф暟閲忥紝濡傛灉涓虹紪杈戠姸鎬佸姞涓婂緟澶勭悊閫�璐ф暟閲�
+  const max = operationType.value === 'edit' ? unQuantity + pendingReturnNum : unQuantity
   const current = Number(val);
-  
+
   if (current > max) {
     proxy.$nextTick(() => {
       row.returnQuantity = max;
@@ -702,7 +713,7 @@
 // Removed checkSelectable to allow toggling existing items
 const confirmProductSelection = () => {
   const newTableData = [];
-  
+
   selectedProducts.value.forEach(product => {
     const existing = tableData.value.find(item => item.id === product.id);
     if (existing) {
@@ -710,7 +721,7 @@
     } else {
       newTableData.push({
         ...product,
-        returnSaleLedgerProductId: product.id, 
+        returnSaleLedgerProductId: product.id,
         productModelId: product.productModelId,
         returnQuantity: 0,
         num: 0,
@@ -728,7 +739,7 @@
       });
     }
   });
-  
+
   tableData.value = newTableData;
   productSelectionVisible.value = false;
 };

--
Gitblit v1.9.3