From 9f396e3cc7f18fb626931d01190ecac6235e4790 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期二, 24 三月 2026 09:32:49 +0800
Subject: [PATCH] 新疆海川开心 1.回款登记、付款登记要能批量操作

---
 src/views/salesManagement/receiptPayment/index.vue |  303 ++++++++++++++++++++-----------------------------
 1 files changed, 125 insertions(+), 178 deletions(-)

diff --git a/src/views/salesManagement/receiptPayment/index.vue b/src/views/salesManagement/receiptPayment/index.vue
index 995bd24..80441b0 100644
--- a/src/views/salesManagement/receiptPayment/index.vue
+++ b/src/views/salesManagement/receiptPayment/index.vue
@@ -13,24 +13,6 @@
                 prefix-icon="Search"
               />
             </el-form-item>
-            <el-form-item label="瀹㈡埛鍚堝悓鍙�">
-              <el-input
-                v-model="searchForm.customerContractNo"
-                placeholder="璇疯緭鍏�"
-                @change="handleQuery"
-                clearable
-                prefix-icon="Search"
-              />
-            </el-form-item>
-            <el-form-item label="椤圭洰鍚嶇О">
-              <el-input
-                v-model="searchForm.projectName"
-                placeholder="璇疯緭鍏�"
-                @change="handleQuery"
-                clearable
-                prefix-icon="Search"
-              />
-            </el-form-item>
             <el-form-item>
               <el-checkbox
                 v-model="searchForm.status"
@@ -50,7 +32,7 @@
         <div></div>
         <div>
           <el-button type="primary" @click="openForm('add')">
-            鏂板鍥炴
+            鍥炴鐧昏
           </el-button>
           <el-button icon="Download" @click="handleOut"> 瀵煎嚭 </el-button>
         </div>
@@ -113,7 +95,6 @@
                 </template>
               </el-table-column>
               <el-table-column label="鐧昏浜�" prop="registrant" width="90"/>
-              <el-table-column label="鐧昏鏃ユ湡" prop="createTime"   width="130"/>
               <el-table-column label="鎿嶄綔" width="150" align="center">
                 <template #default="scope">
                   <el-button
@@ -122,7 +103,6 @@
                     size="small"
                     @click="changeEditType(scope.row)"
                     v-if="!scope.row.editType"
-										:disabled="scope.row.registrant !== userStore.nickName"
                     >缂栬緫</el-button
                   >
                   <el-button
@@ -131,7 +111,6 @@
                     size="small"
                     @click="saveReceiptPayment(scope.row)"
                     v-if="scope.row.editType"
-										:disabled="scope.row.registrant !== userStore.nickName"
                     >淇濆瓨</el-button
                   >
                   <el-button
@@ -139,7 +118,6 @@
                     type="primary"
                     size="small"
                     @click="delReceiptRecord(scope.row)"
-										:disabled="scope.row.registrant !== userStore.nickName"
                     >鍒犻櫎</el-button
                   >
                 </template>
@@ -155,23 +133,10 @@
           width="240"
         />
         <el-table-column
-          label="瀹㈡埛鍚堝悓鍙�"
-          prop="customerContractNo"
-          show-overflow-tooltip
-          width="240"
-
-        />
-        <el-table-column
           label="瀹㈡埛鍚嶇О"
           prop="customerName"
           show-overflow-tooltip
           width="240"
-        />
-        <el-table-column
-          label="椤圭洰鍚嶇О"
-          prop="projectName"
-          show-overflow-tooltip
-          width="340"
         />
         <el-table-column
           label="鍥炴鐘舵��"
@@ -184,12 +149,12 @@
             </el-tag>
           </template>
         </el-table-column>
-        <el-table-column
-          label="浜у搧澶х被"
-          prop="productCategory"
-          show-overflow-tooltip
-          width="100"
-        />
+<!--        <el-table-column-->
+<!--          label="浜у搧澶х被"-->
+<!--          prop="productCategory"-->
+<!--          show-overflow-tooltip-->
+<!--          width="100"-->
+<!--        />-->
         <el-table-column
           label="鍙戠エ鍙�"
           prop="invoiceNo"
@@ -235,10 +200,73 @@
     </div>
     <el-dialog
       v-model="dialogFormVisible"
+			draggable
       title="鏂板鍥炴椤甸潰"
-      width="70%"
+      width="90%"
       @close="closeDia"
     >
