fix:应付单列表(发起付款、发起收票)添加备注信息

dev_1.0.2
UNISINSIGHT\rdpnr_jiangpeng 2026-03-09 14:46:46 +08:00
parent 268c56e7ce
commit d1910e2497
7 changed files with 77 additions and 15 deletions

View File

@ -1,5 +1,5 @@
<template>
<el-dialog title="合并发起付款单" :visible.sync="dialogVisible" width="80%" :close-on-click-modal="false" @close="handleClose" append-to-body>
<el-dialog :title="title" :visible.sync="dialogVisible" width="80%" :close-on-click-modal="false" @close="handleClose" append-to-body>
<div class="dialog-body">
<el-form ref="form" :model="form" :inline="true" label-width="120px">
<el-row>
@ -31,6 +31,11 @@
<!-- </el-form-item>-->
<!-- </el-col>-->
</el-row>
<el-row>
<el-form-item label="特别说明">
<el-input v-model="form.remark"/>
</el-form-item>
</el-row>
</el-form>
<el-divider content-position="left">采购应付单表</el-divider>
@ -134,6 +139,10 @@ export default {
payableOrders: {
type: Array,
default: () => []
},
title: {
type: String,
default: '合并生成付款单'
}
},
data() {
@ -145,6 +154,7 @@ export default {
paymentBillType: 'FROM_PAYABLE', // Default to a type, or make it dynamic
vendorName: '',
estimatedPaymentTime: null,
remark: null
},
payableOrdersWithPlans: [], // Each order will now have its own paymentPlans array
isPaymentPlanSelectorOpen: false,
@ -196,9 +206,11 @@ export default {
const allSameVendor = this.payableOrders.every(order => order.vendorName === firstVendorName);
this.form.vendorName = allSameVendor ? firstVendorName : '多个制造商';
this.form.estimatedPaymentTime = this.payableOrders[0].estimatedPaymentTime || null; // Use first order's estimated time as default
this.form.remark = null;
} else {
this.form.vendorName = '';
this.form.estimatedPaymentTime = null;
this.form.remark = null;
}
this.form.paymentBillType = 'FROM_PAYABLE'; // Default
@ -286,6 +298,7 @@ export default {
const mergedPaymentData = {
paymentBillType: this.form.paymentBillType,
estimatedPaymentTime: this.form.estimatedPaymentTime,
remark: this.form.remark,
// Collect all payable orders with their updated payment plans
payableOrders: this.payableOrdersWithPlans.map(order => ({
id: order.id,
@ -314,6 +327,7 @@ export default {
paymentBillType: 'FROM_PAYABLE',
vendorName: '',
estimatedPaymentTime: null,
remark: null
};
this.payableOrdersWithPlans = [];

View File

@ -1,5 +1,5 @@
<template>
<el-dialog title="合并发起收票单" :close-on-click-modal="false" :visible.sync="dialogVisible" width="80%" @close="handleClose" append-to-body>
<el-dialog :title="title" :close-on-click-modal="false" :visible.sync="dialogVisible" width="80%" @close="handleClose" append-to-body>
<div class="dialog-body">
<el-form ref="form" :model="form" :inline="true" label-width="120px">
<el-row>
@ -41,6 +41,11 @@
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-form-item label="备注">
<el-input v-model="form.remark"/>
</el-form-item>
</el-row>
</el-form>
<el-divider content-position="left">采购应付单表</el-divider>
@ -137,6 +142,10 @@ export default {
payableOrders: {
type: Array,
default: () => []
},
title: {
type: String,
default: '合并生成收票单'
}
},
data() {
@ -149,6 +158,7 @@ export default {
vendorName: '',
ticketTime: null,
vendorTicketTime: null,
remark: null
},
payableOrdersWithPlans: [], // Each order will now have its own ticketPlans array
isTicketPlanSelectorOpen: false,
@ -201,10 +211,12 @@ export default {
this.form.vendorName = allSameVendor ? firstVendorName : '多个制造商';
this.form.ticketTime = null; // Reset time
this.form.vendorTicketTime = null;
this.form.remark = null;
} else {
this.form.vendorName = '';
this.form.ticketTime = null;
this.form.vendorTicketTime = null;
this.form.remark = null;
}
this.form.ticketBillType = 'FROM_PAYABLE'; // Default
@ -298,6 +310,7 @@ export default {
ticketBillType: this.form.ticketBillType,
ticketTime: this.form.ticketTime,
vendorTicketTime: this.form.vendorTicketTime,
remark: this.form.remark,
// Collect all payable orders with their updated ticket plans
payableOrders: this.payableOrdersWithPlans.map(order => ({
id: order.id,
@ -327,6 +340,7 @@ export default {
vendorName: '',
ticketTime: null,
vendorTicketTime: null,
remark: null
};
this.payableOrdersWithPlans = [];

View File

@ -219,10 +219,17 @@
<edit-form :visible.sync="open" :data="selectedRow" @close="getList" />
<!-- 合并付款单弹窗 -->
<merge-payment-dialog :visible.sync="isMergePaymentDialogOpen" :payable-orders="selectedPayableRows" @confirm="confirmMergePayment" />
<merge-payment-dialog :visible.sync="isMergePaymentDialogOpen" :payable-orders="selectedPayableRows" :title="mergePaymentDialogTitle" @confirm="confirmMergePayment" />
<!-- 付款单弹窗 -->
<payment-dialog :visible.sync="isPaymentDialogOpen" :payable-orders="selectedPayableRow" :title="mergePaymentDialogTitle" @confirm="confirmMergePayment" />
<!-- 合并收票单弹窗 -->
<merge-receipt-dialog :visible.sync="isMergeReceiptDialogOpen" :payable-orders="selectedPayableRows" @confirm="confirmMergeReceipt" />
<merge-receipt-dialog :visible.sync="isMergeReceiptDialogOpen" :payable-orders="selectedPayableRows" :title="mergeReceiptDialogTitle" @confirm="confirmMergeReceipt" />
<!-- 收票单弹窗 -->
<receipt-dialog :visible.sync="isReceiptDialogOpen" :payable-orders="selectedPayableRow" :title="mergeReceiptDialogTitle" @confirm="confirmMergeReceipt" />
</div>
</template>
@ -231,10 +238,12 @@ import { listPayable, mergeAndInitiatePayment, mergeAndInitiateReceipt } from "@
import EditForm from './components/EditForm.vue';
import MergePaymentDialog from './components/MergePaymentDialog.vue';
import MergeReceiptDialog from './components/MergeReceiptDialog.vue';
import PaymentDialog from './components/MergePaymentDialog.vue';
import ReceiptDialog from './components/MergeReceiptDialog.vue';
export default {
name: "Payable",
components: { EditForm, MergePaymentDialog, MergeReceiptDialog },
components: { EditForm, MergePaymentDialog, MergeReceiptDialog, PaymentDialog, ReceiptDialog},
dicts: ['product_type', 'payment_status', 'invoice_status'],
data() {
return {
@ -276,10 +285,19 @@ export default {
},
//
selectedPayableRows: [],
//
selectedPayableRow: [],
//
isMergePaymentDialogOpen: false,
//
isMergeReceiptDialogOpen: false
isMergeReceiptDialogOpen: false,
//
isPaymentDialogOpen: false,
//
isReceiptDialogOpen: false,
//
mergePaymentDialogTitle: null,
mergeReceiptDialogTitle: null
};
},
created() {
@ -337,20 +355,23 @@ export default {
this.selectedPayableRows = selection;
},
handleGeneratedPayment(row) {
this.selectedPayableRows=[row]
this.handleMergeAndInitiatePayment()
this.selectedPayableRow=[row]
this.mergePaymentDialogTitle = '发起付款单'
this.isPaymentDialogOpen = true;
},
handleGeneratedTicket(row) {
this.selectedPayableRows=[row]
this.handleMergeAndInitiateReceipt()
this.selectedPayableRow=[row]
this.mergeReceiptDialogTitle = '发起收票单'
this.isReceiptDialogOpen = true;
},
/** 合并并发起付款单按钮操作 */
handleMergeAndInitiatePayment() {
console.log(this.selectedPayableRows)
if (this.selectedPayableRows.length === 0) {
this.$modal.msgWarning("请选择至少一条应付单进行合并操作");
return;
}
let every = this.selectedPayableRows.every(item=>item.planAmount>0);
let every = this.selectedPayableRows.every(item=>item.planAmount>0);
if (!every){
this.$modal.msgWarning("温馨提示:您勾选的应付单中有已全部付款完成的应付单,请勿重复操作");
return;
@ -360,7 +381,8 @@ export default {
this.$modal.msgWarning("温馨提示:您勾选的应付单中有不同供应商,合并发起付款单需为同一供应商,请重新勾选");
return;
}
//
this.mergePaymentDialogTitle = '合并发起付款单';
this.isMergePaymentDialogOpen = true;
},
/** 确认合并付款单操作 */
@ -387,7 +409,8 @@ export default {
this.$modal.msgWarning("温馨提示:您勾选的应付单中有不同供应商,合并发起收票单需为同一供应商,请重新勾选");
return;
}
//
this.mergeReceiptDialogTitle = '合并发起收票单';
this.isMergeReceiptDialogOpen = true;
},
/** 确认合并收票单操作 */

View File

@ -90,7 +90,7 @@
</el-row>
<el-row :gutter="20">
<el-col :span="24">
<div class="detail-item">其它特别说明: {{ detail.remark }}</div>
<div class="detail-item">特别说明: {{ detail.remark }}</div>
</el-col>
<el-col :span="24">
<div class="detail-item">

View File

@ -8,10 +8,11 @@ import java.util.List;
@Data
public class MergedPaymentDataDto {
private String paymentBillType;
private Date estimatedPaymentTime;
private List<PayableOrderDto> payableOrders;
private BigDecimal totalMergePaymentAmount;
private String remark;
}

View File

@ -8,9 +8,12 @@ import java.util.List;
@Data
public class MergedReceiptDataDto {
private String ticketBillType;
private Date ticketTime;
private Date vendorTicketTime;
private List<PayableOrderReceiptDto> payableOrders;
private BigDecimal totalMergeTicketAmount;
private String remark;
}

View File

@ -19,6 +19,7 @@ import com.ruoyi.sip.mapper.OmsPayableBillMapper;
import com.ruoyi.sip.mapper.OmsPayablePaymentPlanMapper;
import com.ruoyi.sip.mapper.OmsPayableTicketPlanMapper;
import com.ruoyi.sip.service.*;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
@ -242,6 +243,9 @@ public class OmsPayableBillServiceImpl implements IOmsPayableBillService {
paymentBill.setTaxAmount(dto.getTotalMergePaymentAmount().subtract(totalWithoutTax));
paymentBill.setPaymentBillType(OmsPaymentBill.PaymentBillTypeEnum.FROM_PAYABLE.getCode());
if (StringUtils.isNotEmpty(dto.getRemark())) {
paymentBill.setRemark(dto.getRemark());
}
omsPaymentBillService.insertOmsPaymentBill(paymentBill);
// 3. 创建付款明细 - 防止重复付款
@ -354,6 +358,9 @@ public class OmsPayableBillServiceImpl implements IOmsPayableBillService {
ticketBill.setTicketBillType(OmsTicketBill.TicketBillTypeEnum.FROM_PAYABLE.getCode());
ticketBill.setTicketStatus(OmsTicketBill.TicketStatusEnum.WAIT_TICKET.getCode());
if (StringUtils.isNotEmpty(dto.getRemark())) {
ticketBill.setRemark(dto.getRemark());
}
omsTicketBillService.insertOmsTicketBill(ticketBill);
// 3. 创建收票明细 - 防止重复收票