123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- let _debounceTimeout = null,
- _throttleRunning = false
-
- /**
- * 防抖
- * 参考文章 https://juejin.cn/post/6844903669389885453
- *
- * @param {Function} 执行函数
- * @param {Number} delay 延时ms
- */
- export const debounce = (fn, delay=500) => {
- clearTimeout(_debounceTimeout);
- _debounceTimeout = setTimeout(() => {
- fn();
- }, delay);
- }
- /**
- * 节流
- * 参考文章 https://juejin.cn/post/6844903669389885453
- *
- * @param {Function} 执行函数
- * @param {Number} delay 延时ms
- */
- export const throttle = (fn, delay=500) => {
- if(_throttleRunning){
- return;
- }
- _throttleRunning = true;
- fn();
- setTimeout(() => {
- _throttleRunning = false;
- }, delay);
- }
- /**
- * toast 提示
- *
- * @param {String} title 标题
- * @param {Object} param 拓展参数
- * @param {Integer} param.duration 持续时间
- * @param {Boolean} param.mask 是否遮罩
- * @param {Boolean} param.icon 图标
- */
- export const msg = (title = '', param={}) => {
- if (!title) {
- return;
- }
- uni.showToast({
- title,
- duration: param.duration || 1500,
- mask: param.mask || false,
- icon: param.icon || 'none' // TODO 芋艿:是否要区分下 error 的提示,或者专门的封装
- });
- }
- /**
- * 检查登录
- *
- * @param {Boolean} options.nav 如果未登陆,是否跳转到登陆页。默认为 true
- * @return {Boolean} 是否登陆
- */
- export const isLogin = (options = {}) => {
- const token = getAuthToken();
- if (token) {
- return true;
- }
- // 若 nav 不为 false,则进行跳转登陆页
- if (options.nav !== false) {
- uni.navigateTo({
- url: '/pages/auth/login'
- })
- }
- return false;
- }
- /**
- * 获得认证 Token
- *
- * @return 认证 Token
- */
- export const getAuthToken = () => {
- return uni.getStorageSync('token');
- }
- /**
- * 校验参数
- *
- * @param {String} 字符串
- * @param {String} 数据的类型。例如说 mobile 手机号、tel 座机 TODO 芋艿:是否组件里解决
- */
- export const checkStr = (str, type) => {
- switch (type) {
- case 'mobile': //手机号码
- return /^1[3|4|5|6|7|8|9][0-9]{9}$/.test(str);
- case 'tel': //座机
- return /^(0\d{2,3}-\d{7,8})(-\d{1,4})?$/.test(str);
- case 'card': //身份证
- return /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(str);
- case 'mobileCode': //6位数字验证码
- return /^[0-9]{6}$/.test(str)
- case 'pwd': //密码以字母开头,长度在6~18之间,只能包含字母、数字和下划线
- return /^([a-zA-Z0-9_]){6,18}$/.test(str)
- case 'payPwd': //支付密码 6位纯数字
- return /^[0-9]{6}$/.test(str)
- case 'postal': //邮政编码
- return /[1-9]\d{5}(?!\d)/.test(str);
- case 'QQ': //QQ号
- return /^[1-9][0-9]{4,9}$/.test(str);
- case 'email': //邮箱
- return /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/.test(str);
- case 'money': //金额(小数点2位)
- return /^\d*(?:\.\d{0,2})?$/.test(str);
- case 'URL': //网址
- return /(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?/.test(str)
- case 'IP': //IP
- return /((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))/.test(str);
- case 'date': //日期时间
- return /^(\d{4})\-(\d{2})\-(\d{2}) (\d{2})(?:\:\d{2}|:(\d{2}):(\d{2}))$/.test(str) || /^(\d{4})\-(\d{2})\-(\d{2})$/
- .test(str)
- case 'number': //数字
- return /^[0-9]$/.test(str);
- case 'english': //英文
- return /^[a-zA-Z]+$/.test(str);
- case 'chinese': //中文
- return /^[\\u4E00-\\u9FA5]+$/.test(str);
- case 'lower': //小写
- return /^[a-z]+$/.test(str);
- case 'upper': //大写
- return /^[A-Z]+$/.test(str);
- case 'HTML': //HTML标记
- return /<("[^"]*"|'[^']*'|[^'">])*>/.test(str);
- default:
- return true;
- }
- }
|