+      <el-alert
+        v-if="selectedRows.length > 1"
+        :title="`宸查�夋嫨 ${selectedRows.length} 鏉″悎鍚岋紙瀹㈡埛锛�${selectedRows[0]?.customerName}锛塦"
+        type="info"
+        :closable="false"
+        style="margin-bottom: 15px;"
+      />
+      <el-table
+        :data="form.paymentList"
+        border
+        style="margin-top: 20px;"
+      >
+        <el-table-column label="閿�鍞悎鍚屽彿" prop="salesContractNo" width="200" />
+        <el-table-column label="瀹㈡埛鍚嶇О" prop="customerName" width="200" />
+        <el-table-column label="鍙戠エ鍙�" prop="invoiceNo" width="180" />
+        <el-table-column label="鍙戠エ閲戦(鍏�)" prop="invoiceTotal" width="150" />
+        <el-table-column label="寰呭洖娆鹃噾棰�(鍏�)" prop="noReceiptAmount" width="150" />
+        <el-table-column label="鏈鍥炴閲戦(鍏�)">
+          <template #default="scope">
+            <el-input-number
+              :step="0.01"
+              :min="0"
+              :max="scope.row.noReceiptAmount"
+              style="width: 100%"
+              :precision="2"
+              v-model="scope.row.receiptPaymentAmount"
+              placeholder="璇疯緭鍏�"
+              clearable
+            />
+          </template>
+        </el-table-column>
+        <el-table-column label="鍥炴鏂瑰紡" width="150">
+          <template #default="scope">
+            <el-select
+              v-model="scope.row.receiptPaymentType"
+              placeholder="璇烽�夋嫨"
+              clearable
+              style="width: 100%"
+            >
+              <el-option
+                v-for="item in receipt_payment_type"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value"
+              />
+            </el-select>
+          </template>
+        </el-table-column>
+        <el-table-column label="鍥炴鏃ユ湡" width="180">
+          <template #default="scope">
+            <el-date-picker
+              style="width: 100%"
+              v-model="scope.row.receiptPaymentDate"
+              value-format="YYYY-MM-DD"
+              format="YYYY-MM-DD"
+              type="date"
+              placeholder="璇烽�夋嫨"
+              clearable
+            />
+          </template>
+        </el-table-column>
+      </el-table>
       <el-form
         :model="form"
         label-width="140px"
@@ -248,111 +276,14 @@
       >
         <el-row :gutter="30">
           <el-col :span="12">
-            <el-form-item label="閿�鍞悎鍚屽彿锛�" prop="salesContractNo">
+            <el-form-item label="鐧昏浜猴細" prop="registrant">
               <el-input
-                v-model="form.salesContractNo"
-                placeholder="鑷姩濉厖"
-                disabled
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="瀹㈡埛鍚嶇О锛�" prop="customerName">
-              <el-input
-                v-model="form.customerName"
-                placeholder="鑷姩濉厖"
-                disabled
-              />
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row :gutter="30">
-          <el-col :span="12">
-            <el-form-item label="鍙戠エ鍙凤細" prop="invoiceNo">
-              <el-input
-                v-model="form.invoiceNo"
-                placeholder="鑷姩濉厖"
-                disabled
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="鍙戠エ閲戦(鍏�)锛�" prop="invoiceTotal">
-              <el-input
-                type="number"
-                v-model="form.invoiceTotal"
-                placeholder="鑷姩濉厖"
-                :step="0.01"
-                disabled
-              />
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row :gutter="30">
-          <el-col :span="12">
-            <el-form-item label="绋庣巼锛�" prop="taxRate">
-              <el-input
-                type="number"
-                v-model="form.taxRate"
-                placeholder="鑷姩濉厖"
-                :step="0.01"
-                disabled
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="鏈鍥炴閲戦锛�" prop="receiptPaymentAmount">
-              <el-input-number :step="0.01" :min="0" style="width: 100%"
-															 :precision="2"
-                v-model="form.receiptPaymentAmount"
+                v-model="form.registrant"
                 placeholder="璇疯緭鍏�"
                 clearable
               />
             </el-form-item>
           </el-col>
-        </el-row>
-        <el-row :gutter="30">
-          <el-col :span="12">
-            <el-form-item label="鍥炴褰㈠紡锛�" prop="receiptPaymentType">
-              <el-select
-                v-model="form.receiptPaymentType"
-                placeholder="璇烽�夋嫨"
-                clearable
-              >
-                <el-option
-                  v-for="item in receipt_payment_type"
-                  :key="item.value"
-                  :label="item.label"
-                  :value="item.value"
-                />
-              </el-select>
-            </el-form-item>
-          </el-col>
-					<el-col :span="12">
-						<el-form-item label="鍥炴鏃ユ湡锛�" prop="receiptPaymentDate">
-							<el-date-picker
-								style="width: 100%"
-								v-model="form.receiptPaymentDate"
-								value-format="YYYY-MM-DD"
-								format="YYYY-MM-DD"
-								type="date"
-								placeholder="璇烽�夋嫨"
-								clearable
-							/>
-						</el-form-item>
-					</el-col>
-        </el-row>
-        <el-row :gutter="30">
-					<el-col :span="12">
-						<el-form-item label="鐧昏浜猴細" prop="registrant">
-							<el-input
-								v-model="form.registrant"
-								placeholder="璇疯緭鍏�"
-								clearable
-								disabled
-							/>
-						</el-form-item>
-					</el-col>
         </el-row>
       </el-form>
       <template #footer>
