grace.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574
  1. import md5 from '@/Grace6/js/md5.js';
  2. export default {
  3. // 版本检查
  4. verson: function() {
  5. var currentVersion = '6.0';
  6. console.log(currentVersion);
  7. return currentVersion;
  8. },
  9. // --- 页面跳转相关 ---
  10. // 页面跳转
  11. navigate: function(url, type, success, fail, complete) {
  12. if (!type) {
  13. type = 'navigateTo';
  14. }
  15. if (!success) {
  16. success = function() {};
  17. }
  18. if (!fail) {
  19. fail = function() {};
  20. }
  21. if (!complete) {
  22. complete = function() {};
  23. }
  24. switch (type) {
  25. case 'navigateTo':
  26. uni.navigateTo({
  27. url: url,
  28. success: success,
  29. fail: fail,
  30. complete: complete
  31. });
  32. break;
  33. case 'redirectTo':
  34. uni.redirectTo({
  35. url: url,
  36. success: success,
  37. fail: fail,
  38. complete: complete
  39. });
  40. break;
  41. case 'switchTab':
  42. uni.switchTab({
  43. url: url,
  44. success: success,
  45. fail: fail,
  46. complete: complete
  47. });
  48. break;
  49. case 'reLaunch':
  50. uni.reLaunch({
  51. url: url,
  52. success: success,
  53. fail: fail,
  54. complete: complete
  55. });
  56. break;
  57. }
  58. },
  59. // 返回
  60. back: function(delta) {
  61. if (!delta) {
  62. delta = 1;
  63. }
  64. uni.navigateBack({
  65. delta: delta
  66. });
  67. },
  68. // --- 网络请求 ---
  69. // get
  70. get: function(url, data, headers, success, fail) {
  71. if (!fail) {
  72. fail = () => {
  73. this.msg("网络请求失败");
  74. }
  75. }
  76. if (!headers) {
  77. headers = {};
  78. }
  79. if (this.__before != null) {
  80. this.__before();
  81. this.__before = null;
  82. }
  83. uni.request({
  84. url: url,
  85. data: data,
  86. method: "GET",
  87. dataType: "json",
  88. header: headers,
  89. success: (res) => {
  90. success(res.data);
  91. },
  92. fail: fail,
  93. complete: () => {
  94. if (this.__after != null) {
  95. this.__after();
  96. this.__after = null;
  97. }
  98. }
  99. });
  100. },
  101. // post
  102. post: function(url, data, contentType, headers, success, fail) {
  103. if (!fail) {
  104. fail = () => {
  105. this.msg("网络请求失败");
  106. }
  107. }
  108. if (!headers) {
  109. headers = {};
  110. }
  111. if (!contentType) {
  112. contentType = 'form';
  113. }
  114. if (this.__before != null) {
  115. this.__before();
  116. this.__before = null;
  117. }
  118. switch (contentType) {
  119. case "form":
  120. headers['content-type'] = 'application/x-www-form-urlencoded';
  121. break;
  122. case "json":
  123. headers['content-type'] = 'application/json';
  124. break;
  125. default:
  126. headers['content-type'] = 'application/x-www-form-urlencoded';
  127. }
  128. uni.request({
  129. url: url,
  130. data: data,
  131. method: "POST",
  132. dataType: "json",
  133. header: headers,
  134. success: (res) => {
  135. success(res.data);
  136. },
  137. fail: fail,
  138. complete: () => {
  139. if (this.__after != null) {
  140. this.__after();
  141. this.__after = null;
  142. }
  143. }
  144. });
  145. },
  146. // 请求前置函数
  147. __before: null,
  148. setBefore: function(func) {
  149. this.__before = func;
  150. },
  151. // 请求后置函数
  152. __after: null,
  153. setAfter: function(func) {
  154. this.__after = func;
  155. },
  156. // --- 数据缓存 ---
  157. setStorage: function(data) {
  158. try {
  159. for (let k in data) {
  160. uni.setStorageSync(k, data[k] + '');
  161. }
  162. return true;
  163. } catch (e) {
  164. return false;
  165. }
  166. },
  167. getStorage: function(keyName) {
  168. try {
  169. var tmpVal = uni.getStorageSync(keyName);
  170. if (tmpVal == '') {
  171. return false;
  172. }
  173. return tmpVal;
  174. } catch (e) {
  175. return false;
  176. }
  177. },
  178. removeStorage: function(keyName) {
  179. try {
  180. uni.removeStorageSync(keyName);
  181. return true;
  182. } catch (e) {
  183. return false;
  184. }
  185. },
  186. clearStorage: function() {
  187. try {
  188. uni.clearStorageSync();
  189. } catch (e) {}
  190. },
  191. // --- 图片相关 ---
  192. chooseImgs: function(sets, success, fail, complete) {
  193. if (!sets.count) {
  194. sets.count = 1;
  195. }
  196. if (!sets.sizeType) {
  197. sets.sizeType = ['original', 'compressed'];
  198. }
  199. if (!sets.sourceType) {
  200. sets.sourceType = ['album', 'camera'];
  201. }
  202. uni.chooseImage({
  203. count: sets.count, //默认9
  204. sizeType: sets.sizeType, //可以指定是原图还是压缩图,默认二者都有
  205. sourceType: sets.sourceType, //从相册选择
  206. success: (res) => {
  207. success(res.tempFilePaths);
  208. },
  209. fail: (e) => {
  210. if (fail) {
  211. fail(e);
  212. }
  213. },
  214. complete: (e) => {
  215. if (complete) {
  216. complete(e);
  217. }
  218. }
  219. });
  220. },
  221. getImageInfo: function(imgUrl, success, fail, complete) {
  222. uni.getImageInfo({
  223. src: imgUrl,
  224. success: function(info) {
  225. success(info);
  226. },
  227. fail: (e) => {
  228. if (fail) {
  229. fail(e);
  230. }
  231. },
  232. complete: (e) => {
  233. if (complete) {
  234. complete(e);
  235. }
  236. }
  237. });
  238. },
  239. previewImage: function(items, currentImg) {
  240. uni.previewImage({
  241. urls: items,
  242. current: currentImg
  243. });
  244. },
  245. // --- 系统信息 ---
  246. system: function() {
  247. try {
  248. var res = uni.getSystemInfoSync();
  249. var iPhoneXBottom = 0;
  250. if (!res.model) {
  251. res.model = 'no';
  252. }
  253. res.model = res.model.replace(' ', '');
  254. res.model = res.model.toLowerCase();
  255. var res1 = res.model.indexOf('iphonex');
  256. if (res1 > 5) {
  257. res1 = -1;
  258. }
  259. var res2 = res.model.indexOf('iphone1');
  260. if (res2 > 5) {
  261. res2 = -1;
  262. }
  263. if (res1 != -1 || res2 != -1) {
  264. res.iPhoneXBottomHeightRpx = 60;
  265. res.iPhoneXBottomHeightPx = uni.upx2px(60);
  266. } else {
  267. res.iPhoneXBottomHeightRpx = 0;
  268. res.iPhoneXBottomHeightPx = 0;
  269. }
  270. return res;
  271. } catch (e) {
  272. return null;
  273. }
  274. },
  275. // --- 消息弹框 ---
  276. msg: function(msg) {
  277. uni.showToast({
  278. title: msg,
  279. icon: "none"
  280. });
  281. },
  282. showLoading: function(title) {
  283. uni.showLoading({
  284. title: title,
  285. mask: true
  286. });
  287. },
  288. // --- 导航条设置 ---
  289. setNavBar: function(sets) {
  290. if (sets.title) {
  291. uni.setNavigationBarTitle({
  292. title: sets.title
  293. });
  294. }
  295. if (sets.color) {
  296. uni.setNavigationBarColor({
  297. frontColor: sets.color.frontColor,
  298. backgroundColor: sets.color.backgroundColor,
  299. animation: {
  300. duration: 400,
  301. timingFunc: 'easeIn'
  302. }
  303. });
  304. }
  305. if (sets.loading) {
  306. uni.showNavigationBarLoading();
  307. } else {
  308. uni.hideNavigationBarLoading();
  309. }
  310. },
  311. // --- 元素选择 ---
  312. // 单个元素选择
  313. select: function(selector, callBack) {
  314. uni.createSelectorQuery().select(selector).boundingClientRect().exec((res) => {
  315. callBack(res[0]);
  316. });
  317. },
  318. // 多个元素获取
  319. selectAll: function(selector, callBack) {
  320. uni.createSelectorQuery().selectAll(selector).boundingClientRect().exec((res) => {
  321. callBack(res[0]);
  322. });
  323. },
  324. // --- 数组操作 ---
  325. // 数组合并
  326. arrayConcat: function() {
  327. var tmpArr = [];
  328. for (let i = 0; i < arguments.length; i++) {
  329. tmpArr = tmpArr.concat(arguments[i]);
  330. }
  331. return tmpArr;
  332. },
  333. arrayDrop: function(array, index, howmany) {
  334. if (!index) {
  335. index = 0;
  336. }
  337. if (!howmany) {
  338. howmany = 1;
  339. }
  340. array.splice(index, howmany);
  341. return array;
  342. },
  343. arrayIndexOf: function(arr, needFind) {
  344. var index = -1;
  345. for (let i = 0; i < arr.length; i++) {
  346. if (arr[i] == needFind) {
  347. index = i;
  348. return i;
  349. }
  350. }
  351. return index;
  352. },
  353. arrayDifference: function(a, b) {
  354. const set = new Set(b);
  355. return a.filter(x => !set.has(x));
  356. },
  357. arrayShuffle: function(arr) {
  358. let l = arr.length;
  359. while (l) {
  360. const i = Math.floor(Math.random() * l--);
  361. [arr[l], arr[i]] = [arr[i], arr[l]];
  362. }
  363. return arr;
  364. },
  365. arraySum: function(arr) {
  366. return arr.reduce((acc, val) => acc + val, 0);
  367. },
  368. arrayAvg: function(arr) {
  369. return arr.reduce((acc, val) => acc + val, 0) / arr.length;
  370. },
  371. arrayEach: function(arr, fun) {
  372. for (let i = 0; i < arr.length; i++) {
  373. fun(arr[i], i);
  374. }
  375. },
  376. // 2数之间的随机数
  377. random: function(min, max) {
  378. switch (arguments.length) {
  379. case 1:
  380. return parseInt(Math.random() * min + 1, 10);
  381. break;
  382. case 2:
  383. return parseInt(Math.random() * (max - min + 1) + min, 10);
  384. break;
  385. default:
  386. return 0;
  387. }
  388. },
  389. // UUID
  390. uuid: function(len) {
  391. var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');
  392. var uuid = [],
  393. i;
  394. if (len) {
  395. for (i = 0; i < len; i++) {
  396. uuid[i] = chars[0 | Math.random() * chars.length];
  397. }
  398. } else {
  399. var r;
  400. uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';
  401. uuid[14] = '4';
  402. for (i = 0; i < 36; i++) {
  403. if (!uuid[i]) {
  404. r = 0 | Math.random() * 16;
  405. uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];
  406. }
  407. }
  408. }
  409. return uuid.join('');
  410. },
  411. // --- 日期时间 ---
  412. now: function(type, addTime) {
  413. var dateObj = new Date();
  414. var cTime = dateObj.getTime();
  415. if (addTime) {
  416. cTime += addTime;
  417. }
  418. if (!type) {
  419. type = 'number';
  420. }
  421. if (type == 'number') {
  422. return cTime;
  423. } else if (type == 'str') {
  424. return this.toDate(cTime / 1000, 'str');
  425. } else if (type == 'array') {
  426. return this.toDate(cTime / 1000, 'array');
  427. }
  428. },
  429. // 时间戳转 YY-mm-dd HH:ii:ss
  430. toDate: function(timeStamp, returnType) {
  431. timeStamp = parseInt(timeStamp);
  432. var date = new Date();
  433. if (timeStamp < 90000000000) {
  434. date.setTime(timeStamp * 1000);
  435. } else {
  436. date.setTime(timeStamp);
  437. }
  438. var y = date.getFullYear();
  439. var m = date.getMonth() + 1;
  440. m = m < 10 ? ('0' + m) : m;
  441. var d = date.getDate();
  442. d = d < 10 ? ('0' + d) : d;
  443. var h = date.getHours();
  444. h = h < 10 ? ('0' + h) : h;
  445. var minute = date.getMinutes();
  446. var second = date.getSeconds();
  447. minute = minute < 10 ? ('0' + minute) : minute;
  448. second = second < 10 ? ('0' + second) : second;
  449. if (returnType == 'str') {
  450. return y + '-' + m + '-' + d + ' ' + h + ':' + minute + ':' + second;
  451. }
  452. return [y, m, d, h, minute, second];
  453. },
  454. // 字符串转时间戳
  455. toTimeStamp: function(timeStamp) {
  456. var reg = /^([0-9]{4})-([0-9]{2})-([0-9]{2}) ([0-9]{2}):([0-9]{2}):([0-9]{2})$/;
  457. var res = timeStamp.match(reg);
  458. if (res == null) {
  459. var reg2 = /^([0-9]{2})\/([0-9]{2})\/([0-9]{4}) ([0-9]{2}):([0-9]{2}):([0-9]{2})$/;
  460. var res2 = timeStamp.match(reg2);
  461. if (res2 == null) {
  462. console.log('时间格式错误 E001');
  463. return false;
  464. }
  465. var year = parseInt(res2[3]);
  466. var month = parseInt(res2[1]);
  467. var day = parseInt(res2[2]);
  468. var h = parseInt(res2[4]);
  469. var i = parseInt(res2[5]);
  470. var s = parseInt(res2[6]);
  471. } else {
  472. var year = parseInt(res[1]);
  473. var month = parseInt(res[2]);
  474. var day = parseInt(res[3]);
  475. var h = parseInt(res[4]);
  476. var i = parseInt(res[5]);
  477. var s = parseInt(res[6]);
  478. }
  479. if (year < 1000) {
  480. console.log('时间格式错误');
  481. return false;
  482. }
  483. if (h < 0 || h > 24) {
  484. console.log('时间格式错误');
  485. return false;
  486. }
  487. if (i < 0 || i > 60) {
  488. console.log('时间格式错误');
  489. return false;
  490. }
  491. if (s < 0 || s > 60) {
  492. console.log('时间格式错误');
  493. return false;
  494. }
  495. return Date.parse(new Date(year, month - 1, day, h, i, s));
  496. },
  497. // 根据时间戳计算多少分钟/小时/天之前
  498. fromTime: function(time) {
  499. if (time < 90000000000) {
  500. time *= 1000;
  501. }
  502. var timer = new Date().getTime() - time;
  503. timer = parseInt(timer / 1000);
  504. if (timer < 180) {
  505. return '刚刚';
  506. } else if (timer >= 180 && timer < 3600) {
  507. return parseInt(timer / 60) + '分钟前';
  508. } else if (timer >= 3600 && timer < 86400) {
  509. return parseInt(timer / 3600) + '小时前';
  510. } else if (timer >= 86400 && timer < 2592000) {
  511. return parseInt(timer / 86400) + '天前';
  512. } else {
  513. return this.toDate(time, 'str');
  514. }
  515. },
  516. // 延迟操作
  517. delay: function(timer, func) {
  518. return setTimeout(func, timer);
  519. },
  520. // 间隔指定时间循环某个函数
  521. interval: function(timer, func) {
  522. return setInterval(func, timer);
  523. },
  524. // 对象操作
  525. assign: function(obj, key, val) {
  526. obj[key] = val;
  527. },
  528. removeByKey: function(obj, key) {
  529. delete obj[key];
  530. },
  531. each: function(obj, func) {
  532. for (let k in obj) {
  533. func(k, obj[k]);
  534. }
  535. },
  536. isEmptyObj: function(obj) {
  537. return JSON.stringify(obj) === '{}';
  538. },
  539. // 获取ref ( 循环获取,直到 组件创建完成并获取成功 )
  540. getRefs: function(ref, _this, count, fun) {
  541. if (count >= 50) {
  542. fun(_this.$refs[ref]);
  543. return false;
  544. }
  545. var refReturn = _this.$refs[ref];
  546. if (refReturn) {
  547. fun(refReturn);
  548. } else {
  549. count++;
  550. setTimeout(() => {
  551. this.getRefs(ref, _this, count, fun);
  552. }, 100);
  553. }
  554. },
  555. // md5
  556. md5 : function(str){
  557. return md5.md5(str);
  558. }
  559. }