From 763bdcc0d068f5bb62d577814da635ed5235bb06 Mon Sep 17 00:00:00 2001 From: Tevin <tingquanren@163.com> Date: Mon, 04 Jul 2022 18:12:54 +0800 Subject: [PATCH] 实现二维码组件 --- common/Tools.js | 188 +++++++++++++++++++++++++++------------------- 1 files changed, 110 insertions(+), 78 deletions(-) diff --git a/common/Tools.js b/common/Tools.js index 571d010..2f36e53 100644 --- a/common/Tools.js +++ b/common/Tools.js @@ -5,9 +5,23 @@ import moment from 'moment'; import Taro from '@tarojs/taro'; -import { $ } from '@tarojs/extend'; export class Tools { + + /** + * 显示消息 + * @param msg + * @param [duration=2000] + * @param [mask=false] + */ + static toast(msg, duration = 2000, mask = false) { + Taro.showToast({ + title: msg, + icon: 'none', + mask, + duration, + }); + } /** * URL参数解析 @@ -15,41 +29,17 @@ * @param {String} [search] * @return {String|Null} */ - static getUrlParam(name, search = window.location.search) { + static getUrlParam(name, search) { + if (process.env.TARO_ENV === 'weapp') { + return null; + } + search = search || window.location.search; const reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i'); const r = search.substr(1).match(reg); if (r !== null) { return decodeURIComponent(r[2]); } else { return null; - } - } - - /** - * 显示消息 - * @param msg - */ - static toast(msg) { - Taro.showToast({ - title: msg, - icon: 'none', - mask: true, - duration: 2000, - }); - } - - /** - * 锁定页面 - * @param type - lock / unlock - */ - static lockScreen(type) { - if (typeof Tools.$lock) { - Tools.$lock = $('#lock'); - } - if (type === 'lock') { - Tools.$lock.show(); - } else if (type === 'unlock') { - Tools.$lock.hide(); } } @@ -77,6 +67,50 @@ v = c === 'x' ? r : ((r & 0x3) | 0x8); return v.toString(16); }); + } + + /** + * 获取随机字符串 + * @param {number} long + * @return {string} + */ + static getRandomString(long) { + long = long || 32; + const template = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678'; + const count = template.length; + let result = ''; + for (let i = 0; i < long; i++) { + result += template.charAt(Math.floor(Math.random() * count)); + } + return result; + } + + /** + * 检查网络状态 + */ + static checkOnlineState(callback) { + // 网页模式 + if (process.env.TARO_ENV === 'h5') { + // 网络已开启 + if (navigator.onLine) { + // 用图片资源测试网络状态 + const img = new Image(); + img.onload = () => { + img.onload = null; + callback && callback(true); + }; + img.onerror = () => { + img.onerror = null; + callback && callback(false); + }; + img.src = 'http://tt.zhiheiot.com/static/online.png?t=' + Date.now(); + } + // 网络未开启 + else { + callback && callback(false); + } + } + // 补充:小程序模式用 getNetworkType } /** @@ -134,12 +168,21 @@ } /** + * 判断是否为未定义 + * @param {*} data + * @return {Boolean} + */ + static isUndefined(data) { + return Object.prototype.toString.call(data) === '[object Undefined]'; + } + + /** * 判断是否为 null * @param {*} data * @return {Boolean} */ static isNull(data) { - return data === null; + return Object.prototype.toString.call(data) === '[object Null]'; } /** @@ -179,33 +222,6 @@ } return true; } - - // static getObjDataByPath(obj, path) { - // const arr = path.split('.'); - // const reg2 = /\[(.*)]/g; - // const reg4 = /\w+(?=\[)|(?<=\[)(.*?)(?=])/g; - // let stack = []; - // let temp; - // arr.forEach(item => { - // if (reg2.test(item)) { - // while ((temp = reg4.exec(item))) { - // stack.push(temp[0]); - // } - // } else { - // stack.push(item); - // } - // }); - // stack = stack.map(item => { - // return item.replace(/^['"`]|['"`]$/g, ''); - // }); - // try { - // return stack.reduce((pre, next) => { - // return pre[next]; - // }, obj); - // } catch (err) { - // return undefined; - // } - // } /** * 统计字符串占位宽度 @@ -333,18 +349,6 @@ } /** - * 数组元素交换位置 - * @param {array} arr 数组 - * @param {number} index1 要交换项目的位置 - * @param {number} index2 被交换项目的位置 - * @tutorial 例如:1,5就是数组中下标为1和5的两个元素交换位置 - */ - static swapArray(arr, index1, index2) { - arr[index1] = arr.splice(index2, 1, arr[index1])[0]; - return arr; - } - - /** * 使用 moment.js 格式化时间戳 * @param {Number|String} timestamp * @param {String} [type='date'] @@ -358,7 +362,16 @@ if (Tools.isString(timestamp)) { // 全数值 if (/^\d+$/.test(timestamp)) { - timestamp = parseInt(timestamp); + // 8位视为无连接符日期 + if (timestamp.length === 8) { + const day = timestamp.substr(0, 4) + '-' + + timestamp.substr(4, 2) + '-' + timestamp.substr(6, 2); + timestamp = (new Date(timestamp)).getTime(); + } + // 超过8位,视为时间戳 + else if (timestamp.length > 8) { + timestamp = parseInt(timestamp); + } } // 日期 else { @@ -368,7 +381,15 @@ } } } - if (timestamp < 9 * 10e8) { + // 转为数值的无连接符日期 + if (timestamp < 9 * 10e6) { + const timeStr = timestamp + ''; + const day = timeStr.substr(0, 4) + '-' + + timeStr.substr(4, 2) + '-' + timeStr.substr(6, 2); + timestamp = (new Date(day)).getTime(); + } + // 按秒时间戳 + else if (timestamp < 9 * 10e8) { timestamp *= 1000; } const curMoment = moment(timestamp); @@ -402,7 +423,7 @@ if (minutes) { words = minutes + '分' + words; } - const hours = duration.get('hours'); + const hours = parseInt(duration.as('hours')); if (hours) { words = hours + '小时' + words; } @@ -415,16 +436,13 @@ * @return {string} */ static moneyFormat(number) { - if (!number && typeof number !== 'number') { + if (!number && typeof number !== 'number' && typeof number !== 'string') { return ''; } if (typeof number === 'string') { number = Number(number) || 0; } - const numFixed = number.toFixed(2); - const integer = parseInt(numFixed); - const decimal = numFixed.split('.')[1]; - return integer.toLocaleString() + '.' + decimal; + return number.toFixed(2); } /** @@ -498,5 +516,19 @@ return /^1[3456789]\d{9}$/.test('' + phone); } +} +// h5 中,实现 rem 转换 px +if (process.env.NODE_ENV === 'development' && process.env.TARO_ENV === 'h5') { + window.rem = val => { + const p1 = { + x: parseFloat(Taro.pxTransform(10, 750)), y: 10, + }; + const p2 = { + x: parseFloat(Taro.pxTransform(1000, 750)), y: 1000, + }; + const value = typeof val === 'number' ? val : parseFloat(val); + const px = (value - p1.x) * (p2.y - p1.y) / (p2.x - p1.x) + p1.y; + console.info(Math.round(px) + 'px'); + }; } \ No newline at end of file -- Gitblit v1.9.1