gongchunyi
4 天以前 58246805d5f5d33ec43e88eca01acefa7dfd9777
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
/** 金额类字段默认最大小数位数 */
export const AMOUNT_DECIMAL_SCALE = 6
 
/** 金额(元)默认展示小数位数 */
export const MONEY_DECIMAL_SCALE = 2
 
/**
 * 格式化数字:最多保留 scale 位小数,并去除末尾多余的 0
 */
export function formatDecimal(value, scale = AMOUNT_DECIMAL_SCALE, fallback = '0') {
  if (value === null || value === undefined || value === '') {
    return fallback
  }
  const num = Number(value)
  if (Number.isNaN(num)) {
    return fallback
  }
  return parseFloat(num.toFixed(scale)).toString()
}
 
/** 带货币符号的金额展示 */
export function formatCurrency(value, scale = AMOUNT_DECIMAL_SCALE) {
  return `¥${formatDecimal(value, scale)}`
}
 
/** el-table-column formatter */
export function tableAmountFormatter(row, column, cellValue) {
  return formatDecimal(cellValue)
}
 
/** el-table-column formatter:金额(元)列,最多保留 2 位小数 */
export function moneyAmountFormatter(row, column, cellValue) {
  return formatDecimal(cellValue, MONEY_DECIMAL_SCALE)
}
 
/** 计算后保留指定位小数 */
export function roundAmount(value, scale = AMOUNT_DECIMAL_SCALE) {
  if (value === null || value === undefined || value === '') {
    return 0
  }
  const num = Number(value)
  if (Number.isNaN(num)) {
    return 0
  }
  return parseFloat(num.toFixed(scale))
}
 
/** 构建 summarizeTable 金额列格式配置 */
export function buildAmountSummaryFormat(
  fields,
  extraFormat = {},
  scale = AMOUNT_DECIMAL_SCALE
) {
  const format = { ...extraFormat }
  fields.forEach(field => {
    format[field] = { decimalPlaces: scale }
  })
  return format
}