utils.js 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605
  1. // 比较微信版本v1:用户当前版本;v2:当前程序所需要求兼容的版本
  2. function compareVersion(v1, v2) {
  3. v1 = v1.split('.')
  4. v2 = v2.split('.')
  5. const len = Math.max(v1.length, v2.length)
  6. while (v1.length < len) {
  7. v1.push('0')
  8. }
  9. while (v2.length < len) {
  10. v2.push('0')
  11. }
  12. for (let i = 0; i < len; i++) {
  13. const num1 = parseInt(v1[i])
  14. const num2 = parseInt(v2[i])
  15. if (num1 > num2) {
  16. return 1
  17. } else if (num1 < num2) {
  18. return -1
  19. }
  20. }
  21. return 0
  22. }
  23. /* 系统当前日期+时间 */
  24. function formatTime(date) {
  25. var year = date.getFullYear()
  26. var month = date.getMonth() + 1
  27. var day = date.getDate()
  28. var hour = date.getHours()
  29. var minute = date.getMinutes()
  30. var second = date.getSeconds()
  31. return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':')
  32. }
  33. function formatTime2(date) {
  34. var year = date.getFullYear()
  35. var month = date.getMonth() + 1
  36. var day = date.getDate()
  37. return [year, month, day].map(formatNumber).join('-')
  38. }
  39. function formatTime3(number, format) {
  40. var formateArr = ['Y', 'M', 'D', 'h', 'm', 's'];
  41. var returnArr = [];
  42. var date = new Date(number * 1000);
  43. returnArr.push(date.getFullYear());
  44. returnArr.push(formatNumber(date.getMonth() + 1));
  45. returnArr.push(formatNumber(date.getDate()));
  46. returnArr.push(formatNumber(date.getHours()));
  47. returnArr.push(formatNumber(date.getMinutes()));
  48. returnArr.push(formatNumber(date.getSeconds()));
  49. for (var i in returnArr) {
  50. format = format.replace(formateArr[i], returnArr[i]);
  51. }
  52. return format;
  53. }
  54. function formatNumber(n) {
  55. n = n.toString()
  56. return n[1] ? n : '0' + n
  57. }
  58. /* 日期转时间戳 */
  59. function timeToUnix(stringTime) {
  60. if (stringTime) {
  61. var timestamp = Date.parse(new Date(stringTime));
  62. } else {
  63. var timestamp = Date.parse(new Date());
  64. }
  65. timestamp = timestamp / 1000;
  66. return timestamp;
  67. }
  68. /* 倒计时:时+分+秒 */
  69. function changeTimeStamp(timeStamp, hasTimeRemaining) {
  70. var distancetime;
  71. if(hasTimeRemaining){
  72. distancetime = timeStamp;
  73. }else{
  74. var curTimeStamp = timeToUnix();
  75. distancetime = parseInt(timeStamp) - curTimeStamp;
  76. }
  77. if (distancetime > 0) {
  78. //如果大于0.说明尚未到达截止时间
  79. var day = Math.floor(distancetime / (60 * 60 * 24));
  80. var hour = Math.floor(distancetime / (60 * 60)) - (day * 24);
  81. var minute = Math.floor(distancetime / 60) - (day * 24 * 60) - (hour * 60);
  82. var second = Math.floor(distancetime) - (day * 24 * 60 * 60) - (hour * 60 * 60) - (minute * 60);
  83. hour = parseInt(hour) + parseInt(day) * 24;
  84. if (hour < 10) {
  85. hour = "0" + hour;
  86. }
  87. if (minute < 10) {
  88. minute = "0" + minute;
  89. }
  90. if (second < 10) {
  91. second = "0" + second;
  92. }
  93. return [hour, minute, second];
  94. } else {
  95. return false
  96. }
  97. }
  98. // md5
  99. function md5(string) {
  100. var x = Array();
  101. var k, AA, BB, CC, DD, a, b, c, d;
  102. var S11 = 7,
  103. S12 = 12,
  104. S13 = 17,
  105. S14 = 22;
  106. var S21 = 5,
  107. S22 = 9,
  108. S23 = 14,
  109. S24 = 20;
  110. var S31 = 4,
  111. S32 = 11,
  112. S33 = 16,
  113. S34 = 23;
  114. var S41 = 6,
  115. S42 = 10,
  116. S43 = 15,
  117. S44 = 21;
  118. string = Utf8Encode(string);
  119. x = ConvertToWordArray(string);
  120. a = 0x67452301;
  121. b = 0xEFCDAB89;
  122. c = 0x98BADCFE;
  123. d = 0x10325476;
  124. for (k = 0; k < x.length; k += 16) {
  125. AA = a;
  126. BB = b;
  127. CC = c;
  128. DD = d;
  129. a = FF(a, b, c, d, x[k + 0], S11, 0xD76AA478);
  130. d = FF(d, a, b, c, x[k + 1], S12, 0xE8C7B756);
  131. c = FF(c, d, a, b, x[k + 2], S13, 0x242070DB);
  132. b = FF(b, c, d, a, x[k + 3], S14, 0xC1BDCEEE);
  133. a = FF(a, b, c, d, x[k + 4], S11, 0xF57C0FAF);
  134. d = FF(d, a, b, c, x[k + 5], S12, 0x4787C62A);
  135. c = FF(c, d, a, b, x[k + 6], S13, 0xA8304613);
  136. b = FF(b, c, d, a, x[k + 7], S14, 0xFD469501);
  137. a = FF(a, b, c, d, x[k + 8], S11, 0x698098D8);
  138. d = FF(d, a, b, c, x[k + 9], S12, 0x8B44F7AF);
  139. c = FF(c, d, a, b, x[k + 10], S13, 0xFFFF5BB1);
  140. b = FF(b, c, d, a, x[k + 11], S14, 0x895CD7BE);
  141. a = FF(a, b, c, d, x[k + 12], S11, 0x6B901122);
  142. d = FF(d, a, b, c, x[k + 13], S12, 0xFD987193);
  143. c = FF(c, d, a, b, x[k + 14], S13, 0xA679438E);
  144. b = FF(b, c, d, a, x[k + 15], S14, 0x49B40821);
  145. a = GG(a, b, c, d, x[k + 1], S21, 0xF61E2562);
  146. d = GG(d, a, b, c, x[k + 6], S22, 0xC040B340);
  147. c = GG(c, d, a, b, x[k + 11], S23, 0x265E5A51);
  148. b = GG(b, c, d, a, x[k + 0], S24, 0xE9B6C7AA);
  149. a = GG(a, b, c, d, x[k + 5], S21, 0xD62F105D);
  150. d = GG(d, a, b, c, x[k + 10], S22, 0x2441453);
  151. c = GG(c, d, a, b, x[k + 15], S23, 0xD8A1E681);
  152. b = GG(b, c, d, a, x[k + 4], S24, 0xE7D3FBC8);
  153. a = GG(a, b, c, d, x[k + 9], S21, 0x21E1CDE6);
  154. d = GG(d, a, b, c, x[k + 14], S22, 0xC33707D6);
  155. c = GG(c, d, a, b, x[k + 3], S23, 0xF4D50D87);
  156. b = GG(b, c, d, a, x[k + 8], S24, 0x455A14ED);
  157. a = GG(a, b, c, d, x[k + 13], S21, 0xA9E3E905);
  158. d = GG(d, a, b, c, x[k + 2], S22, 0xFCEFA3F8);
  159. c = GG(c, d, a, b, x[k + 7], S23, 0x676F02D9);
  160. b = GG(b, c, d, a, x[k + 12], S24, 0x8D2A4C8A);
  161. a = HH(a, b, c, d, x[k + 5], S31, 0xFFFA3942);
  162. d = HH(d, a, b, c, x[k + 8], S32, 0x8771F681);
  163. c = HH(c, d, a, b, x[k + 11], S33, 0x6D9D6122);
  164. b = HH(b, c, d, a, x[k + 14], S34, 0xFDE5380C);
  165. a = HH(a, b, c, d, x[k + 1], S31, 0xA4BEEA44);
  166. d = HH(d, a, b, c, x[k + 4], S32, 0x4BDECFA9);
  167. c = HH(c, d, a, b, x[k + 7], S33, 0xF6BB4B60);
  168. b = HH(b, c, d, a, x[k + 10], S34, 0xBEBFBC70);
  169. a = HH(a, b, c, d, x[k + 13], S31, 0x289B7EC6);
  170. d = HH(d, a, b, c, x[k + 0], S32, 0xEAA127FA);
  171. c = HH(c, d, a, b, x[k + 3], S33, 0xD4EF3085);
  172. b = HH(b, c, d, a, x[k + 6], S34, 0x4881D05);
  173. a = HH(a, b, c, d, x[k + 9], S31, 0xD9D4D039);
  174. d = HH(d, a, b, c, x[k + 12], S32, 0xE6DB99E5);
  175. c = HH(c, d, a, b, x[k + 15], S33, 0x1FA27CF8);
  176. b = HH(b, c, d, a, x[k + 2], S34, 0xC4AC5665);
  177. a = II(a, b, c, d, x[k + 0], S41, 0xF4292244);
  178. d = II(d, a, b, c, x[k + 7], S42, 0x432AFF97);
  179. c = II(c, d, a, b, x[k + 14], S43, 0xAB9423A7);
  180. b = II(b, c, d, a, x[k + 5], S44, 0xFC93A039);
  181. a = II(a, b, c, d, x[k + 12], S41, 0x655B59C3);
  182. d = II(d, a, b, c, x[k + 3], S42, 0x8F0CCC92);
  183. c = II(c, d, a, b, x[k + 10], S43, 0xFFEFF47D);
  184. b = II(b, c, d, a, x[k + 1], S44, 0x85845DD1);
  185. a = II(a, b, c, d, x[k + 8], S41, 0x6FA87E4F);
  186. d = II(d, a, b, c, x[k + 15], S42, 0xFE2CE6E0);
  187. c = II(c, d, a, b, x[k + 6], S43, 0xA3014314);
  188. b = II(b, c, d, a, x[k + 13], S44, 0x4E0811A1);
  189. a = II(a, b, c, d, x[k + 4], S41, 0xF7537E82);
  190. d = II(d, a, b, c, x[k + 11], S42, 0xBD3AF235);
  191. c = II(c, d, a, b, x[k + 2], S43, 0x2AD7D2BB);
  192. b = II(b, c, d, a, x[k + 9], S44, 0xEB86D391);
  193. a = AddUnsigned(a, AA);
  194. b = AddUnsigned(b, BB);
  195. c = AddUnsigned(c, CC);
  196. d = AddUnsigned(d, DD);
  197. }
  198. var temp = WordToHex(a) + WordToHex(b) + WordToHex(c) + WordToHex(d);
  199. return temp.toUpperCase();
  200. }
  201. function RotateLeft(lValue, iShiftBits) {
  202. return (lValue << iShiftBits) | (lValue >>> (32 - iShiftBits));
  203. }
  204. function AddUnsigned(lX, lY) {
  205. var lX4, lY4, lX8, lY8, lResult;
  206. lX8 = (lX & 0x80000000);
  207. lY8 = (lY & 0x80000000);
  208. lX4 = (lX & 0x40000000);
  209. lY4 = (lY & 0x40000000);
  210. lResult = (lX & 0x3FFFFFFF) + (lY & 0x3FFFFFFF);
  211. if (lX4 & lY4) {
  212. return (lResult ^ 0x80000000 ^ lX8 ^ lY8);
  213. }
  214. if (lX4 | lY4) {
  215. if (lResult & 0x40000000) {
  216. return (lResult ^ 0xC0000000 ^ lX8 ^ lY8);
  217. } else {
  218. return (lResult ^ 0x40000000 ^ lX8 ^ lY8);
  219. }
  220. } else {
  221. return (lResult ^ lX8 ^ lY8);
  222. }
  223. }
  224. function F(x, y, z) {
  225. return (x & y) | ((~x) & z);
  226. }
  227. function G(x, y, z) {
  228. return (x & z) | (y & (~z));
  229. }
  230. function H(x, y, z) {
  231. return (x ^ y ^ z);
  232. }
  233. function I(x, y, z) {
  234. return (y ^ (x | (~z)));
  235. }
  236. function FF(a, b, c, d, x, s, ac) {
  237. a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac));
  238. return AddUnsigned(RotateLeft(a, s), b);
  239. }
  240. function GG(a, b, c, d, x, s, ac) {
  241. a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac));
  242. return AddUnsigned(RotateLeft(a, s), b);
  243. }
  244. function HH(a, b, c, d, x, s, ac) {
  245. a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac));
  246. return AddUnsigned(RotateLeft(a, s), b);
  247. }
  248. function II(a, b, c, d, x, s, ac) {
  249. a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac));
  250. return AddUnsigned(RotateLeft(a, s), b);
  251. }
  252. function ConvertToWordArray(string) {
  253. var lWordCount;
  254. var lMessageLength = string.length;
  255. var lNumberOfWords_temp1 = lMessageLength + 8;
  256. var lNumberOfWords_temp2 = (lNumberOfWords_temp1 - (lNumberOfWords_temp1 % 64)) / 64;
  257. var lNumberOfWords = (lNumberOfWords_temp2 + 1) * 16;
  258. var lWordArray = Array(lNumberOfWords - 1);
  259. var lBytePosition = 0;
  260. var lByteCount = 0;
  261. while (lByteCount < lMessageLength) {
  262. lWordCount = (lByteCount - (lByteCount % 4)) / 4;
  263. lBytePosition = (lByteCount % 4) * 8;
  264. lWordArray[lWordCount] = (lWordArray[lWordCount] | (string.charCodeAt(lByteCount) << lBytePosition));
  265. lByteCount++;
  266. }
  267. lWordCount = (lByteCount - (lByteCount % 4)) / 4;
  268. lBytePosition = (lByteCount % 4) * 8;
  269. lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80 << lBytePosition);
  270. lWordArray[lNumberOfWords - 2] = lMessageLength << 3;
  271. lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29;
  272. return lWordArray;
  273. }
  274. function WordToHex(lValue) {
  275. var WordToHexValue = "",
  276. WordToHexValue_temp = "",
  277. lByte, lCount;
  278. for (lCount = 0; lCount <= 3; lCount++) {
  279. lByte = (lValue >>> (lCount * 8)) & 255;
  280. WordToHexValue_temp = "0" + lByte.toString(16);
  281. WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length - 2, 2);
  282. }
  283. return WordToHexValue;
  284. }
  285. function Utf8Encode(string) {
  286. var utftext = "";
  287. for (var n = 0; n < string.length; n++) {
  288. var c = string.charCodeAt(n);
  289. if (c < 128) {
  290. utftext += String.fromCharCode(c);
  291. } else if ((c > 127) && (c < 2048)) {
  292. utftext += String.fromCharCode((c >> 6) | 192);
  293. utftext += String.fromCharCode((c & 63) | 128);
  294. } else {
  295. utftext += String.fromCharCode((c >> 12) | 224);
  296. utftext += String.fromCharCode(((c >> 6) & 63) | 128);
  297. utftext += String.fromCharCode((c & 63) | 128);
  298. }
  299. }
  300. return utftext;
  301. }
  302. // md5 end
  303. // base64_encode
  304. function base64_encode(str) { // 编码,配合encodeURIComponent使用
  305. var c1, c2, c3;
  306. var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
  307. var i = 0,
  308. len = str.length,
  309. strin = '';
  310. while (i < len) {
  311. c1 = str.charCodeAt(i++) & 0xff;
  312. if (i == len) {
  313. strin += base64EncodeChars.charAt(c1 >> 2);
  314. strin += base64EncodeChars.charAt((c1 & 0x3) << 4);
  315. strin += "==";
  316. break;
  317. }
  318. c2 = str.charCodeAt(i++);
  319. if (i == len) {
  320. strin += base64EncodeChars.charAt(c1 >> 2);
  321. strin += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4));
  322. strin += base64EncodeChars.charAt((c2 & 0xF) << 2);
  323. strin += "=";
  324. break;
  325. }
  326. c3 = str.charCodeAt(i++);
  327. strin += base64EncodeChars.charAt(c1 >> 2);
  328. strin += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4));
  329. strin += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >> 6));
  330. strin += base64EncodeChars.charAt(c3 & 0x3F)
  331. }
  332. return strin
  333. }
  334. function base64_decode(input) { // 解码,配合decodeURIComponent使用
  335. var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
  336. var output = "";
  337. var chr1, chr2, chr3;
  338. var enc1, enc2, enc3, enc4;
  339. var i = 0;
  340. input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
  341. while (i < input.length) {
  342. enc1 = base64EncodeChars.indexOf(input.charAt(i++));
  343. enc2 = base64EncodeChars.indexOf(input.charAt(i++));
  344. enc3 = base64EncodeChars.indexOf(input.charAt(i++));
  345. enc4 = base64EncodeChars.indexOf(input.charAt(i++));
  346. chr1 = (enc1 << 2) | (enc2 >> 4);
  347. chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
  348. chr3 = ((enc3 & 3) << 6) | enc4;
  349. output = output + String.fromCharCode(chr1);
  350. if (enc3 != 64) {
  351. output = output + String.fromCharCode(chr2);
  352. }
  353. if (enc4 != 64) {
  354. output = output + String.fromCharCode(chr3);
  355. }
  356. }
  357. return utf8_decode(output);
  358. }
  359. function utf8_decode(utftext) { // utf-8解码
  360. var string = '';
  361. let i = 0;
  362. let c = 0;
  363. let c1 = 0;
  364. let c2 = 0;
  365. while (i < utftext.length) {
  366. c = utftext.charCodeAt(i);
  367. if (c < 128) {
  368. string += String.fromCharCode(c);
  369. i++;
  370. } else if ((c > 191) && (c < 224)) {
  371. c1 = utftext.charCodeAt(i + 1);
  372. string += String.fromCharCode(((c & 31) << 6) | (c1 & 63));
  373. i += 2;
  374. } else {
  375. c1 = utftext.charCodeAt(i + 1);
  376. c2 = utftext.charCodeAt(i + 2);
  377. string += String.fromCharCode(((c & 15) << 12) | ((c1 & 63) << 6) | (c2 & 63));
  378. i += 3;
  379. }
  380. }
  381. return string;
  382. }
  383. // base64_encode end
  384. // emoji图片表情转表情字符串
  385. function emoji_utf16toEntities(str='') {
  386. var patt = /[\ud800-\udbff][\udc00-\udfff]/g; // 检测utf16字符正则
  387. str = str.replace(patt, function (char) {
  388. var H, L, code;
  389. if (char.length === 2) {
  390. H = char.charCodeAt(0); // 取出高位
  391. L = char.charCodeAt(1); // 取出低位
  392. code = (H - 0xD800) * 0x400 + 0x10000 + L - 0xDC00; // 转换算法
  393. return "&#" + code + ";";
  394. } else {
  395. return char;
  396. }
  397. });
  398. return str;
  399. }
  400. // 表情字符串转emoji图片表情
  401. function emoji_uncodeUtf16(str='') {
  402. var reg = /\&#.*?;/g;
  403. var result = str.replace(reg, function (char) {
  404. var H, L, code;
  405. if (char.length == 9) {
  406. code = parseInt(char.match(/[0-9]+/g));
  407. H = Math.floor((code - 0x10000) / 0x400) + 0xD800;
  408. L = (code - 0x10000) % 0x400 + 0xDC00;
  409. return unescape("%u" + H.toString(16) + "%u" + L.toString(16));
  410. } else {
  411. return char;
  412. }
  413. });
  414. return result;
  415. }
  416. // 时间戳转日期
  417. function formatDateTime(timeStamp, type = 'datetime', delimiter = '-') {
  418. var date = new Date();
  419. // date.setTime(timeStamp / 1000);
  420. date.setTime(timeStamp);
  421. var y = date.getFullYear();
  422. var m = date.getMonth() + 1;
  423. m = m < 10 ? ('0' + m) : m;
  424. var d = date.getDate();
  425. d = d < 10 ? ('0' + d) : d;
  426. var h = date.getHours();
  427. h = h < 10 ? ('0' + h) : h;
  428. var minute = date.getMinutes();
  429. var second = date.getSeconds();
  430. minute = minute < 10 ? ('0' + minute) : minute;
  431. second = second < 10 ? ('0' + second) : second;
  432. if (type == 'date') {
  433. return y + delimiter + m + delimiter + d;
  434. }
  435. if (type == 'datehm') {
  436. return y + delimiter + m + delimiter + d + ' ' + h + ':' + minute;
  437. }
  438. if (type == 'hz') {
  439. return y + "年" + m + "月" + d + '日 ' + h + '时' + minute + '分' + second + '秒';
  440. }
  441. if (type == 'hzhm') {
  442. return y + "年" + m + "月" + d + '日 ' + h + '时' + minute + '分';
  443. }
  444. return y + delimiter + m + delimiter + d + ' ' + h + ':' + minute + ':' + second;
  445. };
  446. /**
  447. * canvas绘图相关,把文字转化成只能行数,多余显示省略号
  448. * ctx: 当前的canvas
  449. * text: 文本
  450. * contentWidth: 文本最大宽度
  451. * lineNumber: 显示几行
  452. */
  453. function transformContentToMultiLineText(ctx, text='', contentWidth, lineNumber) {
  454. var textArray = text.split(""); // 分割成字符串数组
  455. var temp = "";
  456. var row = [];
  457. for (var i = 0; i < textArray.length; i++) {
  458. if (ctx.measureText(temp).width < contentWidth) {
  459. temp += textArray[i];
  460. } else {
  461. i--; // 这里添加i--是为了防止字符丢失
  462. row.push(temp);
  463. temp = "";
  464. }
  465. }
  466. row.push(temp);
  467. // 如果数组长度大于2,则截取前两个
  468. if (row.length > lineNumber) {
  469. var rowCut = row.slice(0, lineNumber);
  470. var rowPart = rowCut[lineNumber-1];
  471. var test = "";
  472. var empty = [];
  473. for (var a = 0; a < rowPart.length; a++) {
  474. if (ctx.measureText(test).width < contentWidth) {
  475. test += rowPart[a];
  476. } else {
  477. break;
  478. }
  479. }
  480. empty.push(test); // 处理后面加省略号
  481. var group = empty[0] + '...'
  482. rowCut.splice(lineNumber - 1, 1, group);
  483. row = rowCut;
  484. }
  485. return row;
  486. }
  487. /* 保留两位小数 */
  488. function getTwoFloat(num = 0) {
  489. return (Math.round(num * 100) / 100).toFixed(2);
  490. }
  491. //验证手机号码
  492. function checkPhoneNum(str){
  493. if (!str || str == '') {
  494. return false;
  495. }
  496. var phoneTest = /(^1[3|4|5|6|7|8|9][0-9]{9}$)/;
  497. return phoneTest.test(str);
  498. }
  499. class ToPayOpre {
  500. // 支付
  501. toPay(info = appEv.parameter("info"), callback) {
  502. var that = this;
  503. uni.requestPayment({
  504. ...info,
  505. success: function (res) {
  506. that.payReturn(false, callback);
  507. },
  508. fail: function (res) {
  509. that.payReturn(true, callback);
  510. }
  511. })
  512. }
  513. payReturn(isFail, callback) {
  514. uni.hideLoading();
  515. // 支付失败
  516. if (isFail) {
  517. appEv.errTips('支付失败', 3000);
  518. } else {
  519. // 支付成功
  520. uni.showToast({
  521. title: '支付成功',
  522. icon: 'success',
  523. duration: 1200,
  524. mask: true
  525. })
  526. }
  527. // 跳转订单列表
  528. setTimeout(function () {
  529. if (callback) {
  530. callback(isFail);
  531. } else {
  532. uni.redirectTo({
  533. url: '/pages/chengbei-order-list/index'
  534. })
  535. }
  536. }, 1200);
  537. }
  538. }
  539. module.exports = {
  540. compareVersion: compareVersion,
  541. formatTime: formatTime,
  542. formatTime2: formatTime2,
  543. formatTime3: formatTime3,
  544. unxiNum: timeToUnix,
  545. changeTimeStamp: changeTimeStamp,
  546. md5: md5,
  547. base64_encode,
  548. base64_decode,
  549. utf8_decode,
  550. emoji_utf16toEntities,
  551. emoji_uncodeUtf16,
  552. formatDateTime,
  553. transformContentToMultiLineText,
  554. getTwoFloat,
  555. ToPayOpre
  556. }