grace.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402
  1. var md5 = require('@/lib/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){type = 'navigateTo';}
  12. if(!success){success = function(){};}
  13. if(!fail){fail = function(){};}
  14. if(!complete){complete = function(){};}
  15. switch(type){
  16. case 'navigateTo' :
  17. uni.navigateTo({url:url, success:success, fail:fail, complete:complete});
  18. break;
  19. case 'redirectTo' :
  20. uni.redirectTo({url:url, success:success, fail:fail, complete:complete});
  21. break;
  22. case 'switchTab' :
  23. uni.switchTab({url:url, success:success, fail:fail, complete:complete});
  24. break;
  25. case 'reLaunch' :
  26. uni.reLaunch({url:url, success:success, fail:fail, complete:complete});
  27. break;
  28. }
  29. },
  30. // 返回
  31. back:function(delta){
  32. if(!delta){delta = 1;}
  33. uni.navigateBack({delta:delta});
  34. },
  35. // --- 网络请求 ---
  36. // get
  37. get : function(url, data, headers, success, fail){
  38. if(!fail){fail = () => {this.msg("网络请求失败");}}
  39. if(!headers){headers={};}
  40. if(this.__before != null){this.__before(); this.__before = null;}
  41. uni.request({
  42. url : url,
  43. data : data,
  44. method : "GET",
  45. dataType : "json",
  46. header : headers,
  47. success : (res) => {success(res.data);},
  48. fail : fail,
  49. complete : () => {if(this.__after != null){this.__after(); this.__after = null;}}
  50. });
  51. },
  52. // post
  53. post : function(url, data, contentType, headers, success, fail){
  54. if(!fail){fail = () => {this.msg("网络请求失败");}}
  55. if(!headers){headers={};}
  56. if(!contentType){contentType = 'form';}
  57. if(this.__before != null){this.__before(); this.__before = null;}
  58. switch(contentType){
  59. case "form" :
  60. headers['content-type'] = 'application/x-www-form-urlencoded';
  61. break;
  62. case "json" :
  63. headers['content-type'] = 'application/json';
  64. break;
  65. default :
  66. headers['content-type'] = 'application/x-www-form-urlencoded';
  67. }
  68. uni.request({
  69. url : url,
  70. data : data,
  71. method : "POST",
  72. dataType : "json",
  73. header : headers,
  74. success : (res) => {success(res.data);},
  75. fail : fail,
  76. complete : () => {if(this.__after != null){this.__after(); this.__after = null;}}
  77. });
  78. },
  79. // 请求前置函数
  80. __before : null,
  81. setBefore : function(func){
  82. this.__before = func;
  83. },
  84. // 请求后置函数
  85. __after : null,
  86. setAfter : function(func){
  87. this.__after = func;
  88. },
  89. // --- 数据缓存 ---
  90. setStorage : function(data){
  91. try {
  92. for(let k in data){uni.setStorageSync(k, data[k]+'');}
  93. return true;
  94. } catch (e){return false;}
  95. },
  96. getStorage : function(keyName){
  97. try {
  98. var tmpVal = uni.getStorageSync(keyName);
  99. if(tmpVal == ''){return false;}
  100. return tmpVal;
  101. } catch (e){return false;}
  102. },
  103. removeStorage : function(keyName){
  104. try {
  105. uni.removeStorageSync(keyName);
  106. return true;
  107. } catch (e){return false;}
  108. },
  109. clearStorage : function(){
  110. try { uni.clearStorageSync(); } catch (e) {}
  111. },
  112. // --- 图片相关 ---
  113. chooseImgs : function(sets, success, fail, complete) {
  114. if(!sets.count){sets.count = 1;}
  115. if(!sets.sizeType){sets.sizeType = ['original', 'compressed'];}
  116. if(!sets.sourceType){sets.sourceType = ['album', 'camera'];}
  117. uni.chooseImage({
  118. count: sets.count, //默认9
  119. sizeType: sets.sizeType, //可以指定是原图还是压缩图,默认二者都有
  120. sourceType: sets.sourceType, //从相册选择
  121. success:(res) => {success(res.tempFilePaths);},
  122. fail: (e) => { if(fail){fail(e);}},
  123. complete: (e) => { if(complete){complete(e);}}
  124. });
  125. },
  126. getImageInfo : function(imgUrl, success, fail, complete){
  127. uni.getImageInfo({
  128. src: imgUrl,
  129. success: function (info) {success(info);},
  130. fail: (e) => { if(fail){fail(e);}},
  131. complete: (e) => { if(complete){complete(e);}}
  132. });
  133. },
  134. previewImage : function (items, currentImg) {
  135. uni.previewImage({ urls: items, current:currentImg});
  136. },
  137. // --- 系统信息 ---
  138. system : function () {
  139. try {
  140. var res = uni.getSystemInfoSync();
  141. var iPhoneXBottom = 0;
  142. if(!res.model){res.model = 'no';}
  143. res.model = res.model.replace(' ', '');
  144. res.model = res.model.toLowerCase();
  145. var res1 = res.model.indexOf('iphonex');
  146. if(res1 > 5){res1 = -1;}
  147. var res2 = res.model.indexOf('iphone1');
  148. if(res2 > 5){res2 = -1;}
  149. if(res1 != -1 || res2 != -1){
  150. res.iPhoneXBottomHeightRpx = 50;
  151. res.iPhoneXBottomHeightPx = uni.upx2px(50);
  152. }else{
  153. res.iPhoneXBottomHeightRpx = 0;
  154. res.iPhoneXBottomHeightPx = 0;
  155. }
  156. return res;
  157. } catch (e){
  158. return null;
  159. }
  160. },
  161. // --- 消息弹框 ---
  162. msg : function(msg){uni.showToast({title:msg, icon:"none"});},
  163. showLoading : function (title) {uni.showLoading({ title:title , mask:true });},
  164. // --- 导航条设置 ---
  165. setNavBar : function(sets){
  166. if(sets.title){uni.setNavigationBarTitle({title:sets.title});}
  167. if(sets.color){
  168. uni.setNavigationBarColor({
  169. frontColor: sets.color.frontColor,
  170. backgroundColor:sets.color.backgroundColor,
  171. animation: {
  172. duration: 400,
  173. timingFunc: 'easeIn'
  174. }
  175. });
  176. }
  177. if(sets.loading){
  178. uni.showNavigationBarLoading();
  179. }else{
  180. uni.hideNavigationBarLoading();
  181. }
  182. },
  183. // --- 元素选择 ---
  184. // 单个元素选择
  185. select : function (selector, callBack) {
  186. uni.createSelectorQuery().select(selector).boundingClientRect().exec((res)=>{callBack(res[0]);});
  187. },
  188. // 多个元素获取
  189. selectAll : function (selector, callBack) {
  190. uni.createSelectorQuery().selectAll(selector).boundingClientRect().exec((res)=>{callBack(res[0]);});
  191. },
  192. // --- 数组操作 ---
  193. // 数组合并
  194. arrayConcat : function(){
  195. var tmpArr = [];
  196. for(let i = 0; i < arguments.length; i++){tmpArr = tmpArr.concat(arguments[i]);}
  197. return tmpArr;
  198. },
  199. arrayDrop : function(array, index, howmany){
  200. if(!index){index = 0;}
  201. if(!howmany){howmany = 1;}
  202. array.splice(index, howmany);
  203. return array;
  204. },
  205. arrayIndexOf : function(arr, needFind){
  206. var index = -1;
  207. for(let i = 0; i < arr.length; i++){
  208. if(arr[i] == needFind){index = i; return i;}
  209. }
  210. return index;
  211. },
  212. arrayDifference : function(a, b){
  213. const set = new Set(b);
  214. return a.filter(x => !set.has(x));
  215. },
  216. arrayShuffle : function (arr) {
  217. let l = arr.length;
  218. while (l) {
  219. const i = Math.floor(Math.random() * l--);
  220. [arr[l], arr[i]] = [arr[i], arr[l]];
  221. }
  222. return arr;
  223. },
  224. arraySum: function(arr){
  225. return arr.reduce((acc, val) => acc + val, 0);
  226. },
  227. arrayAvg: function(arr){
  228. return arr.reduce((acc, val) => acc + val, 0) / arr.length;
  229. },
  230. arrayEach : function(arr, fun){
  231. for(let i = 0; i < arr.length; i++) {fun(arr[i], i);}
  232. },
  233. // 2数之间的随机数
  234. random : function(min, max){
  235. switch(arguments.length){
  236. case 1:
  237. return parseInt(Math.random() * min + 1,10);
  238. break;
  239. case 2:
  240. return parseInt(Math.random() * (max - min + 1 ) + min, 10);
  241. break;
  242. default:
  243. return 0;
  244. }
  245. },
  246. // UUID
  247. uuid : function(len){
  248. var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');
  249. var uuid = [], i;
  250. if(len){
  251. for (i = 0; i < len; i++){uuid[i] = chars[0 | Math.random() * chars.length];}
  252. }else{
  253. var r;
  254. uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';
  255. uuid[14] = '4';
  256. for(i = 0; i < 36; i++){
  257. if (!uuid[i]){
  258. r = 0 | Math.random() * 16;
  259. uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];
  260. }
  261. }
  262. }
  263. return uuid.join('');
  264. },
  265. // --- 日期时间 ---
  266. now : function (type, addTime) {
  267. var dateObj = new Date();
  268. var cTime = dateObj.getTime();
  269. if(addTime){cTime += addTime;}
  270. if(!type){type = 'number';}
  271. if(type == 'number'){
  272. return cTime;
  273. }else if(type == 'str'){
  274. return this.toDate(cTime / 1000, 'str');
  275. }else if(type == 'array'){
  276. return this.toDate(cTime / 1000, 'array');
  277. }
  278. },
  279. // 时间戳转 YY-mm-dd HH:ii:ss
  280. toDate : function(timeStamp, returnType){
  281. timeStamp = parseInt(timeStamp);
  282. var date = new Date();
  283. if(timeStamp < 90000000000 ){
  284. date.setTime(timeStamp * 1000);
  285. }else{
  286. date.setTime(timeStamp );
  287. }
  288. var y = date.getFullYear();
  289. var m = date.getMonth() + 1;
  290. m = m < 10 ? ('0' + m) : m;
  291. var d = date.getDate();
  292. d = d < 10 ? ('0' + d) : d;
  293. var h = date.getHours();
  294. h = h < 10 ? ('0' + h) : h;
  295. var minute = date.getMinutes();
  296. var second = date.getSeconds();
  297. minute = minute < 10 ? ('0' + minute) : minute;
  298. second = second < 10 ? ('0' + second) : second;
  299. if(returnType == 'str'){return y + '-' + m + '-' + d + ' '+ h +':' + minute + ':' + second;}
  300. return [y, m, d, h, minute, second];
  301. },
  302. // 字符串转时间戳
  303. toTimeStamp : function(timeStamp){
  304. var reg = /^([0-9]{4})-([0-9]{2})-([0-9]{2}) ([0-9]{2}):([0-9]{2}):([0-9]{2})$/;
  305. var res = timeStamp.match(reg);
  306. if (res == null){
  307. var reg2 = /^([0-9]{2})\/([0-9]{2})\/([0-9]{4}) ([0-9]{2}):([0-9]{2}):([0-9]{2})$/;
  308. var res2 = timeStamp.match(reg2);
  309. if(res2 == null){ console.log('时间格式错误 E001'); return false;}
  310. var year = parseInt(res2[3]);
  311. var month = parseInt(res2[1]);
  312. var day = parseInt(res2[2]);
  313. var h = parseInt(res2[4]);
  314. var i = parseInt(res2[5]);
  315. var s = parseInt(res2[6]);
  316. }else{
  317. var year = parseInt(res[1]);
  318. var month = parseInt(res[2]);
  319. var day = parseInt(res[3]);
  320. var h = parseInt(res[4]);
  321. var i = parseInt(res[5]);
  322. var s = parseInt(res[6]);
  323. }
  324. if (year < 1000) { console.log('时间格式错误'); return false; }
  325. if (h < 0 || h > 24) { console.log('时间格式错误'); return false; }
  326. if (i < 0 || i > 60) { console.log('时间格式错误'); return false; }
  327. if (s < 0 || s > 60) { console.log('时间格式错误'); return false; }
  328. return Date.parse(new Date(year, month - 1, day, h, i, s));
  329. },
  330. // 根据时间戳计算多少分钟/小时/天之前
  331. fromTime : function (time){
  332. if(time < 90000000000 ){time *= 1000;}
  333. var timer = new Date().getTime() - time;
  334. timer = parseInt(timer / 1000);
  335. if(timer < 180){
  336. return '刚刚';
  337. }else if(timer >= 180 && timer < 3600){
  338. return parseInt(timer / 60) + '分钟前';
  339. }else if(timer >= 3600 && timer < 86400){
  340. return parseInt(timer / 3600) + '小时前';
  341. }else if(timer >= 86400 && timer < 2592000){
  342. return parseInt(timer / 86400) + '天前';
  343. }else{
  344. return this.toDate(time, 'str');
  345. }
  346. },
  347. // 延迟操作
  348. delay:function (timer, func){
  349. return setTimeout(func, timer);
  350. },
  351. // 间隔指定时间循环某个函数
  352. interval:function (timer, func){
  353. return setInterval(func, timer);
  354. },
  355. // 对象操作
  356. assign : function (obj, key, val) {obj[key] = val;},
  357. removeByKey : function (obj, key) {delete obj[key];},
  358. each : function(obj, func){
  359. for(let k in obj){func(k, obj[k]);}
  360. },
  361. isEmptyObj : function(obj){return JSON.stringify(obj) === '{}';},
  362. // 获取ref ( 循环获取,直到 组件创建完成并获取成功 )
  363. getRefs : function(ref, _this, count, fun){
  364. if(count >= 50){
  365. fun(this.$refs[ref]);
  366. return null;
  367. }
  368. var refReturn = _this.$refs[ref];
  369. if(refReturn){
  370. // #ifdef APP-NVUE
  371. fun(refReturn);
  372. return;
  373. // #endif
  374. // #ifndef APP-NVUE
  375. if(refReturn._data){
  376. fun(refReturn);
  377. return;
  378. }
  379. // #endif
  380. }else{
  381. count++;
  382. setTimeout(()=>{
  383. this.getRefs(ref, _this, count, fun);
  384. }, 100);
  385. }
  386. }
  387. }