2 Commits

  1. 46
      src/views/moneyManage/financialAccount/performanceAttribution.vue

46
src/views/moneyManage/financialAccount/performanceAttribution.vue

@ -3,6 +3,7 @@ import { ref, reactive, onMounted, toRefs, nextTick, computed, watch, onBeforeUn
import { ElMessage, ElMessageBox } from 'element-plus'
import request from '@/util/http.js'
import dayjs from 'dayjs'
import Decimal from 'decimal.js'
import { useI18n } from 'vue-i18n'
import { refundOnline, performanceSelect, exportPerformance, adjustment } from '@/api/cash/financialAccount.js'
import { getUserInfo } from '@/api/common/common.js'
@ -368,6 +369,32 @@ const matrixMarkets = computed(() => [
const adjustData = ref([])
const isEmptyAdjustValue = (value) => {
return value === '' || value === undefined || value === null || value === '-'
}
const toSafeDecimal = (value) => {
if (isEmptyAdjustValue(value)) {
return new Decimal(0)
}
const normalized = formatNumber(value)
if (!normalized || normalized === '-' || normalized === '.' || normalized === '-.') {
return new Decimal(0)
}
try {
return new Decimal(normalized)
} catch (error) {
return new Decimal(0)
}
}
const formatDecimalValue = (value) => {
const decimalValue = Decimal.isDecimal(value) ? value : toSafeDecimal(value)
return decimalValue.toFixed().replace(/\.0+$/, '').replace(/(\.\d*?[1-9])0+$/, '$1')
}
const initAdjustData = () => {
adjustData.value = matrixMarkets.value.map(rowMarket => {
const row = { inMarket: rowMarket.label + t('common.customer') }
@ -390,12 +417,11 @@ const computedAdjustData = computed(() => {
const sumRow = { inMarket: t('cash.cashFlow.total'), isSum: true }
matrixMarkets.value.forEach(colMarket => {
let colSum = 0
let colSum = new Decimal(0)
adjustData.value.forEach(row => {
const val = parseFloat(row[colMarket.key])
if (!isNaN(val)) colSum += val
colSum = colSum.plus(toSafeDecimal(row[colMarket.key]))
})
sumRow[colMarket.key] = colSum
sumRow[colMarket.key] = formatDecimalValue(colSum)
})
data.push(sumRow)
@ -403,12 +429,11 @@ const computedAdjustData = computed(() => {
})
const getRowTotal = (row) => {
let sum = 0
let sum = new Decimal(0)
matrixMarkets.value.forEach(colMarket => {
const val = parseFloat(row[colMarket.key])
if (!isNaN(val)) sum += val
sum = sum.plus(toSafeDecimal(row[colMarket.key]))
})
return sum
return formatDecimalValue(sum)
}
const formatNumber = (val) => {
@ -434,15 +459,14 @@ const submitAdjustment = async () => {
// 0
const matrix = adjustData.value.map(row => {
return matrixMarkets.value.map(colMarket => {
const val = parseFloat(row[colMarket.key])
return isNaN(val) ? 0 : val
return toSafeDecimal(row[colMarket.key]).toNumber()
})
})
//
const payload = {
matrix: matrix,
weight: parseFloat(adjustCoefficient.value), //
weight: toSafeDecimal(adjustCoefficient.value).toNumber(), //
time: adjustTime.value,
submitterId: adminData.value.id || 1000063, // adminData
submitterMarket: adminData.value.marketName || '总部' //

Loading…
Cancel
Save