import CryptoJS from 'crypto-js'
import service from '@/services'
import moment from 'moment'
/**
* 获取url对象方法
* @param url
* @param base
* @returns
*/
export function getUrl(url: string, base?: string) {
const { uploadUrl } = service.config
return new URL(url, base ?? uploadUrl)
}
/**
* 获取图片地址
* @param fileUrl
*/
export function getImageUrl(fileUrl: string) {
if (fileUrl) {
const url = getUrl(fileUrl)
return url.href
}
return ''
}
/**
* 格式化html字符串
* @param text
* @returns
*/
export function formatHtmlString(text: string) {
const html = text.replace(/[\n\r]/g, '
')
return html.replace(/
]*src=['"]([^'"]+)[^>]*>/gi, (match, capture) => {
// 替换img标签src地址为绝对路径
const url = getUrl(capture)
return `
`
})
}
/**
* 处理价格颜色的显示
*/
export function handlePriceColor(curValue: number, preValue: number) {
if (!curValue || curValue === preValue) {
return ''
} else if (curValue > preValue) {
return 'g-color--up'
} else {
return 'g-color--down'
}
}
/**
* 处理空值的情况
* @param value 值
* @param suffix 后缀名
* @returns
*/
export function handleNoneValue(value: T, suffix = '') {
if (value == null || String(value) === '') {
return '--'
}
return value + suffix
}
/**
* 处理0值的情况
* @param value 值
* @param suffix 后缀名
* @returns
*/
export function handleNumberValue(value: number, suffix = '') {
if (value === 0) {
return '--'
}
return value + suffix
}
/**
* 强制保留小数位,不足位数自动补零
* @param value
* @param decimal 保留小数位
* @param round 是否四舍五入
* @returns
*/
export function formatDecimal(value: number | string, decimal = 2, round = true) {
const val = Number(value)
if (decimal <= 0) {
if (round) {
return Math.round(val).toString()
}
return Math.trunc(val).toString()
} else {
if (round) {
return val.toFixed(decimal)
}
let num = val.toString()
const index = num.indexOf('.')
if (index < 0) {
// 小数位自动补零
if (decimal > 0) {
const count = num.length
num += '.'
while (num.length <= count + decimal) {
num += '0'
}
}
}
return num.substring(0, decimal + index + 1)
}
}
/**
* 数字转千位符金额
* @param value 金额数值
* @param decimal 保留小数位 默认2
*/
export function formatAmount(value: number, decimal = 2) {
const reg = new RegExp('(\\d)(?=(\\d{3})+$)', 'ig')
const result = value.toFixed(decimal).toString().split('.')
result[0] = result[0].replace(reg, '$1,')
return result.join('.')
}
/**
* 日期格式化
* @param date
* @param format
* @returns
*/
export function formatDate(date?: string, format = 'YYYY-MM-DD HH:mm:ss') {
if (date) {
return moment(date).format(format)
}
return moment(new Date()).format(format)
}
/**
* Des密钥
* 手机发送验证码时加密方法
* @param mobile
*/
export function encryptDesMobile(mobile: string) {
const hexKey = CryptoJS.enc.Utf8.parse('Ub$kl^P3')
const hexData = CryptoJS.enc.Utf8.parse(mobile)
const desData = CryptoJS.DES.encrypt(hexData, hexKey, { iv: hexKey })
const encrypted = CryptoJS.enc.Base64.stringify(desData.ciphertext)
return encrypted
}
/**
* 获取加密后的手机号码
* @param mobile 手机号码
* @returns 加密后的手机号码
*/
export function getEncryptMobile(mobile: string) {
const encryptMobile = encryptDesMobile(mobile)
return encryptMobile.replace(new RegExp('\\+', 'g'), '*').replace(new RegExp('\\/', 'g'), '-').replace(new RegExp('\\=', 'g'), '.')
}