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/procurementManagement/paymentEntry/index.vue |  322 ++++++++++++++++++++++++-----------------------------
 1 files changed, 144 insertions(+), 178 deletions(-)

diff --git a/src/views/procurementManagement/paymentEntry/index.vue b/src/views/procurementManagement/paymentEntry/index.vue
index 28c355b..5b0682b 100644
--- a/src/views/procurementManagement/paymentEntry/index.vue
+++ b/src/views/procurementManagement/paymentEntry/index.vue
@@ -69,13 +69,26 @@
 							type="index"
 							width="60"
 						/>
-						<el-table-column label="浠樻鏃ユ湡" prop="paymentDate" />
+						<el-table-column label="浠樻鏃ユ湡" prop="paymentDate">
+							<template #default="scope">
+								<el-date-picker
+									v-model="scope.row.paymentDate"
+									value-format="YYYY-MM-DD"
+									format="YYYY-MM-DD"
+									type="date"
+									placeholder="璇烽�夋嫨"
+									clearable
+									style="width: 100%"
+									:disabled="!scope.row.editType"
+								/>
+							</template>
+						</el-table-column>
 						<el-table-column label="浠樻閲戦" prop="currentPaymentAmount">
 							<template #default="scope">
 								<el-input-number :step="0.01" :min="0" style="width: 100%"
 																 v-model="scope.row.currentPaymentAmount"
 																 :disabled="!scope.row.editType"
-																 :precision="2"
+																 :precision="3"
 																 placeholder="璇疯緭鍏�"
 																 clearable
 								/>
@@ -95,7 +108,7 @@
 							</template>
 						</el-table-column>
 						<el-table-column label="鐧昏浜�" prop="registrant" />
-						<el-table-column label="鐧昏鏃ユ湡" prop="registrationtDate" />
+						<!-- <el-table-column label="鐧昏鏃ユ湡" prop="registrationtDate" /> -->
 						<el-table-column label="鎿嶄綔" width="150">
 							<template #default="scope">
 								<el-button
@@ -129,10 +142,69 @@
     </div>
     <el-dialog
       v-model="dialogFormVisible"
+			draggable
       :title="operationType === 'add' ? '鏂板浠樻鐧昏' : '缂栬緫浠樻鐧昏'"
-      width="60%"
+      width="90%"
       @close="closeDia"
     >
+      <el-alert
+        v-if="selectedRows.length > 1"
+        :title="`宸查�夋嫨 ${selectedRows.length} 鏉″悎鍚岋紙渚涘簲鍟嗭細${selectedRows[0]?.supplierName}锛塦"
+        type="info"
+        :closable="false"
+        style="margin-bottom: 15px;"
+      />
+      <el-table
+        :data="form.paymentList"
+        border
+        style="margin-top: 20px;"
+      >
+        <el-table-column label="閲囪喘鍚堝悓鍙�" prop="purchaseContractNumber" width="200" />
+        <el-table-column label="渚涘簲鍟嗗悕绉�" prop="supplierName" width="200" />
+        <el-table-column label="鍙戠エ鍙�" prop="invoiceNumber" width="180" />
+        <el-table-column label="鍙戠エ閲戦(鍏�)" prop="invoiceAmount" width="150" />
+        <el-table-column label="寰呬粯娆鹃噾棰�(鍏�)" prop="unPaymentAmountTotal" width="150" />
+        <el-table-column label="鏈浠樻閲戦(鍏�)" width="180">
+          <template #default="scope">
+            <el-input-number
+              :step="0.01"
+              :min="0"
+              :max="scope.row.unPaymentAmountTotal"
+              style="width: 100%"
+              :precision="3"
+              v-model="scope.row.currentPaymentAmount"
+              placeholder="璇疯緭鍏�"
+              clearable
+            />
+          </template>
+        </el-table-column>
+        <el-table-column label="浠樻鏂瑰紡" width="150">
+          <template #default="scope">
+            <el-select
+              v-model="scope.row.paymentMethod"
+              placeholder="璇烽�夋嫨"
+              clearable
+              style="width: 100%"
+            >
+              <el-option label="鐢垫眹" value="鐢垫眹" />
+              <el-option label="鎵垮厬" 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.paymentDate"
+              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"
@@ -142,111 +214,9 @@
       >
         <el-row :gutter="30">
           <el-col :span="12">
-            <el-form-item label="閲囪喘鍚堝悓鍙凤細" prop="purchaseContractNumber">
+            <el-form-item label="鐧昏浜猴細" prop="registrant">
               <el-input
