如何在会计项目中验证借贷金额相等?(使用axios、lodash)
实现借贷金额平衡验证的方案
这是会计系统里核心的校验环节,结合你用到的lodash和axios,我们可以在请求发送前快速完成借方与贷方的金额总和校验,具体实现如下:
步骤1:处理待提交的账户数据
首先把页面中的this.accounts转换成接口需要的格式,同时确保金额字段不会出现undefined或null(避免后续求和出错):
const submitAccounts = _.map(this.accounts, account => ({ account_id: account.account_id, debit: account.debit || 0, // 空值转为0,保证计算准确性 credit: account.credit || 0 }));
步骤2:计算借贷总金额
用lodash的sumBy方法分别统计借方和贷方的总额,这个方法可以直接遍历数组并提取指定字段求和:
// 计算借方总金额 const totalDebit = _.sumBy(submitAccounts, item => item.debit); // 计算贷方总金额 const totalCredit = _.sumBy(submitAccounts, item => item.credit);
步骤3:验证平衡并提交请求
校验两者是否相等,只有平衡时才发送axios请求,不平衡则中断流程并提示用户:
if (totalDebit !== totalCredit) { // 这里可以替换成你项目里的错误提示组件(比如ElementUI的Message、AntD的Notification等) alert(`借贷金额不平衡!借方总额:${totalDebit},贷方总额:${totalCredit}`); return; // 终止提交,避免无效请求 } // 验证通过后发送请求 axios.post('/api/journals', { accounts: submitAccounts }) .then(res => { console.log('日记账保存成功', res); // 这里可以添加成功后的逻辑,比如重置表单、刷新列表等 }) .catch(err => { console.error('保存失败', err); // 请求失败的错误处理 });
可选:封装校验逻辑为复用函数
如果你的系统多处需要用到借贷平衡校验,可以把逻辑封装成独立函数,方便调用:
// 封装校验函数 function checkJournalBalance(accounts) { const processedAccounts = accounts.map(item => ({ debit: item.debit || 0, credit: item.credit || 0 })); const totalDebit = _.sumBy(processedAccounts, 'debit'); const totalCredit = _.sumBy(processedAccounts, 'credit'); return { isBalanced: totalDebit === totalCredit, totalDebit, totalCredit }; } // 使用示例 const { isBalanced, totalDebit, totalCredit } = checkJournalBalance(this.accounts); if (!isBalanced) { alert(`借贷不平衡:借方${totalDebit},贷方${totalCredit}`); return; } // 后续提交请求逻辑...
注意事项
- 一定要处理金额字段的空值:如果某个账户只填了借方或贷方,未填的字段会是
undefined,直接求和会得到NaN,所以要转为0。 - 前端校验只是第一道防线,后端也必须做同样的校验,避免恶意绕过前端校验提交非法数据。
内容的提问来源于stack exchange,提问作者Jearson
相关产品推荐
相关产品推荐

