| src/api/procurementManagement/paymentLedger.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/api/salesManagement/indicatorStats.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/procurementManagement/paymentLedger/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/salesManagement/receiptPaymentLedger/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/api/procurementManagement/paymentLedger.js
@@ -27,3 +27,12 @@ params, }); } /** 新增付款 */ export function savePayment(data) { return request({ url: "/purchase/report/savePayment", method: "post", data, }); } src/api/salesManagement/indicatorStats.js
@@ -36,3 +36,12 @@ params: query, }); } // 新增回款 export function saveReceiptPayment(data) { return request({ url: "/metricStatistics/saveReceiptPayment", method: "post", data: data, }); } src/views/procurementManagement/paymentLedger/index.vue
@@ -82,10 +82,86 @@ {{ parseFloat(row.payableAmount).toFixed(2) }} </el-text> </template> <template #paymentActionSlot="{ row }"> <el-button link type="primary" @click="openPaymentDialog(row)"> 新增付款 </el-button> </template> </PIMTable> </div> </el-col> </el-row> <!-- 新增付款弹框 --> <el-dialog v-model="paymentDialogVisible" title="新增付款" width="35%" @close="closePaymentDialog" > <el-form :model="paymentForm" label-width="100px" :rules="paymentRules" ref="paymentFormRef" > <el-form-item label="采购合同号:"> {{ currentPaymentRow.purchaseContractNumber || '--' }} </el-form-item> <el-form-item label="付款日期:" prop="paymentDate"> <el-date-picker style="width: 100%" v-model="paymentForm.paymentDate" value-format="YYYY-MM-DD" format="YYYY-MM-DD" type="date" placeholder="请选择付款日期" clearable /> </el-form-item> <el-form-item label="付款金额:" prop="paymentAmount"> <el-input-number style="width: 100%" v-model="paymentForm.paymentAmount" :precision="2" :min="0.01" :max="Math.max(0, (Number(currentPaymentRow.payableAmount) || 0) - (Number(currentPaymentRow.paymentAmount) || 0))" placeholder="请输入付款金额" controls-position="right" /> <div style="color: #e6a23c; font-size: 12px; margin-top: 4px"> 当前可付款余额:{{ (Number(currentPaymentRow.payableAmount) || 0) - (Number(currentPaymentRow.paymentAmount) || 0) > 0 ? ((Number(currentPaymentRow.payableAmount) || 0) - (Number(currentPaymentRow.paymentAmount) || 0)).toFixed(2) : '0.00' }} 元 </div> </el-form-item> <el-form-item label="付款方式:" prop="paymentMethod"> <el-select v-model="paymentForm.paymentMethod" placeholder="请选择付款方式" style="width: 100%" clearable > <el-option label="银行转账" value="银行转账" /> <el-option label="现金" value="现金" /> <el-option label="支票" value="支票" /> <el-option label="微信/支付宝" value="微信/支付宝" /> <el-option label="其他" value="其他" /> </el-select> </el-form-item> <el-form-item label="备注:" prop="remark"> <el-input v-model="paymentForm.remark" type="textarea" :rows="3" placeholder="请输入备注信息" clearable /> </el-form-item> </el-form> <template #footer> <div class="dialog-footer"> <el-button type="primary" @click="submitPaymentForm">确认</el-button> <el-button @click="closePaymentDialog">取消</el-button> </div> </template> </el-dialog> </div> </template> @@ -95,6 +171,7 @@ import { paymentLedgerList, paymentRecordList, savePayment, } from "@/api/procurementManagement/paymentLedger.js"; import Pagination from "../../../components/PIMTable/Pagination.vue"; @@ -159,6 +236,14 @@ prop: "payableAmount", slot: "payableAmountSlot", }, { label: "操作", dataType: "slot", slot: "paymentActionSlot", width: 100, fixed: "right", align: "center", }, ]); const tableDataSon = ref([]); const originalTableDataSon = ref([]); @@ -166,6 +251,72 @@ const isShowSummarySon = ref(true); const { proxy } = getCurrentInstance(); // 新增付款弹框 const paymentDialogVisible = ref(false); const currentPaymentRow = ref({}); const paymentFormRef = ref(null); const paymentForm = reactive({ paymentDate: "", paymentAmount: undefined, paymentMethod: "", remark: "", }); const validatePaymentAmount = (_, value, callback) => { if (!value) { return callback(new Error("请输入付款金额")); } const remaining = (Number(currentPaymentRow.value.payableAmount) || 0) - (Number(currentPaymentRow.value.paymentAmount) || 0); if (value > remaining) { return callback(new Error(`付款金额不能超过可付款余额 ${remaining.toFixed(2)} 元`)); } callback(); }; const paymentRules = { paymentDate: [ { required: true, message: "请选择付款日期", trigger: "change" }, ], paymentAmount: [ { required: true, validator: validatePaymentAmount, trigger: "blur" }, ], paymentMethod: [ { required: true, message: "请选择付款方式", trigger: "change" }, ], }; const openPaymentDialog = row => { currentPaymentRow.value = row; paymentForm.paymentDate = ""; paymentForm.paymentAmount = undefined; paymentForm.paymentMethod = ""; paymentForm.remark = ""; paymentDialogVisible.value = true; }; const closePaymentDialog = () => { paymentFormRef.value?.resetFields(); paymentDialogVisible.value = false; }; const submitPaymentForm = () => { paymentFormRef.value?.validate(valid => { if (valid) { const payload = { supplierId: currentSupplierId.value, purchaseContractNumber: currentPaymentRow.value.purchaseContractNumber, paymentDate: paymentForm.paymentDate, paymentAmount: paymentForm.paymentAmount, paymentMethod: paymentForm.paymentMethod, remark: paymentForm.remark, }; savePayment(payload).then(res => { proxy.$modal.msgSuccess("新增付款成功"); closePaymentDialog(); getPaymenRecordtList(currentSupplierId.value); getList(); }); } }); }; // 主表合计方法 const summarizeMainTable = param => { return proxy.summarizeTable( src/views/salesManagement/receiptPaymentLedger/index.vue
@@ -106,6 +106,16 @@ </el-text> </template> </el-table-column> <el-table-column label="操作" fixed="right" align="center" width="100"> <template #default="{ row }"> <el-button link type="primary" @click="openReceiptDialog(row)"> 新增回款 </el-button> </template> </el-table-column> </el-table> <pagination v-show="recordTotal > 0" :total="recordTotal" @@ -116,6 +126,77 @@ </div> </el-col> </el-row> <!-- 新增回款弹框 --> <el-dialog v-model="receiptDialogVisible" title="新增回款" width="35%" @close="closeReceiptDialog" > <el-form :model="receiptForm" label-width="100px" :rules="receiptRules" ref="receiptFormRef" > <el-form-item label="销售合同号:"> {{ currentRow.salesContractNo || '--' }} </el-form-item> <el-form-item label="回款日期:" prop="paymentDate"> <el-date-picker style="width: 100%" v-model="receiptForm.paymentDate" value-format="YYYY-MM-DD" format="YYYY-MM-DD" type="date" placeholder="请选择回款日期" clearable /> </el-form-item> <el-form-item label="回款金额:" prop="paymentAmount"> <el-input-number style="width: 100%" v-model="receiptForm.paymentAmount" :precision="2" :min="0.01" :max="Math.max(0, (Number(currentRow.receiptableAmount) || 0) - (Number(currentRow.receiptPaymentAmount) || 0))" placeholder="请输入回款金额" controls-position="right" /> <div style="color: #e6a23c; font-size: 12px; margin-top: 4px"> 当前可回款余额:{{ formattedNumber(null, null, (Number(currentRow.receiptableAmount) || 0) - (Number(currentRow.receiptPaymentAmount) || 0)) }} 元 </div> </el-form-item> <el-form-item label="回款方式:" prop="paymentMethod"> <el-select v-model="receiptForm.paymentMethod" placeholder="请选择回款方式" style="width: 100%" clearable > <el-option label="银行转账" value="银行转账" /> <el-option label="现金" value="现金" /> <el-option label="支票" value="支票" /> <el-option label="微信/支付宝" value="微信/支付宝" /> <el-option label="其他" value="其他" /> </el-select> </el-form-item> <el-form-item label="备注:" prop="remark"> <el-input v-model="receiptForm.remark" type="textarea" :rows="3" placeholder="请输入备注信息" clearable /> </el-form-item> </el-form> <template #footer> <div class="dialog-footer"> <el-button type="primary" @click="submitReceiptForm">确认</el-button> <el-button @click="closeReceiptDialog">取消</el-button> </div> </template> </el-dialog> </div> </template> @@ -124,6 +205,7 @@ import { customewTransactions, customewTransactionsDetails, saveReceiptPayment, } from "@/api/salesManagement/indicatorStats.js"; import Pagination from "../../../components/PIMTable/Pagination.vue"; const { proxy } = getCurrentInstance(); @@ -149,7 +231,72 @@ const customerId = ref(""); const { searchForm } = toRefs(data); const originReceiptRecord = ref([]); // 查询列表 // 新增回款弹框 const receiptDialogVisible = ref(false); const currentRow = ref({}); const receiptFormRef = ref(null); const receiptForm = reactive({ paymentDate: "", paymentAmount: undefined, paymentMethod: "", remark: "", }); const validatePaymentAmount = (_, value, callback) => { if (!value) { return callback(new Error("请输入回款金额")); } const remaining = (Number(currentRow.value.receiptableAmount) || 0) - (Number(currentRow.value.receiptPaymentAmount) || 0); if (value > remaining) { return callback(new Error(`回款金额不能超过可回款余额 ${remaining.toFixed(2)} 元`)); } callback(); }; const receiptRules = { paymentDate: [ { required: true, message: "请选择回款日期", trigger: "change" }, ], paymentAmount: [ { required: true, validator: validatePaymentAmount, trigger: "blur" }, ], paymentMethod: [ { required: true, message: "请选择回款方式", trigger: "change" }, ], }; const openReceiptDialog = row => { currentRow.value = row; receiptForm.paymentDate = ""; receiptForm.paymentAmount = undefined; receiptForm.paymentMethod = ""; receiptForm.remark = ""; receiptDialogVisible.value = true; }; const closeReceiptDialog = () => { receiptFormRef.value?.resetFields(); receiptDialogVisible.value = false; }; const submitReceiptForm = () => { receiptFormRef.value?.validate(valid => { if (valid) { const payload = { customerId: customerId.value, salesContractNo: currentRow.value.salesContractNo, paymentDate: receiptForm.paymentDate, paymentAmount: receiptForm.paymentAmount, paymentMethod: receiptForm.paymentMethod, remark: receiptForm.remark, }; saveReceiptPayment(payload).then(res => { proxy.$modal.msgSuccess("新增回款成功"); closeReceiptDialog(); receiptPaymentList(customerId.value); getList(); }); } }); }; /** 搜索按钮操作 */ const handleQuery = () => { page.current = 1;