Files
front-pc/utils/utils.ts

99 lines
3.9 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import Decimal from 'decimal.js'
/**
* 加法计算
* @param param1 当前值number或string
* @param param2 当前值number或string
* @param num 保留小数位数默认小数2位
* @param mode 舍入模式1 向上取2 向下取3 四舍五入默认3
* @returns 返回处理后的数据
*/
export function accAdd(param1: number | string, param2: number | string, num = 2, mode = 3) {
if (param1 === null || param1 === undefined || param1 === '') return param1
if (param2 === null || param2 === undefined || param2 === '') return param2
const temp = new Decimal(param1).add(new Decimal(param2))
if (mode === 1) return temp.toFixed(num, Decimal.ROUND_UP)
else if (mode === 2) return temp.toFixed(num, Decimal.ROUND_DOWN)
else return temp.toFixed(num, Decimal.ROUND_HALF_UP)
}
/**
* 减法计算
* @param param1 当前值number或string
* @param param2 当前值number或string
* @param num 保留小数位数默认小数2位
* @param mode 舍入模式1 向上取2 向下取3 四舍五入默认3
* @returns 返回处理后的数据
*/
export function accSub(param1: number | string, param2: number | string, num = 2, mode = 3) {
if (param1 === null || param1 === undefined || param1 === '') return param1
if (param2 === null || param2 === undefined || param2 === '') return param2
const temp = new Decimal(param1).sub(new Decimal(param2))
if (mode === 1) return temp.toFixed(num, Decimal.ROUND_UP)
else if (mode === 2) return temp.toFixed(num, Decimal.ROUND_DOWN)
else return temp.toFixed(num, Decimal.ROUND_HALF_UP)
}
/**
* 乘法计算
* @param param1 当前值number或string
* @param param2 当前值number或string
* @param num 保留小数位数默认小数2位
* @param mode 舍入模式1 向上取2 向下取3 四舍五入默认3
* @returns 返回处理后的数据
*/
export function accMul(param1: number | string, param2: number | string, num = 2, mode = 3) {
if (param1 === null || param1 === undefined || param1 === '') return param1
if (param2 === null || param2 === undefined || param2 === '') return param2
const temp = new Decimal(param1).mul(new Decimal(param2))
if (mode === 1) return temp.toFixed(num, Decimal.ROUND_UP)
else if (mode === 2) return temp.toFixed(num, Decimal.ROUND_DOWN)
else return temp.toFixed(num, Decimal.ROUND_HALF_UP)
}
/**
* 除法计算
* @param param1 当前值number或string
* @param param2 当前值number或string
* @param num 保留小数位数默认小数2位
* @param mode 舍入模式1 向上取2 向下取3 四舍五入默认3
* @returns 返回处理后的数据
*/
export function accDiv(param1: number | string, param2: number | string, num = 2, mode = 3) {
if (param1 === null || param1 === undefined || param1 === '') return param1
if (param2 === null || param2 === undefined || param2 === '' || param2.toString() === '0') return param2
const temp = new Decimal(param1).div(new Decimal(param2))
if (mode === 1) return temp.toFixed(num, Decimal.ROUND_UP)
else if (mode === 2) return temp.toFixed(num, Decimal.ROUND_DOWN)
else return temp.toFixed(num, Decimal.ROUND_HALF_UP)
}
/**
* 数字格式化千分位显示
* @param decimals 保留小数位数, 传-1则表示 原数字有小数则保留两位小数,原数字没小数则为整数
* @returns 返回处理后的数据字符串
*/
export const formatNumber = (value?: number, decimals = 0) => {
if (!value) return 0
if (decimals === -1) {
decimals = value % 1 === 0 ? 0 : 2
}
return new Intl.NumberFormat('zh-CN', {
minimumFractionDigits: decimals,
maximumFractionDigits: decimals,
}).format(value)
}
/***
* 下载文件
* @param url 文件地址
* @param filename 文件名
*/
export const downloadFile = (url: string, filename: string) => {
const a = document.createElement('a')
a.href = url
a.download = filename || 'download' // 设置下载的文件名
document.body.appendChild(a)
a.click()
document.body.removeChild(a)
}