util.js 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289
  1. const api = require('../request/api');
  2. const http = require('../request/http.js');
  3. const storeKeys = require('./storageKeys');
  4. /**
  5. * 工具类
  6. */
  7. module.exports = {
  8. // 提示
  9. toast(text, time = 1500) {
  10. wx.showToast({
  11. title: text,
  12. icon: 'none',
  13. duration: time
  14. })
  15. },
  16. //重置缓存
  17. setStorageSync(key, value) {
  18. wx.setStorageSync(key, value)
  19. },
  20. //获取缓存
  21. getStorageSync(key) {
  22. try {
  23. let value = wx.getStorageSync(key) || "";
  24. return value;
  25. } catch (e) {
  26. return "";
  27. }
  28. },
  29. //删除缓存
  30. removeStorageSync(key) {
  31. wx.removeStorageSync(key);
  32. },
  33. // 防抖
  34. throttle: function (fn, gapTime) {
  35. if (gapTime == null || gapTime == undefined) {
  36. gapTime = 1000;
  37. }
  38. let _lastTime = null;
  39. return function () {
  40. let _nowTime = +new Date()
  41. if (_nowTime - _lastTime > gapTime || !_lastTime) {
  42. fn.apply(this, arguments);
  43. _lastTime = _nowTime;
  44. }
  45. }
  46. },
  47. //scene解码
  48. scene_decode(e) {
  49. if (e === undefined)
  50. return {};
  51. let scene = decodeURIComponent(e),
  52. params = scene.split(','),
  53. data = {};
  54. for (let i in params) {
  55. let val = params[i].split(':');
  56. val.length > 0 && val[0] && (data[val[0]] = val[1] || null)
  57. }
  58. return data;
  59. },
  60. //格式化日期格式 (用于兼容ios Date对象)
  61. format_date(time) {
  62. // 将xxxx-xx-xx的时间格式,转换为 xxxx/xx/xx的格式
  63. return time.replace(/\-/g, "/");
  64. },
  65. //对象转URL
  66. urlEncode(data) {
  67. var _result = [];
  68. for (var key in data) {
  69. var value = data[key];
  70. if (value.constructor == Array) {
  71. value.forEach(_value => {
  72. _result.push(key + "=" + _value);
  73. });
  74. } else {
  75. _result.push(key + '=' + value);
  76. }
  77. }
  78. return _result.join('&');
  79. },
  80. //遍历对象
  81. objForEach(obj, callback) {
  82. Object.keys(obj).forEach((key) => {
  83. callback(obj[key], key);
  84. });
  85. },
  86. //是否在数组内
  87. inArray(search, array) {
  88. for (var i in array) {
  89. if (array[i] == search) {
  90. return true;
  91. }
  92. }
  93. return false;
  94. },
  95. // canvas,文字,x,y,最大宽,行高,行数,字体样式
  96. canvasWraptitleText(canvas, text, x, y, maxWidth, lineHeight, maxRowNum, font) {
  97. if (typeof text != 'string' || typeof x != 'number' || typeof y != 'number') {
  98. return;
  99. }
  100. canvas.font = font;
  101. let arrText = text.split('');
  102. let line = '';
  103. let rowNum = 1
  104. for (let n = 0; n < arrText.length; n++) {
  105. let testLine = line + arrText[n];
  106. let metrics = canvas.measureText(testLine);
  107. let testWidth = metrics.width;
  108. if (testWidth > maxWidth && n > 0) {
  109. if (rowNum >= maxRowNum) {
  110. let arrLine = testLine.split('')
  111. arrLine.splice(-2)
  112. let newTestLine = arrLine.join("")
  113. newTestLine += "..."
  114. canvas.fillText(newTestLine, x, y);
  115. return
  116. }
  117. canvas.fillText(line, x, y);
  118. line = arrText[n];
  119. y += lineHeight;
  120. rowNum += 1
  121. } else {
  122. line = testLine;
  123. }
  124. }
  125. canvas.fillText(line, x, y);
  126. },
  127. //设定宽 设定高 图片本身宽 图片本身高
  128. getSXYWH(cW, cH, iW, iH) {
  129. let width = cW; //设定宽
  130. let height = cH; //设定高
  131. let w = iW; //图片本身宽
  132. let h = iH; //图片本身高
  133. let dw = width / w; //宽比例
  134. let dh = height / h; //高比例
  135. let sX; //裁剪偏移X
  136. let sY; //裁剪偏移Y
  137. let sW; //裁剪宽
  138. let sH; //裁剪高
  139. // 裁剪图片中间部分
  140. if (w > width && h > height || w < width && h < height) {
  141. if (dw > dh) {
  142. sX = 0;
  143. sY = (h - height / dw) / 2;
  144. sW = w
  145. sH = height / dw
  146. } else {
  147. sX = (w - width / dh) / 2;
  148. sY = 0;
  149. sW = width / dh
  150. sH = h
  151. }
  152. } else { // 拉伸图片
  153. if (w < width) {
  154. sX = 0
  155. sY = (h - height / dw) / 2;
  156. sW = w
  157. sH = height / dw
  158. } else {
  159. sX = (w - width / dh) / 2;
  160. sY = 0;
  161. sW = width / dh
  162. sH = h
  163. }
  164. }
  165. let returnData = {
  166. sX,
  167. sY,
  168. sW,
  169. sH
  170. };
  171. return returnData
  172. },
  173. //事件防抖
  174. throttle: function(fn, gapTime) {
  175. if (gapTime == null || gapTime == undefined) {gapTime = 1000;}
  176. let _lastTime = null;
  177. return function () {
  178. let _nowTime = + new Date()
  179. if (_nowTime - _lastTime > gapTime || !_lastTime) {
  180. fn.apply(this, arguments);
  181. _lastTime = _nowTime;
  182. }
  183. }
  184. },
  185. //禁止金额输入多个小数点
  186. money(param) {
  187. let num = param.toString(); //先转换成字符串类型
  188. if (num.indexOf('.') == 0) { //第一位就是 .
  189. num = '0' + num
  190. }
  191. num = num.replace(/[^\d.]/g, ""); //清除“数字”和“.”以外的字符
  192. num = num.replace(/\.{2,}/g, "."); //只保留第一个. 清除多余的
  193. num = num.replace(".", "$#$").replace(/\./g, "").replace("$#$", ".");
  194. num = num.replace(/^(\-)*(\d+)\.(\d\d).*$/, '$1$2.$3'); //只能输入两个小数
  195. if (num.indexOf(".") < 0 && num != "") {
  196. num = parseFloat(num);
  197. }
  198. return num
  199. },
  200. //获取当前时间
  201. formatTime(date,type){
  202. const year = date.getFullYear()
  203. const month = date.getMonth() + 1
  204. const day = date.getDate()
  205. const hour = date.getHours()
  206. const minute = date.getMinutes()
  207. const second = date.getSeconds()
  208. // 1: 2021-10-10 10:10:10
  209. let joinType = "/";
  210. if(type == 1){
  211. joinType = "-"
  212. }
  213. return [year, month, day].map(this.formatNumber).join(joinType) + ' ' + [hour, minute, second].map(this.formatNumber).join(':')
  214. },
  215. // 时间格式化输出 day--天 hours--时 minutes--分 seconds--秒
  216. dateForma(micro_second,type) {
  217. let second = Math.floor(micro_second / 1000);
  218. let value;
  219. switch(type) {
  220. case "day":
  221. value = Math.floor(second / 3600 / 24);
  222. break;
  223. case "hours":
  224. value = this.formatNumber(Math.floor(second / 3600 % 24));
  225. break;
  226. case "minutes":
  227. value = this.formatNumber(Math.floor(second / 60 % 60));
  228. break;
  229. case "seconds":
  230. value = this.formatNumber(Math.floor(second % 60));
  231. break;
  232. }
  233. return value;
  234. },
  235. newDateForma(micro_second,type) {
  236. let second = micro_second;
  237. let value;
  238. switch(type) {
  239. case "day":
  240. value = Math.floor(second / 3600 / 24);
  241. break;
  242. case "hours":
  243. value = this.formatNumber(Math.floor(second / 3600 % 24));
  244. break;
  245. case "minutes":
  246. value = this.formatNumber(Math.floor(second / 60 % 60));
  247. break;
  248. case "seconds":
  249. value = this.formatNumber(Math.floor(second % 60));
  250. break;
  251. }
  252. return value;
  253. },
  254. formatNumber(n){
  255. n = n.toString()
  256. return n[1] ? n : '0' + n
  257. },
  258. toDecimal2(x) {
  259. var f = parseFloat(x);
  260. if (isNaN(f)) {
  261. return "";
  262. }
  263. var f = Math.round(x*100)/100;
  264. var s = f.toString();
  265. var rs = s.indexOf('.');
  266. if (rs < 0) {
  267. rs = s.length;
  268. s += '.';
  269. }
  270. while (s.length <= rs + 2) {
  271. s += '0';
  272. }
  273. return s;
  274. }
  275. };