From 93f8c736fd50a80a72d633e888e2d65904bcd7fc Mon Sep 17 00:00:00 2001
From: sen <sen@qq.com>
Date: 星期日, 01 二月 2026 18:34:27 +0800
Subject: [PATCH] 修改

---
 ui/admin-ui3/src/components/SettlementDialog/index.vue |  181 +++++++++++++++++++++++++++++++-------------
 1 files changed, 126 insertions(+), 55 deletions(-)

diff --git a/ui/admin-ui3/src/components/SettlementDialog/index.vue b/ui/admin-ui3/src/components/SettlementDialog/index.vue
index 2daf7f3..918ac09 100644
--- a/ui/admin-ui3/src/components/SettlementDialog/index.vue
+++ b/ui/admin-ui3/src/components/SettlementDialog/index.vue
@@ -6,7 +6,7 @@
             <el-descriptions-item label="璐﹀崟鍚嶇О">{{ billInfo.billName }}</el-descriptions-item>
             <el-descriptions-item v-if="type == 'receivable'" label="瀹㈡埛鍚嶇О">{{ billInfo.customerName
                 }}</el-descriptions-item>
-            <el-descriptions-item v-if="type == 'payable'" label="渚涘簲鍟嗗悕绉�">{{ billInfo.customerName
+            <el-descriptions-item v-if="type == 'payable'" label="渚涘簲鍟嗗悕绉�">{{ billInfo.supplierName
                 }}</el-descriptions-item>
 
             <el-descriptions-item label="鍗曟嵁鏁伴噺">{{ billInfo.documentCount }}</el-descriptions-item>
@@ -16,7 +16,7 @@
             <el-descriptions-item label="甯佸埗">{{ billInfo.currency }}</el-descriptions-item>
 
             <el-descriptions-item label="鍑忓厤閲戦">{{ billInfo.discountAmount }}</el-descriptions-item>
-            <el-descriptions-item v-if="type == 'receivable'" label="宸叉敹閲戦">{{ billInfo.receivedAmount
+            <el-descriptions-item v-if="type == 'receivable'" label="宸叉敹閲戦1">{{ billInfo.receivedAmount
                 }}</el-descriptions-item>
             <el-descriptions-item v-if="type == 'payable'" label="宸蹭粯閲戦">{{ billInfo.receivedAmount
                 }}</el-descriptions-item>
@@ -71,29 +71,30 @@
                         </el-input>
                     </el-form-item>
                 </el-col>
-                <!-- <el-col :span="8" v-if="type == 'payable'">
-                    <el-form-item label="浠樻閾惰璐︽埛" prop="customerAccount">
-                        <el-input v-model="formData.customerAccount" placeholder="鐐瑰嚮閫夋嫨">
+                <el-col :span="8" v-if="type == 'payable'">
+                    <el-form-item label="浠樻閾惰璐︽埛" prop="paymentBankAccount">
+                        <el-input v-model="formData.paymentBankAccount" @click="openBankDialog('receiving')"
+                            placeholder="鐐瑰嚮閫夋嫨">
                             <template #append>
-                                <el-button icon="Search" @click="handleSelectAccount('customer')" />
+                                <el-button icon="Search" @click="openBankDialog('receiving')" />
                             </template>
                         </el-input>
                     </el-form-item>
-                </el-col> -->
+                </el-col>
                 <el-col :span="8" v-if="type == 'receivable'">
                     <el-form-item label="瀹㈡埛寮�鎴疯">
                         <el-input v-model="formData.customerBank" disabled />
                     </el-form-item>
                 </el-col>
-                <!-- <el-col :span="8" v-if="type == 'payable'">
+                <el-col :span="8" v-if="type == 'payable'">
                     <el-form-item label="浠樻璐︽埛寮�鎴疯">
-                        <el-input v-model="formData.customerBank" disabled />
+                        <el-input v-model="formData.paymentBank" disabled />
                     </el-form-item>
-                </el-col> -->
+                </el-col>
             </el-row>
 
             <el-row :gutter="20">
-                <el-col :span="8">
+                <el-col :span="8" v-if="type == 'receivable'">
                     <el-form-item label="鏀舵閾惰璐︽埛" prop="receivingBankAccount">
                         <el-input v-model="formData.receivingBankAccount" @click="openBankDialog('receiving')" readonly
                             placeholder="璇疯緭鍏ユ敹娆鹃摱琛岃处鎴�">
@@ -103,23 +104,33 @@
                         </el-input>
                     </el-form-item>
                 </el-col>
-                <el-col :span="8">
+                <el-col :span="8" v-if="type == 'receivable'">
                     <el-form-item label="鏀舵璐︽埛寮�鎴疯">
                         <el-input v-model="formData.receivingBank" disabled />
                     </el-form-item>
                 </el-col>
+                <el-col :span="8" v-if="type == 'payable'">
+                    <el-form-item label="鏀舵閾惰璐︽埛" prop="supplierReceivingAccount">
+                        <el-input v-model="formData.supplierReceivingAccount" @click="openBankIsibleDialog" readonly
+                            placeholder="璇疯緭鍏ユ敹娆鹃摱琛岃处鎴�">
+                            <template #append>
+                                <el-button icon="Search" @click="openBankIsibleDialog" />
+                            </template>
+                        </el-input>
+                    </el-form-item>
+                </el-col>
+                <el-col :span="8" v-if="type == 'payable'">
+                    <el-form-item label="鏀舵璐︽埛寮�鎴疯">
+                        <el-input v-model="formData.supplierReceivingBank" disabled />
+                    </el-form-item>
+                </el-col>
                 <!-- 灏� -->
-                <el-col :span="8" v-if="type == 'receivable'">
-                    <el-form-item label="鏀舵浜�">
-                        <el-input v-model="formData.operator"  />
+                <el-col :span="8" v-if="['receivable', 'payable'].includes(type)">
+                    <el-form-item :label="type === 'receivable' ? '鏀舵浜�' : '浠樻浜�'">
+                        <el-input v-model="formData.payee" />
                     </el-form-item>
                 </el-col>
 
-                <!-- <el-col :span="8" v-if="type == 'payable'">
-                    <el-form-item label="鏀舵閾惰璐︽埛">
-                        <el-input v-model="formData.operator" disabled />
-                    </el-form-item>
-                </el-col> -->
             </el-row>
 
             <el-row :gutter="20">
@@ -129,34 +140,34 @@
                             style="width: 100%" value-format="YYYY-MM-DD" />
                     </el-form-item>
                 </el-col>
-                <!-- <el-col :span="8" v-if="type == 'payable'">
-                    <el-form-item label="浠樻鏃ユ湡" prop="settleDate">
-                        <el-date-picker v-model="formData.settleDate" type="date" placeholder="璇烽�夋嫨鏃ユ湡"
+                <el-col :span="8" v-if="type == 'payable'">
+                    <el-form-item label="浠樻鏃ユ湡" prop="paymentDate">
+                        <el-date-picker v-model="formData.paymentDate" type="date" placeholder="璇烽�夋嫨鏃ユ湡"
                             style="width: 100%" value-format="YYYY-MM-DD" />
                     </el-form-item>
-                </el-col> -->
+                </el-col>
                 <el-col :span="8" v-if="type == 'receivable'">
                     <el-form-item label="鏀舵閲戦" prop="receiptAmount">
                         <el-input-number v-model="formData.receiptAmount" :precision="2" :min="0" style="width: 100%"
                             @change="calcRemaining" />
                     </el-form-item>
                 </el-col>
-                <!-- <el-col :span="8" v-if="type == 'payable'">
-                    <el-form-item label="浠樻閲戦" prop="settleAmount">
-                        <el-input-number v-model="formData.settleAmount" :precision="2" :step="0.1" :min="0"
-                            style="width: 100%" @change="calcRemaining" />
+                <el-col :span="8" v-if="type == 'payable'">
+                    <el-form-item label="浠樻閲戦" prop="paymentAmount">
+                        <el-input-number v-model="formData.paymentAmount" :precision="2" :step="0.1" :min="0"
+                            style="width: 100%" @change="calcRemainingA" />
                     </el-form-item>
-                </el-col> -->
+                </el-col>
                 <el-col :span="8" v-if="type == 'receivable'">
                     <el-form-item label="鏀舵鍚庡緟鏀堕噾棰�">
                         <el-input v-model="formData.remainingPendingAmount" disabled class="remaining-input" />
                     </el-form-item>
                 </el-col>
-                <!-- <el-col :span="8" v-if="type == 'payable'">
-                    <el-form-item label="鏀舵鍚庡緟浠橀噾棰�">
-                        <el-input v-model="formData.remainingAmount" disabled class="remaining-input" />
+                <el-col :span="8" v-if="type == 'payable'">
+                    <el-form-item label="浠樻鍚庡緟浠橀噾棰�">
+                        <el-input v-model="formData.remainingPendingAmount" disabled class="remaining-input" />
                     </el-form-item>
-                </el-col> -->
+                </el-col>
             </el-row>
         </el-form>
 
@@ -165,9 +176,13 @@
             <el-button type="primary" :loading="submitting" @click="handleSubmit">纭畾</el-button>
         </template>
     </el-dialog>
+
     <bankCardData v-model:visible="bankDialogVisible"
         :default-selected-id="currentSelectType === 'customer' ? formData.bankAccountId : formData.receivingBankAccountId"
         :mode="currentSelectType === 'customer' ? 'config' : 'internal'" @confirm="handleBankConfirm" />
+
+    <supplierBankCardData v-model:visible="supplierBankIsible" :default-selected-id="formData.supplierId"
+        @confirm="handleBankCardfirm" />
 </template>
 
 <script setup lang="ts">
@@ -175,6 +190,8 @@
 import { ElMessage } from 'element-plus'
 import useCurrentInstance from "@/utils/useCurrentInstance";
 import bankCardData from "../bankCardData/index.vue";
+import supplierBankCardData from "../supplierBankCardData/index.vue";
+
 
 const props = defineProps<{
     type: 'receivable' | 'payable' // 绫诲瀷锛氬簲鏀舵垨搴斾粯
@@ -197,24 +214,26 @@
 const billInfo = ref<any>({})
 
 // 琛ㄥ崟鏁版嵁
+// 淇敼鍚庣殑琛ㄥ崟鏁版嵁
 const formData = reactive({
-    settlementMethod: '', // 纭繚鍚嶇О涓� prop 涓�鑷�
+    settlementMethod: '',
     customerBankAccount: '',
     customerBank: '',
+    paymentBankAccount: '', // 鏂板
+    paymentBank: '',        // 鏂板
     receivingBankAccount: '',
     receivingBank: '',
     receivingBankAccountId: '',
-    operator: 'admin',
-    
-    // 鏀舵
-    receiptDate: '',
+    operator: '',
+    bankAccountId: '',
+
+    // 寤鸿锛氬鏋滀綘鎯抽�昏緫鏇存竻鏅帮紝鍙互鎶� receiptAmount 鍜� paymentAmount 缁熶竴鎴栧湪璁$畻鏃跺仛鍒ゆ柇
     receiptAmount: 0,
+    paymentAmount: 0,
     remainingPendingAmount: 0,
-    
-    // 浠樻 (澶囩敤)
-    settleDate: '',
-    settleAmount: 0,
-    bankAccountId: ''
+
+    receiptDate: '',
+    paymentDate: '', // 鏂板
 })
 
 // 鏍¢獙瑙勫垯
@@ -241,19 +260,19 @@
     visible.value = true
     billInfo.value = { ...row }
 
-   // 鍒濆鍖栨湰娆℃敹娆鹃噾棰濓細榛樿濉叆鍏ㄩ儴寰呮敹閲戦锛堢敤鎴峰彲鏀癸級
+    // 鍒濆鍖栨湰娆℃敹娆鹃噾棰濓細榛樿濉叆鍏ㄩ儴寰呮敹閲戦锛堢敤鎴峰彲鏀癸級
     formData.receiptAmount = row.pendingAmount || 0;
-    formData.settleAmount = row.pendingAmount || 0
+    formData.paymentAmount = row.pendingAmount || 0
     calcRemaining()
 }
 // 璁$畻鍓╀綑寰呮敹/寰呬粯
 const calcRemaining = () => {
     // 1. 鑾峰彇鍘熷寰呮敹閲戦 (浠� billInfo 涓幏鍙�)
     const pending = Number(billInfo.value.pendingAmount || 0);
-    
+
     // 2. 鑾峰彇褰撳墠杈撳叆鐨勬敹娆鹃噾棰� (娉ㄦ剰锛氫綘 HTML 涓粦瀹氱殑鏄� receiptAmount)
     const current = Number(formData.receiptAmount || 0);
-    
+
     // 3. 璁$畻宸�煎苟淇濈暀 2 浣嶅皬鏁�
     // 浣跨敤 Number().toFixed(2) 纭繚绮惧害锛屽啀杞洖 Number 浠ヤ究鍚庣画閫昏緫浣跨敤
     formData.remainingPendingAmount = Number((pending - current).toFixed(2));
@@ -273,18 +292,39 @@
 const openIshpw = () => {
     visible.value = false
 }
+
+
 // 澶勭悊纭鍥炶皟
 const handleBankConfirm = (data: any) => {
+    console.log(props.type);
+    console.log(currentSelectType.value);
+
+
     if (currentSelectType.value === 'customer') {
         // 濉厖瀹㈡埛閾惰淇℃伅
-        formData.bankAccountId = data.id;
-        formData.customerBankAccount = data.accountNo;
-        formData.customerBank = data.bankName;
+        if (props.type === 'payable') {
+            formData.bankAccountId = data.id;
+            formData.paymentBankAccount = data.accountNo;
+            formData.paymentBank = data.bankName;
+
+        } else {
+            formData.bankAccountId = data.id;
+            formData.customerBankAccount = data.accountNo;
+            formData.customerBank = data.bankName;
+        }
+
     } else {
         // 濉厖鏀舵閾惰淇℃伅 (瀵瑰簲浣犱唬鐮侀噷鐨� receivingBankAccount 绛�)
-        formData.receivingBankAccountId = data.id; // 寤鸿鍦� formData 澧炲姞姝� ID 瀛楁鐢ㄤ簬鍥炴樉
-        formData.receivingBankAccount = data.accountNo;
-        formData.receivingBank = data.bankName;
+        if (props.type === 'payable') {
+            formData.bankAccountId = data.id;
+            formData.paymentBankAccount = data.accountNo;
+            formData.paymentBank = data.bankName;
+        } else {
+            formData.receivingBankAccountId = data.id; // 寤鸿鍦� formData 澧炲姞姝� ID 瀛楁鐢ㄤ簬鍥炴樉
+            formData.receivingBankAccount = data.accountNo;
+            formData.receivingBank = data.bankName;
+        }
+
     }
 };
 
@@ -298,7 +338,7 @@
         // console.log('鎻愪氦鏁版嵁:', { ...formData, billId: billInfo.value.id, type: props.type })
         // await new Promise(resolve => setTimeout(resolve, 1000))
 
-        emit('success',formData)
+        emit('success', formData)
         // visible.value = false
     } catch (error) {
         console.error(error)
@@ -323,7 +363,38 @@
     billInfo.value = {}
 }
 
-defineExpose({ open,openIshpw })
+// 璁$畻鍓╀綑寰呮敹/寰呬粯
+const calcRemainingA = () => {
+    // 1. 鑾峰彇鍘熷寰呮敹/寰呬粯鎬婚 (浠庤处鍗曚俊鎭鍙�)
+    const pending = Number(billInfo.value.pendingAmount || 0);
+
+    // 2. 鏍规嵁绫诲瀷鑾峰彇褰撳墠杈撳叆鐨勯噾棰�
+    // 濡傛灉鏄簲鏀�(receivable)锛屽彇 receiptAmount锛涘鏋滄槸搴斾粯(payable)锛屽彇 paymentAmount
+    const currentInput = props.type === 'receivable'
+        ? Number(formData.receiptAmount || 0)
+        : Number(formData.paymentAmount || 0);
+
+    // 3. 璁$畻缁撴灉骞朵繚鐣欎袱浣嶅皬鏁�
+    const result = pending - currentInput;
+    formData.remainingPendingAmount = Number(result.toFixed(2));
+};
+
+
+// 寮圭獥鏄剧ず鐘舵��
+const supplierBankIsible = ref(false);
+
+
+// 淇敼鎵撳紑寮圭獥鐨勬柟娉曪紝浼犲叆鏍囪瘑
+const openBankIsibleDialog = () => {
+    supplierBankIsible.value = true;
+};
+const handleBankCardfirm = (data: any) => {
+    formData.supplierId = data.id; // 寤鸿鍦� formData 澧炲姞姝� ID 瀛楁鐢ㄤ簬鍥炴樉
+    formData.supplierReceivingAccount = data.accountNo;
+    formData.supplierReceivingBank = data.bankName;
+
+};
+defineExpose({ open, openIshpw })
 </script>
 
 <style scoped>

--
Gitblit v1.8.0