utils.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. import dayjs from "dayjs";
  2. import Api from "../model/api";
  3. /**
  4. * 节流函数
  5. * @param {Function} callback 需要被节流的函数
  6. * @param {Number} duration 距离上次执行超过多少毫秒才会执行被节流的函数
  7. * @returns
  8. */
  9. function throttle(callback, duration = 500) {
  10. // 最后执行函数时的时间戳
  11. let lastTime = 0
  12. return function () {
  13. // 获取当前时间戳
  14. const now = new Date().getTime()
  15. console.log(`上次时间:${lastTime} 这次时间${now} 时间差${now - lastTime}`)
  16. // 判断当前时间距离上一次执行函数的时间是否超过了duration设定的毫秒数
  17. if (now - lastTime >= duration) { // 超过了
  18. // 因为我们需要在 page 中做 this.setData(),所以需要借助 call()
  19. // 利用 call()方法,实现保留原函数的 this 指向,利用JavaScript的arguments对象实现动态接收参数
  20. callback.call(this, ...arguments);
  21. // callback(...arguments)
  22. // 更新最后执行函数时的时间戳
  23. lastTime = now;
  24. console.log("执行throttle")
  25. }
  26. // 没超过,啥也不干
  27. }
  28. }
  29. /**
  30. * 获取事件回调参数的自定义属性
  31. * @param {Object} event
  32. * @param {String} target
  33. */
  34. function getDataSet(event, target) {
  35. if (target) {
  36. return event.currentTarget.dataset[target]
  37. } else {
  38. return event.currentTarget.dataset
  39. }
  40. }
  41. /**
  42. * 获取自定义组件事件参数
  43. * @param {Object} event
  44. * @param {String} target
  45. * @returns {*}
  46. */
  47. function getEventParam(event, target) {
  48. if (target) {
  49. return event.detail[target]
  50. } else {
  51. return event.detail
  52. }
  53. }
  54. /**
  55. * 吐司
  56. * @param msg
  57. */
  58. function toast(msg) {
  59. wx.showToast({
  60. title: msg,
  61. icon: 'none'
  62. })
  63. }
  64. /**
  65. * 显示加载框
  66. * @param msg
  67. */
  68. function showLoading(msg) {
  69. if (msg == undefined) {
  70. msg = '加载中...'
  71. }
  72. wx.showLoading({
  73. title: msg,
  74. mask: true
  75. });
  76. }
  77. /**
  78. * 判断是否手机
  79. * @param phone
  80. * @returns {boolean}
  81. */
  82. function isMobile(phone) {
  83. if (!phone.trim()) {
  84. return false;
  85. }
  86. const reg = /^1[0-9]{10}$/;
  87. if (!reg.test(phone)) {
  88. return false
  89. }
  90. return true
  91. }
  92. /**
  93. * 随机生成uuid - 引入时间戳 (36位字符串)
  94. * @returns {string}
  95. */
  96. function getUuid() {
  97. let d = new Date().getTime();
  98. return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
  99. const r = (d + Math.random() * 16) % 16 | 0;
  100. d = Math.floor(d / 16);
  101. return (c == 'x' ? r : (r & 0x3 | 0x8)).toString(16);
  102. });
  103. }
  104. /**
  105. * 是否数字
  106. * @param value
  107. * @returns {boolean}
  108. */
  109. function isNumber(value) {
  110. return typeof value === 'number' && !isNaN(value);
  111. }
  112. /**
  113. * 格式化标准时间 YYYY-MM-DD HH:mm:ss
  114. * @param str
  115. * @returns {string}
  116. */
  117. function formatTime(str) {
  118. return dayjs(str).format("YYYY-MM-DD HH:mm:ss")
  119. }
  120. /**
  121. * 格式化日月年 YYYY-MM-DD YYYY年MM月DD日
  122. * @param str
  123. * @returns {string}
  124. */
  125. function formatYMD(str) {
  126. return dayjs(str).format("YYYY-MM-DD")
  127. }
  128. function formatYMD2(str) {
  129. return dayjs(str).format("YYYY年MM月DD日")
  130. }
  131. /**
  132. * 处理小程序richtext 显示图片自适应问题
  133. * @param content
  134. * @returns {*}
  135. */
  136. function handleRichTextImgAuto(content) {
  137. return content.replace(/\<img/gi, '<img style="max-width:100%;height:auto')
  138. }
  139. export {
  140. throttle,
  141. getDataSet,
  142. getEventParam,
  143. toast,
  144. showLoading,
  145. isMobile,
  146. getUuid,
  147. isNumber,
  148. formatTime,
  149. formatYMD,
  150. formatYMD2,
  151. handleRichTextImgAuto,
  152. }