util.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. let _debounceTimeout = null,
  2. _throttleRunning = false
  3. /**
  4. * 防抖
  5. * 参考文章 https://juejin.cn/post/6844903669389885453
  6. *
  7. * @param {Function} 执行函数
  8. * @param {Number} delay 延时ms
  9. */
  10. export const debounce = (fn, delay=500) => {
  11. clearTimeout(_debounceTimeout);
  12. _debounceTimeout = setTimeout(() => {
  13. fn();
  14. }, delay);
  15. }
  16. /**
  17. * 节流
  18. * 参考文章 https://juejin.cn/post/6844903669389885453
  19. *
  20. * @param {Function} 执行函数
  21. * @param {Number} delay 延时ms
  22. */
  23. export const throttle = (fn, delay=500) => {
  24. if(_throttleRunning){
  25. return;
  26. }
  27. _throttleRunning = true;
  28. fn();
  29. setTimeout(() => {
  30. _throttleRunning = false;
  31. }, delay);
  32. }
  33. /**
  34. * toast 提示
  35. *
  36. * @param {String} title 标题
  37. * @param {Object} param 拓展参数
  38. * @param {Integer} param.duration 持续时间
  39. * @param {Boolean} param.mask 是否遮罩
  40. * @param {Boolean} param.icon 图标
  41. */
  42. export const msg = (title = '', param={}) => {
  43. if (!title) {
  44. return;
  45. }
  46. uni.showToast({
  47. title,
  48. duration: param.duration || 1500,
  49. mask: param.mask || false,
  50. icon: param.icon || 'none' // TODO 芋艿:是否要区分下 error 的提示,或者专门的封装
  51. });
  52. }
  53. /**
  54. * 检查登录
  55. *
  56. * @param {Boolean} options.nav 如果未登陆,是否跳转到登陆页。默认为 true
  57. * @return {Boolean} 是否登陆
  58. */
  59. export const isLogin = (options = {}) => {
  60. const token = getAuthToken();
  61. if (token) {
  62. return true;
  63. }
  64. // 若 nav 不为 false,则进行跳转登陆页
  65. if (options.nav !== false) {
  66. uni.navigateTo({
  67. url: '/pages/auth/login'
  68. })
  69. }
  70. return false;
  71. }
  72. /**
  73. * 获得认证 Token
  74. *
  75. * @return 认证 Token
  76. */
  77. export const getAuthToken = () => {
  78. return uni.getStorageSync('token');
  79. }
  80. /**
  81. * 校验参数
  82. *
  83. * @param {String} 字符串
  84. * @param {String} 数据的类型。例如说 mobile 手机号、tel 座机 TODO 芋艿:是否组件里解决
  85. */
  86. export const checkStr = (str, type) => {
  87. switch (type) {
  88. case 'mobile': //手机号码
  89. return /^1[3|4|5|6|7|8|9][0-9]{9}$/.test(str);
  90. case 'tel': //座机
  91. return /^(0\d{2,3}-\d{7,8})(-\d{1,4})?$/.test(str);
  92. case 'card': //身份证
  93. return /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(str);
  94. case 'mobileCode': //6位数字验证码
  95. return /^[0-9]{6}$/.test(str)
  96. case 'pwd': //密码以字母开头,长度在6~18之间,只能包含字母、数字和下划线
  97. return /^([a-zA-Z0-9_]){6,18}$/.test(str)
  98. case 'payPwd': //支付密码 6位纯数字
  99. return /^[0-9]{6}$/.test(str)
  100. case 'postal': //邮政编码
  101. return /[1-9]\d{5}(?!\d)/.test(str);
  102. case 'QQ': //QQ号
  103. return /^[1-9][0-9]{4,9}$/.test(str);
  104. case 'email': //邮箱
  105. return /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/.test(str);
  106. case 'money': //金额(小数点2位)
  107. return /^\d*(?:\.\d{0,2})?$/.test(str);
  108. case 'URL': //网址
  109. return /(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?/.test(str)
  110. case 'IP': //IP
  111. return /((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))/.test(str);
  112. case 'date': //日期时间
  113. return /^(\d{4})\-(\d{2})\-(\d{2}) (\d{2})(?:\:\d{2}|:(\d{2}):(\d{2}))$/.test(str) || /^(\d{4})\-(\d{2})\-(\d{2})$/
  114. .test(str)
  115. case 'number': //数字
  116. return /^[0-9]$/.test(str);
  117. case 'english': //英文
  118. return /^[a-zA-Z]+$/.test(str);
  119. case 'chinese': //中文
  120. return /^[\\u4E00-\\u9FA5]+$/.test(str);
  121. case 'lower': //小写
  122. return /^[a-z]+$/.test(str);
  123. case 'upper': //大写
  124. return /^[A-Z]+$/.test(str);
  125. case 'HTML': //HTML标记
  126. return /<("[^"]*"|'[^']*'|[^'">])*>/.test(str);
  127. default:
  128. return true;
  129. }
  130. }