-                v-model="form.purchaseContractNumber"
-                placeholder="鑷姩濉厖"
-                clearable
-                disabled
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="閿�鍞悎鍚屽彿锛�" prop="salesContractNo">
-              <el-input
-                v-model="form.salesContractNo"
-                placeholder="鑷姩濉厖"
-                clearable
-                disabled
-              />
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row :gutter="30">
-          <el-col :span="12">
-            <el-form-item label="渚涘簲鍟嗗悕绉帮細" prop="supplierName">
-              <el-input
-                v-model="form.supplierName"
-                placeholder="鑷姩濉厖"
-                clearable
-                disabled
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="鍙戠エ鍙凤細" prop="invoiceNumber">
-              <el-input
-                v-model="form.invoiceNumber"
-                placeholder="鑷姩濉厖"
-                clearable
-                disabled
-              />
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row :gutter="30">
-          <el-col :span="12">
-            <el-form-item label="鍙戠エ閲戦(鍏�)锛�" prop="invoiceAmount">
-              <el-input
-                v-model="form.invoiceAmount"
-                placeholder="鑷姩濉厖"
-                clearable
-                disabled
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="鏈浠樻閲戦锛�" prop="currentPaymentAmount">
-              <el-input-number :step="0.01" :min="0" style="width: 100%"
-															 :precision="2"
-                v-model="form.currentPaymentAmount"
-                placeholder="璇疯緭鍏�"
-                clearable
-              />
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row :gutter="30">
-          <el-col :span="12">
-            <el-form-item label="浠樻鏂瑰紡锛�" prop="paymentMethod">
-              <el-select
-                v-model="form.paymentMethod"
-                placeholder="璇烽�夋嫨"
-                clearable
-              >
-                <el-option label="鐢垫眹" value="鐢垫眹" />
-                <el-option label="鎵垮厬" value="鎵垮厬" />
-              </el-select>
-            </el-form-item>
-          </el-col>
-					<el-col :span="12">
-						<el-form-item label="浠樻鏃ユ湡锛�" prop="paymentDate">
-							<el-date-picker
-								style="width: 100%"
-								v-model="form.paymentDate"
-								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
-							/>
-						</el-form-item>
-					</el-col>
-          <el-col :span="12">
-            <el-form-item label="鐧昏鏃ユ湡锛�" prop="registrationtDate">
-              <el-input
-                v-model="form.registrationtDate"
+                v-model="form.registrant"
                 placeholder="璇疯緭鍏�"
                 clearable
               />
@@ -283,6 +253,7 @@
 	updatePaymentRegistration
 } from "@/api/procurementManagement/procurementInvoiceLedger.js";
 import useFormData from "@/hooks/useFormData";
