helper.js 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  1. import mRouter from '@/utils/router';
  2. import mConstDataConfig from '@/config/constData.config';
  3. import mStore from '@/store';
  4. //常用方法集合
  5. export default {
  6. /**
  7. * toast提示
  8. */
  9. toast(title, duration = 3000, mask = false, icon = 'none') {
  10. if (Boolean(title) === false) {
  11. return;
  12. }
  13. uni.showToast({
  14. title,
  15. duration,
  16. mask,
  17. icon
  18. });
  19. },
  20. /**
  21. * 返回登录页面
  22. */
  23. async backToLogin() {
  24. // 存当前页面的地址
  25. const currentPage = getCurrentPages()[getCurrentPages().length - 1];
  26. const params = {};
  27. // #ifdef H5
  28. params.route = `/${currentPage.$vm.route}`;
  29. params.query = currentPage.$vm.$mp && currentPage.$vm.$mp.query;
  30. // #endif
  31. // #ifdef MP
  32. params.route = `/${currentPage.$vm.__route__}`;
  33. params.query = currentPage.$vm.$mp && currentPage.$vm.$mp.query;
  34. // #endif
  35. // #ifdef APP-PLUS
  36. params.route = `/${currentPage.route}`;
  37. params.query = currentPage.options;
  38. // #endif
  39. await uni.setStorageSync('backToPage', JSON.stringify(params));
  40. await uni.removeTabBarBadge({ index: mConstDataConfig.cartIndex });
  41. await mStore.commit('logout');
  42. uni.showModal({
  43. content: '会话已过期,是否跳转登录页面?',
  44. success: (confirmRes) => {
  45. if (confirmRes.confirm) {
  46. mRouter.push({ route: '/pages/public/login' });
  47. }
  48. }
  49. });
  50. },
  51. /**
  52. * 返回上一页携带参数
  53. */
  54. prePage(index) {
  55. let pages = getCurrentPages();
  56. let prePage = pages[pages.length - (index || 2)];
  57. // #ifdef H5
  58. return prePage;
  59. // #endif
  60. return prePage.$vm;
  61. },
  62. /**
  63. * 开发环境全局打印日志
  64. * @param {Object} title
  65. */
  66. log(title) {
  67. if (process.env.NODE_ENV === 'development' && Boolean(title) === true) {
  68. console.log(JSON.stringify(title));
  69. }
  70. },
  71. /**
  72. * 异步获取设备信息
  73. */
  74. getInfoAsync() {
  75. return new Promise((resolve, reject) => {
  76. plus.device.getInfo({
  77. success(e) {
  78. resolve(e);
  79. },
  80. fail(e) {
  81. reject(e.message);
  82. }
  83. });
  84. });
  85. },
  86. /**
  87. * 安卓10不支持IMEI,则获取OAID
  88. */
  89. getOaidAsync() {
  90. return new Promise((resolve, reject) => {
  91. plus.device.getOAID({
  92. success(e) {
  93. resolve(e);
  94. },
  95. fail(e) {
  96. reject(e.message);
  97. }
  98. });
  99. });
  100. },
  101. /**
  102. * 获取一个随机数
  103. * @param {Object} min
  104. * @param {Object} max
  105. */
  106. random(min, max) {
  107. switch (arguments.length) {
  108. case 1:
  109. return parseInt(Math.random() * min + 1, 10);
  110. break;
  111. case 2:
  112. return parseInt(Math.random() * (max - min + 1) + min, 10);
  113. break;
  114. default:
  115. return 0;
  116. break;
  117. }
  118. },
  119. /**
  120. * 获取ios的IDFA
  121. */
  122. getIdfa() {
  123. let idfa = '';
  124. try {
  125. if ('iOS' == plus.os.name) {
  126. let manager = plus.ios.invoke('ASIdentifierManager', 'sharedManager');
  127. if (plus.ios.invoke(manager, 'isAdvertisingTrackingEnabled')) {
  128. let identifier = plus.ios.invoke(manager, 'advertisingIdentifier');
  129. idfa = plus.ios.invoke(identifier, 'UUIDString');
  130. plus.ios.deleteObject(identifier);
  131. }
  132. plus.ios.deleteObject(manager);
  133. }
  134. } catch (e) {
  135. console.error('获取idfa失败');
  136. }
  137. return idfa;
  138. },
  139. /*
  140. * obj 转 params字符串参数
  141. * 例子:{a:1,b:2} => a=1&b=2
  142. */
  143. objParseParam(obj) {
  144. let paramsStr = '';
  145. if (obj instanceof Array) return paramsStr;
  146. if (!(obj instanceof Object)) return paramsStr;
  147. for (let key in obj) {
  148. paramsStr += `${key}=${obj[key]}&`;
  149. }
  150. return paramsStr.substring(0, paramsStr.length - 1);
  151. },
  152. /*
  153. * obj 转 路由地址带参数
  154. * 例子:{a:1,b:2} => /pages/index/index?a=1&b=2
  155. */
  156. objParseUrlAndParam(path, obj) {
  157. let url = path || '/';
  158. let paramsStr = '';
  159. if (obj instanceof Array) return url;
  160. if (!(obj instanceof Object)) return url;
  161. paramsStr = this.objParseParam(obj);
  162. paramsStr && (url += '?');
  163. url += paramsStr;
  164. return url;
  165. },
  166. /*
  167. * 获取url字符串参数
  168. */
  169. getRequestParameters(locationhref) {
  170. let href = locationhref || '';
  171. let theRequest = new Object();
  172. let str = href.split('?')[1];
  173. if (str != undefined) {
  174. let strs = str.split('&');
  175. for (let i = 0; i < strs.length; i++) {
  176. theRequest[strs[i].split('=')[0]] = (strs[i].split('=')[1]);
  177. }
  178. }
  179. return theRequest;
  180. },
  181. /**
  182. * 加密字符串
  183. */
  184. strEncode(str) {
  185. const key = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  186. let l = key.length;
  187. let a = key.split('');
  188. let s = '', b, b1, b2, b3;
  189. for (let i = 0; i < str.length; i++) {
  190. b = str.charCodeAt(i);
  191. b1 = b % l;
  192. b = (b - b1) / l;
  193. b2 = b % l;
  194. b = (b - b2) / l;
  195. b3 = b % l;
  196. s += a[b3] + a[b2] + a[b1];
  197. }
  198. return s;
  199. },
  200. /**
  201. * 解密字符串
  202. */
  203. strDecode(str) {
  204. const key = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  205. let l = key.length;
  206. let b, b1, b2, b3, d = 0, s;
  207. s = new Array(Math.floor(str.length / 3));
  208. b = s.length;
  209. for (let i = 0; i < b; i++) {
  210. b1 = key.indexOf(str.charAt(d));
  211. d++;
  212. b2 = key.indexOf(str.charAt(d));
  213. d++;
  214. b3 = key.indexOf(str.charAt(d));
  215. d++;
  216. s[i] = b1 * l * l + b2 * l + b3;
  217. }
  218. b = eval('String.fromCharCode(' + s.join(',') + ')');
  219. return b;
  220. },
  221. /**
  222. * 比较版本号
  223. */
  224. compareVersion(reqV, curV) {
  225. if (curV && reqV) {
  226. let arr1 = curV.split('.'),
  227. arr2 = reqV.split('.');
  228. let minLength = Math.min(arr1.length, arr2.length),
  229. position = 0,
  230. diff = 0;
  231. while (position < minLength && ((diff = parseInt(arr1[position]) - parseInt(arr2[position])) == 0)) {
  232. position++;
  233. }
  234. diff = (diff != 0) ? diff : (arr1.length - arr2.length);
  235. if (diff > 0) {
  236. if (position == minLength - 1) {
  237. return 1;
  238. } else {
  239. return 2;
  240. }
  241. } else {
  242. return 0;
  243. }
  244. } else {
  245. console.log('版本号不能为空');
  246. return 0;
  247. }
  248. },
  249. /**
  250. * H5复制
  251. */
  252. h5Copy(content) {
  253. let textarea = document.createElement('textarea');
  254. textarea.value = content;
  255. textarea.readOnly = 'readOnly';
  256. document.body.appendChild(textarea);
  257. textarea.select(); // 选择对象
  258. textarea.setSelectionRange(0, content.length); //核心
  259. let result = document.execCommand('Copy'); // 执行浏览器复制命令
  260. textarea.remove();
  261. return result;
  262. }
  263. };