| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- import dayjs from 'dayjs';
- const formatTime = (date, template) => dayjs(date).format(template);
- /**
- * 格式化价格数额为字符串
- * 可对小数部分进行填充,默认不填充
- * @param price 价格数额,以分为单位!
- * @param fill 是否填充小数部分 0-不填充 1-填充第一位小数 2-填充两位小数
- */
- function priceFormat(price, fill = 0) {
- if (isNaN(price) || price === null || price === Infinity) {
- return price;
- }
- let priceFormatValue = Math.round(parseFloat(`${price}`) * 10 ** 8) / 10 ** 8; // 恢复精度丢失
- priceFormatValue = `${Math.ceil(priceFormatValue) / 100}`; // 向上取整,单位转换为元,转换为字符串
- if (fill > 0) {
- // 补充小数位数
- if (priceFormatValue.indexOf('.') === -1) {
- priceFormatValue = `${priceFormatValue}.`;
- }
- const n = fill - priceFormatValue.split('.')[1]?.length;
- for (let i = 0; i < n; i++) {
- priceFormatValue = `${priceFormatValue}0`;
- }
- }
- return priceFormatValue;
- }
- /**
- * 获取cdn裁剪后链接
- *
- * @param {string} url 基础链接
- * @param {number} width 宽度,单位px
- * @param {number} [height] 可选,高度,不填时与width同值
- */
- const cosThumb = (url, width, height = width) => {
- if (url.indexOf('?') > -1) {
- return url;
- }
- if (url.indexOf('http://') === 0) {
- url = url.replace('http://', 'https://');
- }
- return `${url}?imageMogr2/thumbnail/${~~width}x${~~height}`;
- };
- const get = (source, paths, defaultValue) => {
- if (typeof paths === 'string') {
- paths = paths
- .replace(/\[/g, '.')
- .replace(/\]/g, '')
- .split('.')
- .filter(Boolean);
- }
- const { length } = paths;
- let index = 0;
- while (source != null && index < length) {
- source = source[paths[index++]];
- }
- return source === undefined || index === 0 ? defaultValue : source;
- };
- let systemWidth = 0;
- /** 获取系统宽度,为了减少启动消耗所以在函数里边做初始化 */
- export const loadSystemWidth = () => {
- if (systemWidth) {
- return systemWidth;
- }
- try {
- ({ screenWidth: systemWidth, pixelRatio } = wx.getSystemInfoSync());
- } catch (e) {
- systemWidth = 0;
- }
- return systemWidth;
- };
- /**
- * 转换rpx为px
- *
- * @description
- * 什么时候用?
- * - 布局(width: 172rpx)已经写好, 某些组件只接受px作为style或者prop指定
- *
- */
- const rpx2px = (rpx, round = false) => {
- loadSystemWidth();
- // px / systemWidth = rpx / 750
- const result = (rpx * systemWidth) / 750;
- if (round) {
- return Math.floor(result);
- }
- return result;
- };
- /**
- * 手机号码*加密函数
- * @param {string} phone 电话号
- * @returns
- */
- const phoneEncryption = (phone) => {
- return phone.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2');
- };
- // 内置手机号正则字符串
- const innerPhoneReg =
- '^1(?:3\\d|4[4-9]|5[0-35-9]|6[67]|7[0-8]|8\\d|9\\d)\\d{8}$';
- /**
- * 手机号正则校验
- * @param phone 手机号
- * @param phoneReg 正则字符串
- * @returns true - 校验通过 false - 校验失败
- */
- const phoneRegCheck = (phone) => {
- const phoneRegExp = new RegExp(innerPhoneReg);
- return phoneRegExp.test(phone);
- };
- module.exports = {
- formatTime,
- priceFormat,
- cosThumb,
- get,
- rpx2px,
- phoneEncryption,
- phoneRegCheck,
- };
|