/** * 特定类型数字的统一格式处理 * @param num 需要转换的数字(非数字 或是 - 将直接返回 -) * @param decimal 返回的小数位 * @param addUnit 返回值是否添加单位:(万或亿) * @param retInt 当数据小于1万时,是否返回无小数位的整数 */ import { transformShortNum } from './transformShortNum'; import { formatTime } from '../date/formatTime'; export type FormatType = 'yuan' | 'fen' | 'decimalToPercentSave2Decimal' | 'percentSave2Decimal' | 'percentSave0Decimal' | 'decimalToPercentSave0Decimal' | 'int' | 'decimal' | 'text' | 'secToTimeMS' | 'secToTime' | 'secToTimeChMS' | 'secToTimeHM'; export const formatData = (config: { type: FormatType; value?: any; afterUnit?: string; beforeUnit?: string; isAbs?: boolean; }) => { let { afterUnit } = config; const { type, value, isAbs, beforeUnit } = config; if (Number(value) === -2147483648) { return '无权限'; } if (type === 'text') { // 文字类型 return value || value === 0 ? value : '-'; } if (isNaN(value) || (value !== 0 && !value)) { return '-'; } let val; switch (type) { case 'yuan': // 接口数据,单位为元 val = transformShortNum(value, 2); break; case 'fen': // 接口数据,单位为分 val = transformShortNum(value / 100, 2); break; case 'decimalToPercentSave2Decimal': // 小数转百分比, 保留两位小数 val = transformShortNum(value * 100, 2); afterUnit = typeof afterUnit === 'string' ? afterUnit : '%'; break; case 'decimalToPercentSave0Decimal': // 小数转百分比, 不保留两位小数 val = transformShortNum(value * 100, 0); afterUnit = typeof afterUnit === 'string' ? afterUnit : '%'; break; case 'percentSave2Decimal': // 百分比, 保留两位小数 val = transformShortNum(value, 2); afterUnit = typeof afterUnit === 'string' ? afterUnit : '%'; break; case 'percentSave0Decimal': // 百分比, 不保留两位小数 val = transformShortNum(value, 0); afterUnit = typeof afterUnit === 'string' ? afterUnit : '%'; break; case 'int': // 数量, 小于1万时,舍弃小数点,仅保留整数 val = transformShortNum(value, 2, true, true); break; case 'decimal': // 数量, 小于1万时,保留小数点 val = transformShortNum(value, 2, true, false); break; case 'secToTimeHM': // 秒转为 xxhyym val = formatTime(value, '{HH}h{mm}m'); break; case 'secToTimeChMS': // 秒转为 xx分yy秒 val = formatTime(value, '{mm}分{ss}秒'); break; case 'secToTimeMS': // 秒转为 xxmyys val = formatTime(value, '{mm}m{ss}s'); break; case 'secToTime': // 秒转为 {DD}d{HH}h{mm}m{ss}s,天数和小时为零时不展示 val = formatTime(value, '{DD}d{HH}h{mm}m{ss}s', false); val = val.replace('00d', '').replace('00h', ''); break; default: val = transformShortNum(value); } val = val !== '-' && isAbs ? val.replace('-', '') : val; return val === '-' ? '-' : `${beforeUnit || ''}${val}${afterUnit || ''}`; };