184 lines
4.2 KiB
JavaScript
184 lines
4.2 KiB
JavaScript
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
|
||
|
||
/**
|
||
* 重量 进退位 单位
|
||
*/
|
||
export const weightDigit = 1000
|
||
|
||
/**
|
||
* 除以
|
||
* @param {*} val
|
||
* @param {*} digit
|
||
* @param {*} priceStatus //是否显示千位分割
|
||
* @returns
|
||
*/
|
||
export const formatPriceDiv = (val, digit = Digit, priceStatus = false) => {
|
||
let 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 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) {
|
||
let time = new Date(val)
|
||
let Y = time.getFullYear()
|
||
let M = time.getMonth() + 1
|
||
let d = time.getDate()
|
||
let h = time.getHours()
|
||
let m = time.getMinutes()
|
||
let s = time.getSeconds()
|
||
|
||
fmt = fmt
|
||
.replace('YYYY', 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 {*} num
|
||
* @param {*} precision
|
||
* @returns
|
||
*/
|
||
export const strip = (num, precision = 12) => {
|
||
return +parseFloat(num.toPrecision(precision))
|
||
}
|
||
|
||
/**
|
||
* 转换金额单位
|
||
* @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 {*} x
|
||
* @returns
|
||
*/
|
||
export const toDecimal2 = (x) => {
|
||
var f = parseFloat(x)
|
||
if (isNaN(f)) {
|
||
return 0
|
||
}
|
||
f = f + ''
|
||
let index = f.lastIndexOf('.')
|
||
if (index >= 0) {
|
||
let 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 {*} 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' }
|
||
}
|
||
}
|
||
|
||
/**
|
||
*
|
||
* @param {千位分割付} number
|
||
* @returns
|
||
*/
|
||
export const numberWithCommas = ({ number = 0, digit = 2 }) => {
|
||
if (!isNaN(Number(number))) {
|
||
// return parseFloat(number).toFixed(digit).replace(/^\B(?<!\.\d*)(?=(\d{3})+(?!\d))$/g, ",");
|
||
return parseFloat(number).toLocaleString('zh', { minimumFractionDigits: digit })
|
||
} else {
|
||
return 0.0
|
||
}
|
||
}
|