209 lines
4.6 KiB
TypeScript
209 lines
4.6 KiB
TypeScript
import { IMG_CND_Prefix } from './constant'
|
||
|
||
/**
|
||
* 移除井号
|
||
* @param {String} val code 编码
|
||
* @returns
|
||
*/
|
||
export const formatRemoveHashTag = (val = '') => {
|
||
// console.log('移除标签',val,val.endsWith("#"));
|
||
return val.endsWith('#') ? val.replace('#', '') : val
|
||
}
|
||
|
||
/**
|
||
* 格式化编码+名称显示方式
|
||
* @param {String} code 编码
|
||
* @param {String} name 名称
|
||
* @param {*} mode 模式 both:code + 名称 name: 仅显示名称
|
||
* @returns
|
||
*/
|
||
export const formatHashTag = (code = '', name = '', mode = 'both') => {
|
||
if (mode == 'both') {
|
||
return `${formatRemoveHashTag(code)}# ${name}`
|
||
}
|
||
else if (mode == 'name') {
|
||
return `${name}`
|
||
}
|
||
}
|
||
|
||
const Digit = 10 * 10
|
||
|
||
/**
|
||
* 精度
|
||
* @param {*} num
|
||
* @param {*} precision
|
||
* @returns
|
||
*/
|
||
export const strip = (num, precision = 12) => {
|
||
return +parseFloat(num.toPrecision(precision))
|
||
}
|
||
/**
|
||
*
|
||
* @param {千位分割付} number
|
||
* @returns
|
||
*/
|
||
export const numberWithCommas = ({ number = 0, digit = 2 }) => {
|
||
if (!Number.isNaN(Number(number))) {
|
||
// return parseFloat(number).toFixed(digit).replace(/^\B(?<!\.\d*)(?=(\d{3})+(?!\d))$/g, ",");
|
||
return parseFloat(number as unknown as string).toLocaleString('zh', { minimumFractionDigits: digit })
|
||
}
|
||
else {
|
||
return 0.0
|
||
}
|
||
}
|
||
/**
|
||
* 重量 进退位 单位
|
||
*/
|
||
export const weightDigit = 1000
|
||
|
||
/**
|
||
* 厘米进退位单位
|
||
*/
|
||
export const meterDigit = 100
|
||
|
||
/**
|
||
* 除以
|
||
* @param {*} val
|
||
* @param {*} digit
|
||
* @param {*} priceStatus //是否显示千位分割
|
||
* @returns
|
||
*/
|
||
export const formatPriceDiv = (val, digit = Digit, priceStatus = false) => {
|
||
const res = strip(Number(val / digit)) || 0
|
||
return priceStatus ? numberWithCommas({ number: res }) : res
|
||
}
|
||
/**
|
||
* 乘以
|
||
* @param {*} val
|
||
* @param {*} digit
|
||
* @returns
|
||
*/
|
||
export const formatPriceMul = (val, digit = Digit) => {
|
||
return strip(Number(val * digit)) || 0
|
||
}
|
||
|
||
/**
|
||
* 格式化长度 (乘以)
|
||
* @param {Number} val
|
||
* @returns
|
||
*/
|
||
export const formatMeterMul = (val, digit = meterDigit) => {
|
||
return strip(Number(val * digit)) || 0
|
||
}
|
||
|
||
/**
|
||
* 格式化长度 (除以)
|
||
* @param {*} val
|
||
*/
|
||
export const formatMeterDiv = (val, digit = meterDigit) => {
|
||
return strip(Number(val / digit)) || 0
|
||
}
|
||
|
||
/**
|
||
* 格式化重量单位 (乘以)
|
||
* @param {Number} val
|
||
* @returns
|
||
*/
|
||
export const formatWeightMul = (val, digit = weightDigit) => {
|
||
return strip(Number(val * digit)) || 0
|
||
}
|
||
|
||
/**
|
||
* 格式化重量单位 (除以)
|
||
* @param {*} val
|
||
*/
|
||
export const formatWeightDiv = (val, digit = weightDigit) => {
|
||
return strip(Number(val / digit)) || 0
|
||
}
|
||
|
||
export const formatDateTime = (val, fmt = 'YYYY-MM-DD HH:mm:ss') => {
|
||
if (val) {
|
||
const time = new Date(val)
|
||
const Y = time.getFullYear()
|
||
const M = time.getMonth() + 1
|
||
const d = time.getDate()
|
||
const h = time.getHours()
|
||
const m = time.getMinutes()
|
||
const s = time.getSeconds()
|
||
|
||
fmt = fmt
|
||
.replace('YYYY', String(Y))
|
||
.replace('MM', M.toString().padStart(2, '0'))
|
||
.replace('DD', d.toString().padStart(2, '0'))
|
||
.replace('HH', h.toString().padStart(2, '0'))
|
||
.replace('mm', m.toString().padStart(2, '0'))
|
||
.replace('ss', s.toString().padStart(2, '0'))
|
||
|
||
return fmt
|
||
}
|
||
else {
|
||
return val
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 数值保留两位小数
|
||
* @param {*} x
|
||
* @returns
|
||
*/
|
||
export const toDecimal2 = (x) => {
|
||
let f = String(parseFloat(x))
|
||
if (Number.isNaN(f)) {
|
||
return 0
|
||
}
|
||
f = `${f}`
|
||
const index = f.lastIndexOf('.')
|
||
if (index >= 0) {
|
||
const decimal = f.substring(index + 1)
|
||
if (decimal.length == 1) {
|
||
f = `${f.substring(0, index + 1) + decimal}0`
|
||
}
|
||
else {
|
||
f = f.substring(0, index + 1) + decimal.substring(0, 2)
|
||
}
|
||
}
|
||
return f
|
||
}
|
||
/**
|
||
* 转换金额单位
|
||
* @param {*} num 金额 / 数值
|
||
* @param {*} digit 转换单位
|
||
* @returns
|
||
*/
|
||
export const formatMillionYuan = (num, digit = 10000) => {
|
||
return num / digit > 1 ? { num: toDecimal2(num / digit), million: true } : { num, million: false }
|
||
}
|
||
/**
|
||
* 格式化图片路径
|
||
* @param {*} url
|
||
* @status true|false
|
||
* @returns
|
||
*/
|
||
export const formatImgUrl = (url, suffix = '!w200') => {
|
||
if (url) {
|
||
return url.includes('http') ? url + suffix : IMG_CND_Prefix + url + suffix
|
||
}
|
||
else {
|
||
return `${IMG_CND_Prefix}/mall/no_img.png`
|
||
}
|
||
}
|
||
|
||
/**
|
||
*
|
||
* @param {纹理图} imgurl
|
||
* @param {rgb} rgb
|
||
* @param {} suffix
|
||
* @returns 1 有纹理图,2 有rgb 3默认图
|
||
*/
|
||
export const isLabImage = (imgurl, rgb, suffix = '!w200') => {
|
||
if (imgurl) {
|
||
return { status: 1, value: `${IMG_CND_Prefix}/${imgurl}${suffix}` }
|
||
}
|
||
else if (rgb.r != 0 || rgb.g != 0 || rgb.b != 0) {
|
||
return { status: 2, value: rgb }
|
||
}
|
||
else {
|
||
return { status: 3, value: `${IMG_CND_Prefix}/mall/no_img.png` }
|
||
}
|
||
}
|