+import { getCurrentDate, truncate } from "@/utils/index.js";
 
 const { proxy } = getCurrentInstance();
 const tableColumn = ref([
@@ -295,10 +266,10 @@
     label: "閲囪喘鍚堝悓鍙�",
     prop: "purchaseContractNumber",
   },
-  {
-    label: "閿�鍞悎鍚屽彿",
-    prop: "salesContractNo",
-  },
+  // {
+  //   label: "閿�鍞悎鍚屽彿",
+  //   prop: "salesContractNo",
+  // },
   {
     label: "渚涘簲鍟嗗悕绉�",
     prop: "supplierName",
@@ -327,21 +298,21 @@
     label: "鍙戠エ閲戦(鍏�)",
     prop: "invoiceAmount",
     formatData: (params) => {
-      return params ? parseFloat(params).toFixed(2) : 0;
+      return params ? truncate(parseFloat(params), 3) : 0;
     },
   },
   {
     label: "宸蹭粯娆鹃噾棰�(鍏�)",
     prop: "paymentAmountTotal",
     formatData: (params) => {
-      return params ? parseFloat(params).toFixed(2) : 0;
+      return params ? truncate(parseFloat(params), 3) : 0;
     },
   },
   {
     label: "寰呬粯娆鹃噾棰�(鍏�)",
     prop: "unPaymentAmountTotal",
     formatData: (params) => {
-      return params ? parseFloat(params).toFixed(2) : 0;
+      return params ? truncate(parseFloat(params), 3) : 0;
     },
   },
   {
@@ -367,34 +338,14 @@
 const data = reactive({
   searchForm: {
     supplierNameOrContractNo: "",
-    status: false,
+    status: true,
   },
   form: {
-    purchaseContractNumber: "",
-    purchaseLedgerId: "",
-    salesContractNo: "",
-    supplierName: "",
-    invoiceNumber: "",
-    invoiceAmount: "",
-    taxRate: "",
-    currentPaymentAmount: "",
-    paymentMethod: "",
     registrant: "",
-    registrantId: "",
-    paymentDate: "",
-    registrationtDate: "",
+    paymentList: [],
   },
   rules: {
-    purchaseLedgerId: [
-      { required: true, message: "璇烽�夋嫨", trigger: "change" },
-    ],
-    currentPaymentAmount: [
-      { required: true, message: "璇疯緭鍏�", trigger: "blur" },
-    ],
-    paymentMethod: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
-    invoiceNumber: [
-      { required: true, message: "璇烽�夋嫨閲囪喘鍚堝悓鍙�", trigger: "change" },
-    ],
+    registrant: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
   },
 });
 const { form, rules } = toRefs(data);
@@ -486,6 +437,7 @@
 		id: row.id,
 		currentPaymentAmount: row.currentPaymentAmount,
 		paymentMethod: row.paymentMethod,
+		paymentDate: row.paymentDate,
 	};
 	updatePaymentRegistration(updateData).then((res) => {
 		row.editType = !row.editType;
@@ -499,51 +451,73 @@
 };
 // 鎵撳紑寮规
 const openForm = (type, row) => {
-  if (selectedRows.value.length !== 1) {
-    proxy.$message.error("璇烽�夋嫨涓�鏉″彂绁ㄦ暟鎹�");
+  if (selectedRows.value.length < 1) {
+    proxy.$message.error("璇疯嚦灏戦�夋嫨涓�鏉″彂绁ㄦ暟鎹�");
     return;
   }
-	if (selectedRows.value[0].unPaymentAmountTotal == 0) {
-		proxy.$message.warning("鏃犻渶鍐嶄粯娆�");
-		return;
-	}
+  const firstRow = selectedRows.value[0];
+  const isSameSupplier = selectedRows.value.every(row => row.supplierName === firstRow.supplierName);
+  if (!isSameSupplier) {
+    proxy.$message.error("璇烽�夋嫨鐩稿悓渚涘簲鍟嗗悕绉扮殑鍚堝悓");
+    return;
+  }
+  const hasZeroAmount = selectedRows.value.some(row => row.unPaymentAmountTotal == 0);
+  if (hasZeroAmount) {
+    proxy.$message.warning("鎵�閫夋暟鎹腑瀛樺湪鏃犻渶鍐嶄粯娆剧殑璁板綍");
+    return;
+  }
   operationType.value = type;
   form.value = {};
-  form.value = { ...selectedRows.value[0] };
-  form.value.ticketRegistrationId = selectedRows.value[0].id;
-  form.value.id = null;
-  // 鏌ヨ閲囪喘鍚堝悓鍙�
-  form.value.registrationtDate = getCurrentDate();
-  form.value.paymentDate = getCurrentDate();
   form.value.registrant = userStore.name;
+  form.value.paymentList = selectedRows.value.map(row => ({
+    ticketRegistrationId: row.id,
+    purchaseLedgerId: row.purchaseLedgerId,
+    purchaseContractNumber: row.purchaseContractNumber,
+    supplierName: row.supplierName,
+    invoiceNumber: row.invoiceNumber,
+    invoiceAmount: row.invoiceAmount,
+    unPaymentAmountTotal: row.unPaymentAmountTotal,
+    currentPaymentAmount: row.unPaymentAmountTotal,
+    paymentMethod: "",
+    paymentDate: new Date().toISOString().split('T')[0],
+  }));
   dialogFormVisible.value = true;
 };
 // 鎻愪氦琛ㄥ崟
 const submitForm = () => {
   proxy.$refs["formRef"].validate((valid) => {
     if (valid) {
-      if (operationType.value === "edit") {
-        submitEdit();
-      } else {
-        submitAdd();
+      const submitList = form.value.paymentList.map(item => ({
+        purchaseLedgerId: item.purchaseLedgerId,
+        ticketRegistrationId: item.ticketRegistrationId,
+        purchaseContractNumber: item.purchaseContractNumber,
+        supplierName: item.supplierName,
+        invoiceNumber: item.invoiceNumber,
+        invoiceAmount: item.invoiceAmount,
+        unPaymentAmountTotal: item.unPaymentAmountTotal,
+        currentPaymentAmount: item.currentPaymentAmount,
+        paymentMethod: item.paymentMethod,
+        paymentDate: item.paymentDate,
+        registrant: form.value.registrant,
+      }));
+      
+      const invalidItems = submitList.filter(item => 
+        !item.currentPaymentAmount || 
+        !item.paymentMethod || 
+        !item.paymentDate
+      );
+      
+      if (invalidItems.length > 0) {
+        proxy.$message.error("璇峰畬鍠勬瘡鏉″悎鍚岀殑浠樻淇℃伅");
+        return;
       }
+      
+      paymentRegistrationAdd(submitList).then((res) => {
+        proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
+        closeDia();
+        getList();
+      });
     }
-  });
-};
-// 鎻愪氦鏂板
-const submitAdd = () => {
-  paymentRegistrationAdd(form.value).then((res) => {
-    proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
-    closeDia();
-    getList();
-  });
-};
-// 鎻愪氦淇敼
-const submitEdit = () => {
-  paymentRegistrationEdit(form.value).then((res) => {
-    proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
-    closeDia();
-    getList();
   });
 };
 // 鍏抽棴寮规
@@ -573,14 +547,6 @@
       proxy.$modal.msg("宸插彇娑�");
     });
 };
-// 鑾峰彇褰撳墠鏃ユ湡骞舵牸寮忓寲涓� YYYY-MM-DD
-function getCurrentDate() {
-  const today = new Date();
-  const year = today.getFullYear();
-  const month = String(today.getMonth() + 1).padStart(2, "0"); // 鏈堜唤浠�0寮�濮�
-  const day = String(today.getDate()).padStart(2, "0");
-  return `${year}-${month}-${day}`;
-}
 
 // 瀵煎嚭
 const handleExport = () => {

--
Gitblit v1.9.3