Commit ac3fd4a8 by yuzhenWang

修改出账检核

parent 37963fe8
......@@ -25,6 +25,7 @@
"axios": "1.9.0",
"clipboard": "2.0.11",
"dayjs": "^1.11.18",
"decimal.js": "^10.6.0",
"echarts": "5.6.0",
"element-plus": "^2.13.5",
"file-saver": "^2.0.5",
......
import Decimal from 'decimal.js'
// 格式化金额为货币格式
export function formatCurrency(value, currency = '', fixedDigits = 2) {
if (value === undefined || value === null) return currency + '0.00'
......@@ -206,11 +207,41 @@ export function inputThousands(value) {
parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ',')
return parts.join('.')
}
/**
* 金额计算(乘/除),保留指定位数小数(四舍五入)
* @param {number|string|Decimal} a - 被乘数(或被除数)
* @param {number|string|Decimal} b - 乘数(或除数)
* @param {number} digits - 小数位数(默认2)
* @param {string} [type] - 'Divided' 表示除法,否则乘法
* @returns {number|null} 计算结果(数字类型)
*/
export function calculateAmount(a, b, digits = 2, type) {
if (a == null || b == null) return null
try {
const da = new Decimal(a)
const db = new Decimal(b)
let result
if (type === 'Divided') {
if (db.isZero()) return null // 除零保护
result = da.dividedBy(db)
} else {
result = da.times(db)
}
// 四舍五入到指定位数,并转为 Number(若需要字符串可用 .toFixed(digits))
// return result.toDecimalPlaces(digits, Decimal.ROUND_HALF_UP).toNumber()
console.log('====================================')
console.log('金钱', result.toFixed(digits, Decimal.ROUND_HALF_UP))
console.log('====================================')
return result.toFixed(digits, Decimal.ROUND_HALF_UP)
} catch (e) {
return null
}
}
export default {
formatCurrency,
numberFormat,
formatThousands,
formatThousandsSimple,
inputThousands
inputThousands,
calculateAmount
}
......@@ -313,7 +313,7 @@ import editTable from '@/components/Table/editTable.vue'
import CommonDialog from '@/components/commonDialog'
import SearchForm from '@/components/SearchForm/SearchForm.vue'
import { ElMessage } from 'element-plus'
import { formatCurrency } from '@/utils/number'
import { formatCurrency, calculateAmount } from '@/utils/number'
import { Select } from '@element-plus/icons-vue'
// 接口
......@@ -724,14 +724,14 @@ const handleInputChange = async (formType, prop, value, item) => {
// 计算港币金额 原币种金额*原币种->港币
const originalAmount = rateExchangeForm.value.originalAmount
const originalToHkdRate = value
const hkdAmount = multiply(originalAmount, originalToHkdRate, 2)
const hkdAmount = calculateAmount(originalAmount, originalToHkdRate, 2)
await nextTick()
rateExchangeForm.value.hkdAmount = hkdAmount
} else if (prop === 'originalAmount' && value && rateExchangeForm.value.originalToHkdRate) {
// 计算港币金额
const originalAmount = rateExchangeForm.value.originalAmount
const originalToHkdRate = value
const hkdAmount = multiply(originalAmount, originalToHkdRate, 2)
const originalAmount = value
const originalToHkdRate = rateExchangeForm.value.originalToHkdRate
const hkdAmount = calculateAmount(originalAmount, originalToHkdRate, 2)
await nextTick()
rateExchangeForm.value.hkdAmount = hkdAmount
}
......@@ -740,14 +740,14 @@ const handleInputChange = async (formType, prop, value, item) => {
// 计算实际发放金额
const hkdToPayoutRate = rateExchangeForm.value.hkdToPayoutRate
const hkdAmount = value
const payoutAmount = multiply(hkdAmount, hkdToPayoutRate, 2)
const payoutAmount = calculateAmount(hkdAmount, hkdToPayoutRate, 2)
await nextTick()
rateExchangeForm.value.payoutAmount = payoutAmount
} else if (prop == 'hkdToPayoutRate' && value && rateExchangeForm.value.hkdAmount) {
// 计算实际发放金额
const hkdToPayoutRate = value
const hkdAmount = rateExchangeForm.value.hkdAmount
const payoutAmount = multiply(hkdAmount, hkdToPayoutRate, 2)
const payoutAmount = calculateAmount(hkdAmount, hkdToPayoutRate, 2)
await nextTick()
rateExchangeForm.value.payoutAmount = payoutAmount
}
......@@ -757,14 +757,14 @@ const handleInputChange = async (formType, prop, value, item) => {
// 计算保单币种金额
const exchangeRate = rateExchangeForm.value.exchangeRate
const hkdAmount = value
const ruleAmount = multiply(hkdAmount, exchangeRate, 2, 'Divided')
const ruleAmount = calculateAmount(hkdAmount, exchangeRate, 2, 'Divided')
await nextTick()
rateExchangeForm.value.ruleAmount = ruleAmount
} else if (prop == 'exchangeRate' && value && rateExchangeForm.value.hkdAmount) {
// 计算保单币种金额
const exchangeRate = value
const hkdAmount = rateExchangeForm.value.hkdAmount
const ruleAmount = multiply(hkdAmount, exchangeRate, 2, 'Divided')
const ruleAmount = calculateAmount(hkdAmount, exchangeRate, 2, 'Divided')
await nextTick()
rateExchangeForm.value.ruleAmount = ruleAmount
}
......@@ -784,6 +784,61 @@ const handleInputChange = async (formType, prop, value, item) => {
ElMessage.error('查询结算汇率失败')
}
}
// 1.计算港币金额
if (prop === 'originalToHkdRate' && value && addCheckRecordFormModel.value.originalAmount) {
// 计算港币金额 原币种金额*原币种->港币
const originalAmount = addCheckRecordFormModel.value.originalAmount
const originalToHkdRate = value
const hkdAmount = calculateAmount(originalAmount, originalToHkdRate, 2)
await nextTick()
addCheckRecordFormModel.value.hkdAmount = hkdAmount
} else if (
prop === 'originalAmount' &&
value &&
addCheckRecordFormModel.value.originalToHkdRate
) {
// 计算港币金额
const originalAmount = value
const originalToHkdRate = addCheckRecordFormModel.value.originalToHkdRate
const hkdAmount = calculateAmount(originalAmount, originalToHkdRate, 2)
console.log('新增', hkdAmount)
await nextTick()
addCheckRecordFormModel.value.hkdAmount = hkdAmount
}
//2.计算实际发放金额 港币金额*港币->发放币种汇率
if (prop == 'hkdAmount' && value && addCheckRecordFormModel.value.hkdToPayoutRate) {
// 计算实际发放金额
const hkdToPayoutRate = addCheckRecordFormModel.value.hkdToPayoutRate
const hkdAmount = value
const payoutAmount = calculateAmount(hkdAmount, hkdToPayoutRate, 2)
await nextTick()
addCheckRecordFormModel.value.payoutAmount = payoutAmount
} else if (prop == 'hkdToPayoutRate' && value && addCheckRecordFormModel.value.hkdAmount) {
// 计算实际发放金额
const hkdToPayoutRate = value
const hkdAmount = addCheckRecordFormModel.value.hkdAmount
const payoutAmount = calculateAmount(hkdAmount, hkdToPayoutRate, 2)
await nextTick()
addCheckRecordFormModel.value.payoutAmount = payoutAmount
}
//3.计算保单币种金额 港币金额*保单币种->港币汇率
if (prop == 'hkdAmount' && value && addCheckRecordFormModel.value.exchangeRate) {
// 计算保单币种金额
const exchangeRate = addCheckRecordFormModel.value.exchangeRate
const hkdAmount = value
const ruleAmount = calculateAmount(hkdAmount, exchangeRate, 2, 'Divided')
await nextTick()
addCheckRecordFormModel.value.ruleAmount = ruleAmount
} else if (prop == 'exchangeRate' && value && addCheckRecordFormModel.value.hkdAmount) {
// 计算保单币种金额
const exchangeRate = value
const hkdAmount = addCheckRecordFormModel.value.hkdAmount
const ruleAmount = calculateAmount(hkdAmount, exchangeRate, 2, 'Divided')
await nextTick()
addCheckRecordFormModel.value.ruleAmount = ruleAmount
}
}
}
// 精确乘法并保留小数位数
......@@ -1274,17 +1329,17 @@ const handleSelect = (e, row) => {
settingBillYearMonthFlag.value = true
} else if (e == 'editExchangeRate') {
rateExchangeForm.value = {
originalAmount: row.originalAmount ? row.originalAmount : '',
originalAmount: row.originalAmount ? Number(row.originalAmount).toFixed(2) : '',
ruleCurrency: row.ruleCurrency,
originalCurrency: row.originalCurrency,
payoutCurrency: row.payoutCurrency,
hkdToPayoutRate: row.hkdToPayoutRate ? row.hkdToPayoutRate : '',
exchangeRate: row.exchangeRate ? row.exchangeRate : '',
originalToHkdRate: row.originalToHkdRate ? row.originalToHkdRate : '',
payoutAmount: row.payoutAmount ? row.payoutAmount : '',
payoutAmount: row.payoutAmount ? Number(row.payoutAmount).toFixed(2) : '',
ruleAmount: row.ruleAmount ? row.ruleAmount : '',
hkdAmount: row.hkdAmount ? row.hkdAmount : ''
ruleAmount: row.ruleAmount ? Number(row.ruleAmount).toFixed(2) : '',
hkdAmount: row.hkdAmount ? Number(row.hkdAmount).toFixed(2) : ''
}
rateExchangeFlag.value = true
......@@ -1411,63 +1466,6 @@ const onSubmit = data => {
}
onMounted(async () => {})
// 检测addCheckRecordFormModel
watch(
() => addCheckRecordFormModel.value, // 推荐使用 getter 形式,避免直接监听 ref 对象
newVal => {
if (newVal) {
//3.计算保单币种金额 港币金额*保单币种->港币汇率
if (newVal.hkdAmount != null && newVal.exchangeRate != null) {
const calculated1 = multiply(newVal.hkdAmount, newVal.exchangeRate, 2, 'Divided')
if (addCheckRecordFormModel.value.ruleAmount !== calculated1) {
addCheckRecordFormModel.value.ruleAmount = Number(calculated1).toFixed(2)
}
}
// 计算港币金额 原币种金额*原币种->港币
if (newVal.originalToHkdRate != null && newVal.originalAmount != null) {
const calculated2 = multiply(newVal.originalAmount, newVal.originalToHkdRate, 2)
if (addCheckRecordFormModel.value.hkdAmount !== calculated2) {
addCheckRecordFormModel.value.hkdAmount = Number(calculated2).toFixed(2)
}
}
//2.计算实际发放金额 港币金额*港币->发放币种汇率
if (newVal.hkdAmount != null && newVal.hkdToPayoutRate != null) {
const calculated3 = multiply(newVal.hkdAmount, newVal.hkdToPayoutRate, 2)
if (addCheckRecordFormModel.value.payoutAmount !== calculated3) {
addCheckRecordFormModel.value.payoutAmount = Number(calculated3).toFixed(2)
}
}
}
},
{ deep: true, immediate: true } // immediate: true 可以让初始值也计算一次
)
// 检测splitTableData
// watch(
// () => splitTableData.value, // 推荐使用 getter 形式,避免直接监听 ref 对象
// newVal => {
// if (newVal) {
// let data = JSON.parse(JSON.stringify(newVal))
// splitTableData.value = data.map(item => {
// // 计算原币种金额 出账比例*selectedRow.value.hkdAmount
// if (item.splitRatio !== null && selectedRow.value.hkdAmount !== null) {
// let ratio = Number(item.splitRatio) / 100
// if (ratio > 0) {
// const calculated1 = multiply(selectedRow.value.hkdAmount, ratio, 2)
// if (item.originalAmount && item.originalAmount !== calculated1) {
// item.originalAmount = Number(calculated1).toFixed(2)
// }
// }
// }
// //计算保单币种金额 港币金额*保单币种->港币汇率 未实现
// //计算港币金额 原币种金额*原币种->港币 未实现
// //计算实际发放金额 港币金额*港币->发放币种汇率 未实现
// return item
// })
// }
// },
// { deep: true, immediate: true } // immediate: true 可以让初始值也计算一次
// )
</script>
<style scoped>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment