grace.js 12 KB

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