From 2e217b787931233134f5a656b3bc2503ed034eb7 Mon Sep 17 00:00:00 2001
From: sen <sen@qq.com>
Date: 星期二, 03 二月 2026 15:47:57 +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