util.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474
  1. /* eslint-disable */
  2. //常用方法集合
  3. export default {
  4. formatRichText(html) {
  5. //控制小程序中图片大小
  6. if (!html) {
  7. return false;
  8. }
  9. let newContent = html.replace(/<img[^>]*>/gi, function(match, capture) {
  10. match = match.replace(/style="[^"]+"/gi, '').replace(/style='[^']+'/gi, '');
  11. match = match.replace(/width="[^"]+"/gi, '').replace(/width='[^']+'/gi, '');
  12. match = match.replace(/height="[^"]+"/gi, '').replace(/height='[^']+'/gi, '');
  13. return match;
  14. });
  15. newContent = newContent.replace(/style="[^"]+"/gi, function(match, capture) {
  16. match = match.replace(/width:[^;]+;/gi, 'max-width:100%;').replace(/width:[^;]+;/gi, 'max-width:100%;');
  17. return match;
  18. });
  19. // newContent = newContent.replace(/<br[^>]*\/>/gi, '');
  20. newContent = newContent.replace(/\<img/gi,
  21. '<img style="max-width:100%;height:auto;display:block;margin-top:10rpx;font-size:0;"');
  22. return newContent;
  23. },
  24. /**
  25. * 时间处理
  26. */
  27. patTime(val){
  28. var beginTime=new Date()
  29. var time = val-beginTime
  30. var days=Math.floor(time/(24*3600*1000))
  31. var leave1=time%(24*3600*1000) //计算天数后剩余的毫秒数
  32. var hours=Math.floor(leave1/(3600*1000))
  33. //计算相差分钟数
  34. var leave2=leave1%(3600*1000) //计算小时数后剩余的毫秒数
  35. var minutes=Math.floor(leave2/(60*1000))
  36. //计算相差秒数
  37. var leave3=leave2%(60*1000) //计算分钟数后剩余的毫秒数
  38. var seconds=Math.round(leave3/1000)
  39. if(days >0){
  40. return days+'天'+hours+':'+minutes+':'+seconds
  41. }else{
  42. if(hours >0){
  43. return hours+':'+minutes+':'+seconds
  44. }else{
  45. if(minutes >0){
  46. return minutes+':'+seconds
  47. }else{
  48. if(seconds>0){
  49. return seconds+'秒'
  50. }else{
  51. return '00:00'
  52. }
  53. }
  54. }
  55. }
  56. },
  57. /**
  58. * 金额保留两位小数点后,大小
  59. */
  60. priceBigSmall(value){
  61. let val = (Math.floor((value || 0) * 100) / 100).toFixed(2);
  62. let splitPrice = val.split(".");
  63. let price = `<span style="font-size:11px;font-weight: normal;">¥</span>${splitPrice[0]}.<span style="font-size:11px;font-weight: normal;">${splitPrice[1]}</span>`;
  64. return price
  65. },
  66. /**
  67. * 金额保留两位小数点
  68. */
  69. priceDecimals(value){
  70. let val = (Math.floor((value || 0) * 100) / 100).toFixed(2);
  71. return val
  72. },
  73. /**
  74. * toast提示
  75. */
  76. toast(title, duration = 3000, mask = false, icon = 'none') {
  77. if (Boolean(title) === false) {
  78. return;
  79. }
  80. uni.showToast({
  81. title,
  82. duration,
  83. mask,
  84. icon
  85. });
  86. },
  87. getPrevPage(){
  88. var pages = getCurrentPages(); // 获取页面栈
  89. var prevPage = pages[pages.length - 2]; // 上一个页面
  90. return prevPage;
  91. },
  92. /**
  93. * 开发环境全局打印日志
  94. * @param {Object} title
  95. */
  96. log(title) {
  97. if (process.env.NODE_ENV === 'development' && Boolean(title) === true) {
  98. console.log(JSON.stringify(title));
  99. }
  100. },
  101. /**
  102. * 异步获取设备信息
  103. */
  104. getInfoAsync() {
  105. return new Promise((resolve, reject) => {
  106. plus.device.getInfo({
  107. success(e) {
  108. resolve(e);
  109. },
  110. fail(e) {
  111. reject(e.message);
  112. }
  113. });
  114. });
  115. },
  116. /**
  117. * 安卓10不支持IMEI,则获取OAID
  118. */
  119. getOaidAsync() {
  120. return new Promise((resolve, reject) => {
  121. plus.device.getOAID({
  122. success(e) {
  123. resolve(e);
  124. },
  125. fail(e) {
  126. reject(e.message);
  127. }
  128. });
  129. });
  130. },
  131. /**
  132. * 获取一个随机数
  133. * @param {Object} min
  134. * @param {Object} max
  135. */
  136. random(min, max) {
  137. switch (arguments.length) {
  138. case 1:
  139. return parseInt(Math.random() * min + 1, 10);
  140. break;
  141. case 2:
  142. return parseInt(Math.random() * (max - min + 1) + min, 10);
  143. break;
  144. default:
  145. return 0;
  146. break;
  147. }
  148. },
  149. /**
  150. * 获取ios的IDFA
  151. */
  152. getIdfa() {
  153. let idfa = '';
  154. try {
  155. if ('iOS' == plus.os.name) {
  156. let manager = plus.ios.invoke('ASIdentifierManager', 'sharedManager');
  157. if (plus.ios.invoke(manager, 'isAdvertisingTrackingEnabled')) {
  158. let identifier = plus.ios.invoke(manager, 'advertisingIdentifier');
  159. idfa = plus.ios.invoke(identifier, 'UUIDString');
  160. plus.ios.deleteObject(identifier);
  161. }
  162. plus.ios.deleteObject(manager);
  163. }
  164. } catch (e) {
  165. console.error('获取idfa失败');
  166. }
  167. return idfa;
  168. },
  169. /*
  170. * obj 转 params字符串参数
  171. * 例子:{a:1,b:2} => a=1&b=2
  172. */
  173. objParseParam(obj) {
  174. let paramsStr = '';
  175. if (obj instanceof Array) return paramsStr;
  176. if (!(obj instanceof Object)) return paramsStr;
  177. for (let key in obj) {
  178. paramsStr += `${key}=${obj[key]}&`;
  179. }
  180. return paramsStr.substring(0, paramsStr.length - 1);
  181. },
  182. /*
  183. * obj 转 路由地址带参数
  184. * 例子:{a:1,b:2} => /pages/research/homepage/index?a=1&b=2
  185. */
  186. objParseUrlAndParam(path, obj) {
  187. let url = path || '/';
  188. let paramsStr = '';
  189. if (obj instanceof Array) return url;
  190. if (!(obj instanceof Object)) return url;
  191. paramsStr = this.objParseParam(obj);
  192. paramsStr && (url += '?');
  193. url += paramsStr;
  194. return url;
  195. },
  196. /*
  197. * 获取url字符串参数
  198. */
  199. getRequestParameters(locationhref) {
  200. let href = locationhref || '';
  201. let theRequest = new Object();
  202. let str = href.split('?')[1];
  203. if (str != undefined) {
  204. let strs = str.split('&');
  205. for (let i = 0; i < strs.length; i++) {
  206. theRequest[strs[i].split('=')[0]] = strs[i].split('=')[1];
  207. }
  208. }
  209. return theRequest;
  210. },
  211. /**
  212. * 加密字符串
  213. */
  214. strEncode(str) {
  215. const key = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  216. let l = key.length;
  217. let a = key.split('');
  218. let s = '',
  219. b,
  220. b1,
  221. b2,
  222. b3;
  223. for (let i = 0; i < str.length; i++) {
  224. b = str.charCodeAt(i);
  225. b1 = b % l;
  226. b = (b - b1) / l;
  227. b2 = b % l;
  228. b = (b - b2) / l;
  229. b3 = b % l;
  230. s += a[b3] + a[b2] + a[b1];
  231. }
  232. return s;
  233. },
  234. /**
  235. * 解密字符串
  236. */
  237. strDecode(str) {
  238. const key = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  239. let l = key.length;
  240. let b,
  241. b1,
  242. b2,
  243. b3,
  244. d = 0,
  245. s;
  246. s = new Array(Math.floor(str.length / 3));
  247. b = s.length;
  248. for (let i = 0; i < b; i++) {
  249. b1 = key.indexOf(str.charAt(d));
  250. d++;
  251. b2 = key.indexOf(str.charAt(d));
  252. d++;
  253. b3 = key.indexOf(str.charAt(d));
  254. d++;
  255. s[i] = b1 * l * l + b2 * l + b3;
  256. }
  257. b = eval('String.fromCharCode(' + s.join(',') + ')');
  258. return b;
  259. },
  260. /**
  261. * 比较版本号
  262. */
  263. compareVersion(reqV, curV) {
  264. if (curV && reqV) {
  265. let arr1 = curV.split('.'),
  266. arr2 = reqV.split('.');
  267. let minLength = Math.min(arr1.length, arr2.length),
  268. position = 0,
  269. diff = 0;
  270. while (
  271. position < minLength &&
  272. (diff = parseInt(arr1[position]) - parseInt(arr2[position])) == 0
  273. ) {
  274. position++;
  275. }
  276. diff = diff != 0 ? diff : arr1.length - arr2.length;
  277. if (diff > 0) {
  278. if (position == minLength - 1) {
  279. return 1;
  280. } else {
  281. return 2;
  282. }
  283. } else {
  284. return 0;
  285. }
  286. } else {
  287. return 0;
  288. }
  289. },
  290. /**
  291. * H5复制
  292. */
  293. h5Copy(content) {
  294. let textarea = document.createElement('textarea');
  295. textarea.value = content;
  296. textarea.readOnly = 'readOnly';
  297. document.body.appendChild(textarea);
  298. textarea.select(); // 选择对象
  299. textarea.setSelectionRange(0, content.length); //核心
  300. let result = document.execCommand('Copy'); // 执行浏览器复制命令
  301. textarea.remove();
  302. const msg = result ? '复制成功' : '复制失败';
  303. this.toast(msg);
  304. },
  305. /**
  306. * app分享
  307. */
  308. handleAppShare(shareUrl, shareTitle, shareContent, shareImg) {
  309. let shareData = {
  310. shareUrl,
  311. shareTitle,
  312. shareContent,
  313. shareImg
  314. };
  315. appShare(shareData, res => {});
  316. },
  317. async handleWxH5Share(title, desc, link, imgUrl) {
  318. // #ifdef H5
  319. if ($mPayment.isWechat()) {
  320. if (uni.getSystemInfoSync().platform === 'android') {
  321. await $mPayment.wxConfigH5(link);
  322. }
  323. jweixin.ready(function () {
  324. // eslint-disable-next-line
  325. jweixin.updateAppMessageShareData({
  326. title, // 分享标题
  327. desc, // 分享描述
  328. link, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
  329. imgUrl, // 分享图标
  330. success: function () {
  331. // 用户确认分享后执行的回调函数
  332. },
  333. cancel: function () {
  334. // 用户取消分享后执行的回调函数
  335. }
  336. });
  337. // eslint-disable-next-line
  338. jweixin.updateTimelineShareData({
  339. title, // 分享标题
  340. desc, // 分享描述
  341. link, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
  342. imgUrl, // 分享图标
  343. success: function () {
  344. // 用户确认分享后执行的回调函数
  345. },
  346. cancel: function () {
  347. // 用户取消分享后执行的回调函数
  348. }
  349. });
  350. });
  351. }
  352. // #endif
  353. },
  354. //截取后四位数
  355. cutOut(value){
  356. if (!value) {
  357. return '';
  358. }
  359. return value.substring(value.length-4)
  360. },
  361. // 去掉字符串中的空格
  362. trim(str){
  363. if (!str) {
  364. return '';
  365. }
  366. return str.replace(/\s*/g,'');
  367. },
  368. // 判断两个对象是否相同
  369. isObjectValueEqual(x, y) {
  370. // 指向同一内存时
  371. if (x === y) {
  372. return true;
  373. } else if (
  374. typeof x == 'object' &&
  375. x != null &&
  376. typeof y == 'object' && y != null
  377. ) {
  378. if (Object.keys(x).length != Object.keys(y).length) return false;
  379. for (var prop in x) {
  380. if (y.hasOwnProperty(prop)) {
  381. if (!this.isObjectValueEqual(x[prop], y[prop])) return false;
  382. } else return false;
  383. }
  384. return true;
  385. } else return false;
  386. },
  387. platformGroupFilter () {
  388. let platformGroup = 'tinyShop';
  389. // #ifdef H5
  390. if ($mPayment.isWechat()) {
  391. platformGroup = 'tinyShopWechat';
  392. } else {
  393. platformGroup = 'tinyShopH5';
  394. }
  395. // #endif
  396. // #ifdef MP-QQ
  397. platformGroup = 'tinyShopQqMp';
  398. // #endif
  399. // #ifdef MP-WEIXIN
  400. platformGroup = 'tinyShopWechatMp';
  401. // #endif
  402. // #ifdef MP-ALIPAY
  403. platformGroup = 'tinyShopAliMp';
  404. // #endif
  405. // #ifdef MP-QQ
  406. platformGroup = 'tinyShopQqMp';
  407. // #endif
  408. // #ifdef MP-BAIDU
  409. platformGroup = 'tinyShopBaiduMp';
  410. // #endif
  411. // #ifdef APP-PLUS
  412. switch(uni.getSystemInfoSync().platform){
  413. case 'android':
  414. platformGroup = 'tinyShopAndroid';
  415. break;
  416. case 'ios':
  417. platformGroup = 'tinyShopIos';
  418. break;
  419. }
  420. // #endif
  421. return platformGroup;
  422. },
  423. countDown(ft){
  424. var time =ft*1000-Math.floor(new Date().getTime())
  425. var days=Math.floor(time/(24*3600*1000))
  426. var leave1=time%(24*3600*1000) //计算天数后剩余的毫秒数
  427. var hours=Math.floor(leave1/(3600*1000))
  428. //计算相差分钟数
  429. var leave2=leave1%(3600*1000) //计算小时数后剩余的毫秒数
  430. var minutes=Math.floor(leave2/(60*1000))
  431. //计算相差秒数
  432. var leave3=leave2%(60*1000) //计算分钟数后剩余的毫秒数
  433. var seconds=Math.round(leave3/1000)
  434. console.log( days+':'+hours+':'+minutes+':'+seconds)
  435. return days+':'+hours+':'+minutes+':'+seconds
  436. // if(days >0){
  437. // return days+'天'+hours+':'+minutes+':'+seconds
  438. // }else{
  439. // if(hours >0){
  440. // return hours+':'+minutes+':'+seconds
  441. // }else{
  442. // if(minutes >0){
  443. // return minutes+':'+seconds
  444. // }else{
  445. // if(seconds>0){
  446. // return seconds+'秒'
  447. // }else{
  448. // return '00:00'
  449. // }
  450. // }
  451. // }
  452. // }
  453. },
  454. };