From 0396d398bea811f5650d04ce5b55a232b4f58b98 Mon Sep 17 00:00:00 2001 From: Tevin <tingquanren@163.com> Date: Thu, 27 Mar 2025 17:07:52 +0800 Subject: [PATCH] 移除 link-rules --- common/Tools.js | 120 ++++++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 109 insertions(+), 11 deletions(-) diff --git a/common/Tools.js b/common/Tools.js index 72d2079..2f0635d 100644 --- a/common/Tools.js +++ b/common/Tools.js @@ -6,6 +6,8 @@ import moment from 'moment'; import Taro from '@tarojs/taro'; +moment.locale('zh-cn'); + export class Tools { /** * 显示消息 @@ -47,7 +49,7 @@ * @return {string} */ static createGUID() { - return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { let r = (Math.random() * 16) | 0, v = c === 'x' ? r : (r & 0x3) | 0x8; return v.toString(16); @@ -436,16 +438,88 @@ /** * 数值转换为金钱格式 * @param {Number|String} number + * @param {String} [forRead=''] 便于阅读财务金额模式 * @return {string} */ - static moneyFormat(number) { + static moneyFormat(number, forRead = '') { if (!number && typeof number !== 'number' && typeof number !== 'string') { return ''; } if (typeof number === 'string') { number = Number(number) || 0; } - return number.toFixed(2); + if (forRead === 'forRead') { + return number.toLocaleString('zh-cn', { + minimumFractionDigits: 2, + maximumFractionDigits: 2, + }); + } else { + return number.toFixed(2); + } + } + + /** + * 数值转换为千分位格式 + * @param {Number|String} number - 传入的值 + * @param {String} decimalFormat - 处理小数的方式 - notRetain(不保留小数,有小数时也会去掉小数位),keepTwo(保留两位小数),keepThree(保留三位小数) + * @return {string} + */ + static thousandFormat(number, decimalFormat = 'keepTwo') { + if (!number && typeof number !== 'number' && typeof number !== 'string') { + return ''; + } + // 原始数据 + let num = number.toString(); + // 需要进千分位的数,小数点前的数才需要进行千分位计算,即整数位 + let needThousand = ''; + // 小数位 + let decimals = ''; + // 没有小数位 + if (!(num.indexOf('.') > -1)) { + needThousand = num.toString(); + if (decimalFormat === 'keepTwo') { + decimals = '00'; + } else if (decimalFormat === 'keepThree') { + decimals = '000'; + } + } + // 存在小数位时 + else if (num.indexOf('.') > -1) { + needThousand = num.split('.')[0].toString(); + if (decimalFormat === 'keepTwo') { + decimals = Number(num).toFixed(2).split('.')[1] || ''; + } else if (decimalFormat === 'keepThree') { + decimals = Number(num).toFixed(3).split('.')[1] || ''; + } + } + // 计算整数位长度 + let len = needThousand.length; + // 如果整数位小于3,直接返回 + if (len <= 3) { + return decimals ? needThousand + '.' + decimals : needThousand; + } + // 整数位大于3 + else { + // 小数位后的值 + let temp = ''; + // 对整数取余 + let remainder = len % 3; + if (decimals) { + temp = '.' + decimals; + } + if (remainder > 0) { + // 不是3的整数倍 + return ( + needThousand.slice(0, remainder) + + ',' + + needThousand.slice(remainder, len).match(/\d{3}/g)?.join(',') + + temp + ); + } else { + // 3的整数倍 + return needThousand.slice(0, len).match(/\d{3}/g)?.join(',') + temp; + } + } } /** @@ -526,13 +600,12 @@ * @return {String} */ static transWeekIndexToDate(year, week, weekDay) { - const yearStart = moment([year, 0, 1]); - const dayLong = 24 * 60 * 60 * 1000; - const firstWeekLong = (7 - yearStart.day()) * dayLong; - const weeksLong = (week - 1) * 7 * dayLong; - const weekDayLong = weekDay * dayLong; - const dayTimestamp = yearStart.valueOf() + firstWeekLong + weeksLong + weekDayLong; - return moment(dayTimestamp).format('YYYY-MM-DD'); + if (weekDay < 1 && weekDay > 7) { + return ''; + } + const weekDate = moment(year + '-' + week, 'YYYY-WW'); + const firstDay = weekDate.startOf('week'); + return firstDay.add(weekDay - 1, 'day').format('YYYY-MM-DD'); } /** @@ -579,6 +652,32 @@ } }; } + /** + * 精确保留小数点几位数, 自动补零, 四舍五入 + * 修复 toFixed 四舍六入五讨论的问题 + * @param {Number|String} num 数值 + * @param {Number} [digit=0] 小数点后位数 + * @returns {String|NaN} + */ + static accFixed(num, digit = 0) { + const number = parseFloat(num); + if (isNaN(number)) { + return NaN; + } + if (number >= 0) { + return ( + Math.round((number + Number.EPSILON) * Math.pow(10, digit)) / Math.pow(10, digit) + ).toFixed(digit); + } else { + return ( + '-' + + ( + Math.round((Math.abs(number) + Number.EPSILON) * Math.pow(10, digit)) / + Math.pow(10, digit) + ).toFixed(digit) + ); + } + } } // h5 中,实现 rem 转换 px @@ -597,4 +696,3 @@ console.info(Math.round(px) + 'px'); }; } - -- Gitblit v1.9.1