@@ -402,32 +333,11 @@
     projectName: "",
   },
   form: {
-    salesContractNo: "",
-    customerName: "",
-    invoiceNo: "",
-    invoiceTotal: "",
-    taxRate: "",
-    receiptPaymentAmount: "",
-    receiptPaymentType: "",
     registrant: "",
-    receiptPaymentDate: "",
+    paymentList: [],
   },
   rules: {
-    salesContractNo: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
-    customerName: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
-    invoiceNo: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
-    invoiceTotal: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
-    taxRate: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
-    receiptPaymentAmount: [
-      { required: true, message: "璇烽�夋嫨", trigger: "change" },
-    ],
-    receiptPaymentType: [
-      { required: true, message: "璇烽�夋嫨", trigger: "change" },
-    ],
     registrant: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
-    receiptPaymentDate: [
-      { required: true, message: "璇烽�夋嫨", trigger: "change" },
-    ],
   },
 });
 const { form, rules } = toRefs(data);
@@ -504,9 +414,7 @@
 // 琛ㄦ牸閫夋嫨鏁版嵁
 const handleSelectionChange = (selection) => {
   console.log("selection", selection);
-  selectedRows.value = selection.filter(
-    (item) => item.customerContractNo !== null
-  );
+  selectedRows.value = selection
 };
 // 涓昏〃鍚堣鏂规硶
 const summarizeMainTable = (param) => {
@@ -526,27 +434,66 @@
 // 鎵撳紑寮规
 const openForm = () => {
   form.value = {};
-  if (selectedRows.value.length !== 1) {
-    proxy.$modal.msgError("璇烽�夋嫨涓�鏉℃暟鎹�");
+  if (selectedRows.value.length < 1) {
+    proxy.$modal.msgError("璇疯嚦灏戦�夋嫨涓�鏉℃暟鎹�");
     return;
   }
-  if (selectedRows.value[0].noReceiptAmount == 0) {
-    proxy.$modal.msgWarning("鏃犻渶鍐嶅洖娆�");
+  const firstRow = selectedRows.value[0];
+  const isSameCustomer = selectedRows.value.every(row => row.customerName === firstRow.customerName);
+  if (!isSameCustomer) {
+    proxy.$modal.msgError("璇烽�夋嫨鐩稿悓瀹㈡埛鍚嶇О鐨勫悎鍚�");
     return;
   }
-  invoiceInfo({ id: selectedRows.value[0].id }).then((res) => {
-    form.value = { ...res.data };
-    form.value.invoiceLedgerId = form.value.id;
-    form.value.id = "";
-    form.value.registrant = userStore.nickName;
-  });
+  const hasZeroAmount = selectedRows.value.some(row => row.noReceiptAmount == 0);
+  if (hasZeroAmount) {
+    proxy.$modal.msgWarning("鎵�閫夋暟鎹腑瀛樺湪鏃犻渶鍐嶅洖娆剧殑璁板綍");
+    return;
+  }
+  form.value.registrant = userStore.nickName;
+  form.value.paymentList = selectedRows.value.map(row => ({
+    invoiceLedgerId: row.id,
+    salesContractNo: row.salesContractNo,
+    customerName: row.customerName,
+    invoiceNo: row.invoiceNo,
+    invoiceTotal: row.invoiceTotal,
+    noReceiptAmount: row.noReceiptAmount,
+    taxRate: row.taxRate,
+    receiptPaymentAmount: row.noReceiptAmount,
+    receiptPaymentType: "",
+    receiptPaymentDate: new Date().toISOString().split('T')[0],
+  }));
   dialogFormVisible.value = true;
 };
 // 鎻愪氦琛ㄥ崟
 const submitForm = () => {
   proxy.$refs["formRef"].validate((valid) => {
     if (valid) {
-      receiptPaymentSaveOrUpdate(form.value).then((res) => {
+      const submitList = form.value.paymentList.map(item => ({
+        invoiceLedgerId: item.invoiceLedgerId,
+        invoiceNo: item.invoiceNo,
+        invoiceTotal: item.invoiceTotal,
+        noReceiptAmount: item.noReceiptAmount,
+        customerName: item.customerName,
+        salesContractNo: item.salesContractNo,
+        taxRate: item.taxRate,
+        receiptPaymentAmount: item.receiptPaymentAmount,
+        receiptPaymentType: item.receiptPaymentType,
+        receiptPaymentDate: item.receiptPaymentDate,
+        registrant: form.value.registrant,
+      }));
+      
+      const invalidItems = submitList.filter(item => 
+        !item.receiptPaymentAmount || 
+        !item.receiptPaymentType || 
+        !item.receiptPaymentDate
+      );
+      
+      if (invalidItems.length > 0) {
+        proxy.$modal.msgError("璇峰畬鍠勬瘡鏉″悎鍚岀殑鍥炴淇℃伅");
+        return;
+      }
+      
+      receiptPaymentSaveOrUpdate(submitList).then((res) => {
         proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
         closeDia();
         getList();

--
Gitblit v1.9.3