util.js 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. const util = {
  2. getStorageSync: (key) => {/*由于wx.getStorageSync有一定概率取不到值,若取不到再取一次*/
  3. let value = wx.getStorageSync(key);
  4. if (!value) {
  5. value = wx.getStorageSync(key);
  6. }
  7. return value;
  8. },
  9. promisify: (api) => {/*wx api使用转成Promise形式*/
  10. return (options, ...params) => {
  11. return new Promise((resolve, reject) => {
  12. const extras = {
  13. success: resolve,
  14. fail: reject
  15. }
  16. api({ ...options, ...extras }, ...params)
  17. })
  18. }
  19. },
  20. filterEmoji: (s) => {/*过滤表情*/
  21. if (s) {
  22. return s.replace(/\uD83C[\uDF00-\uDFFF]|\uD83D[\uDC00-\uDE4F]/g, '');
  23. }
  24. return '';
  25. },
  26. validator: { /*校验字段合法性rule*/
  27. checkMobile: (s) => { /*校验手机号格式是否正确*/
  28. if (s) {
  29. s = s.toString().trim();
  30. var rule = /^\d{3,20}$/;
  31. return rule.test(s);
  32. }
  33. return false;
  34. },
  35. checkEmail: (s) => { /*校验邮箱格式是否正确*/
  36. if (s) {
  37. s = s.toString().trim();
  38. var rule = /^([0-9A-Za-z\-_\.]+)@([0-9a-z]+\.[a-z]{2,3}(\.[a-z]{2})?)$/g;
  39. return rule.test(s);
  40. }
  41. return false;
  42. },
  43. checkPwd: (s) => { /*校验登录密码格式是否正确*/
  44. if (s) {
  45. s = s.toString().trim();
  46. var rule = /^(?=.*[a-zA-Z]+)(?=.*[0-9]+)[a-zA-Z0-9]{8,16}$/;
  47. return rule.test(s);
  48. }
  49. return false;
  50. },
  51. checkCode: (s) => { /*校验短信或邮箱验证码格式是否正确*/
  52. if (s) {
  53. s = s.toString().trim();
  54. var rule = /^\d{6}$/;
  55. return rule.test(s);
  56. }
  57. return false;
  58. },
  59. checkImgCode: (s) => { /*校验图片验证码格式是否正确*/
  60. if (s) {
  61. s = s.toString().trim();
  62. var rule = /^[a-zA-Z]{4}$/;
  63. return rule.test(s);
  64. }
  65. return false;
  66. },
  67. checkNickname: (s) => { /*校验昵称格式是否正确*/
  68. if (s) {
  69. s = s.toString().trim();
  70. var rule = /^[A-Za-z0-9\u4e00-\u9fa5]{2,20}$/;
  71. return rule.test(s);
  72. }
  73. return false;
  74. },
  75. },
  76. deepClone: (obj) => {/*深度克隆对象*/
  77. if (null === obj || 'object' !== typeof obj) {
  78. return obj;
  79. }
  80. let clone;
  81. if (obj instanceof Date) {
  82. clone = new Date();
  83. clone.setTime(obj.getTime());
  84. return clone;
  85. }
  86. if (obj instanceof Array) {
  87. clone = [];
  88. let i, n = obj.length;
  89. for (i = 0; i < n; i++) {
  90. clone[i] = util.deepClone(obj[i]);
  91. }
  92. return clone;
  93. }
  94. if (obj instanceof Object) {
  95. clone = {};
  96. for (let key in obj) {
  97. if (obj.hasOwnProperty(key)) {
  98. clone[key] = util.deepClone(obj[key]);
  99. }
  100. }
  101. return clone;
  102. }
  103. throw new Error(`Unable to clone obj! Its type isn't supported.`);
  104. },
  105. arrayRemove: (val, arr) => {/*删除数组内某个元素*/
  106. if (!arr || !Array.isArray(arr)) {
  107. return;
  108. }
  109. arr.forEach((v, i, a) => {
  110. if (val === v) {
  111. a.splice(i, 1);
  112. }
  113. });
  114. },
  115. cstr: (s) => {/*处理null、undefined或NaN字符串*/
  116. if (s) {
  117. return s.toString();
  118. } else {
  119. return '';
  120. }
  121. },
  122. formatTimeCount: (t) => {/*格式化时间戳差*/
  123. if (t > 0) {
  124. let h = Math.floor(t / 60 / 60 % 24);
  125. if (h < 10) {
  126. h = `0${h}`;
  127. }
  128. let m = Math.floor(t / 60 % 60);
  129. if (m < 10) {
  130. m = `0${m}`;
  131. }
  132. let s = Math.floor(t % 60);
  133. if (s < 10) {
  134. s = `0${s}`;
  135. }
  136. return `${h}:${m}:${s}`;
  137. }
  138. return '';
  139. },
  140. formatTimeStr: (t) => {
  141. if (t) {
  142. t = parseInt(t);
  143. let time = new Date(t);
  144. let year = time.getFullYear();
  145. let month = time.getMonth() + 1;
  146. if (month < 10) {
  147. month = `0${month}`;
  148. }
  149. let date = time.getDate();
  150. if (date < 10) {
  151. date = `0${date}`;
  152. }
  153. let hour = time.getHours();
  154. if (hour < 10) {
  155. hour = `0${hour}`;
  156. }
  157. let minute = time.getMinutes();
  158. if (minute < 10) {
  159. minute = `0${minute}`;
  160. }
  161. let second = time.getSeconds();
  162. if (second < 10) {
  163. second = `0${second}`;
  164. }
  165. return `${year}-${month}-${date}`;
  166. }
  167. return '';
  168. },
  169. money: (m, c, w) => { /*m:金额;c:保留小数位数,只能取值0,1,2;w:1返回整个金额,2返回整数部分,3返回小数部分*/
  170. if (c !== 0 && c !== 1 && c !== 2) {
  171. console.log('传入保留小数位数参数错误');
  172. return '';
  173. }
  174. if (w !== 1 && w !== 2 && w !== 3) {
  175. console.log('传入返回类型参数错误');
  176. return '';
  177. }
  178. if (0 === m) { /*由于0=false,需特殊处理*/
  179. return deal('0', '');
  180. } else {
  181. if (!m || isNaN(m)) {
  182. return '';
  183. }
  184. m = m.toString();
  185. if (-1 === m.indexOf('.')) {
  186. return deal(m, '');
  187. } else {
  188. var s_arr = m.split('.');
  189. return deal(s_arr[0], s_arr[1]);
  190. }
  191. }
  192. function deal(p, f) { /*p为整数部分*/
  193. if (0 === c) {
  194. if (1 === w) {
  195. return p;
  196. } else if (2 === w) {
  197. return p;
  198. } else if (3 === w) {
  199. return '';
  200. }
  201. } else if (1 === c) {
  202. if (0 === f.length) {
  203. f = '0';
  204. } else if (f.length >= 2) {
  205. f = f.substring(0, 1);
  206. }
  207. if (1 === w) {
  208. return p + '.' + f;
  209. } else if (2 === w) {
  210. return p;
  211. } else if (3 === w) {
  212. return f;
  213. }
  214. } else if (2 === c) {
  215. if (0 === f.length) {
  216. f = '00';
  217. } else if (1 === f.length) {
  218. f = f + '0';
  219. } else if (f.length >= 3) {
  220. f = f.substring(0, 2);
  221. }
  222. if (1 === w) {
  223. return p + '.' + f;
  224. } else if (2 === w) {
  225. return p;
  226. } else if (3 === w) {
  227. return f;
  228. }
  229. }
  230. }
  231. },
  232. /**
  233. * 函数防抖(只执行最后一次点击)
  234. */
  235. debounce: (fn, delay) => {
  236. let timer = null;
  237. delay = delay || 300;
  238. return (...args) => {
  239. clearTimeout(timer);
  240. timer = setTimeout(() => {
  241. fn.apply(this, args);
  242. }, delay);
  243. };
  244. },
  245. /**
  246. * 函数节流
  247. */
  248. throttle: (fn, delay) => {
  249. let last = Date.now();
  250. delay = delay || 300;
  251. return (...args) => {
  252. let now = Date.now();
  253. if (now - last >= delay) {
  254. last = now;
  255. fn.apply(this, args);
  256. }
  257. };
  258. }
  259. };
  260. module.exports = util;