tools.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460
  1. var tools = {
  2. // 导航到彩图奔跑APP内的某个页面或执行APP内部的某些功能
  3. appAction(url) {
  4. console.log("appAction", url);
  5. // console.log("getApp", getApp());
  6. // getApp().$audio.destroy();
  7. // getApp().$audio.pause();
  8. window.location.href = url;
  9. },
  10. // 格式化赛事时间 09-09 16:48
  11. fmtMcTime(timestamp) { var date = new Date(timestamp * 1000); //时间戳为10位需*1000,时间戳为13位的话不需乘1000
  12. // var Y = date.getFullYear() + '-';
  13. var M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
  14. var D = (date.getDate() < 10 ? '0' + date.getDate() : date.getDate()) + ' ';
  15. var h = (date.getHours() < 10 ? '0' + date.getHours() : date.getHours()) + ':';
  16. var m = (date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes());
  17. // var s = (date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds());
  18. const timeStr = M + D + h + m;
  19. // console.log("timeStr", timeStr);
  20. return timeStr;
  21. },
  22. // 获取活动时间 09-09 16:48 至 09-30 16:48
  23. getActtime(beginSecond, endSecond) {
  24. const acttime = this.fmtMcTime(beginSecond) + " 至 " + this.fmtMcTime(endSecond);
  25. // console.log("acttime:", acttime);
  26. return acttime;
  27. },
  28. // 格式化赛事时间 2024.9.9-30 2024.9.9-10.30 2024.9.9-2025.10.30
  29. fmtMcTime2(timestamp1, timestamp2) {
  30. const date1 = new Date(timestamp1 * 1000); //时间戳为10位需*1000,时间戳为13位的话不需乘1000
  31. const date2 = new Date(timestamp2 * 1000); //时间戳为10位需*1000,时间戳为13位的话不需乘1000
  32. const Y1 = date1.getFullYear();
  33. const Y2 = date2.getFullYear();
  34. const M1 = date1.getMonth() + 1;
  35. const M2 = date2.getMonth() + 1;
  36. const D1 = date1.getDate();
  37. const D2 = date2.getDate();
  38. var timeStr1 = Y1 + '.' + M1 + '.' + D1;
  39. var timeStr2 = '';
  40. if (Y2 != Y1) {
  41. timeStr2 += Y2 + '.' + M2 + '.' + D2;
  42. } else if (M2 != M1) {
  43. timeStr2 += M2 + '.' + D2;
  44. } else if (D2 != D1) {
  45. timeStr2 += D2;
  46. }
  47. var timeStr = timeStr1;
  48. if (timeStr2.length > 0) {
  49. timeStr += '-' + timeStr2;
  50. }
  51. // console.log("timeStr", timeStr);
  52. return timeStr;
  53. },
  54. // 判断赛事/活动状态 0: 未开始 1: 进行中 2: 已结束
  55. checkMcState(beginSecond, endSecond) {
  56. let mcState = 0; // 未开始
  57. if (beginSecond > 0 && endSecond > 0) {
  58. const now = Date.now() / 1000;
  59. const dif1 = beginSecond - now;
  60. const dif2 = endSecond - now;
  61. // const dif = 3600*24 - 60;
  62. if (dif1 > 0) {
  63. console.log("活动未开始");
  64. mcState = 0; // 未开始
  65. } else if (dif2 > 0) {
  66. console.log("活动进行中");
  67. mcState = 1; // 进行中
  68. } else {
  69. console.log("活动已结束");
  70. mcState = 2; // 已结束
  71. }
  72. }
  73. return mcState;
  74. },
  75. // 动态创建<style>标签,将CSS代码插入到文档中
  76. loadCssCode(cssCode) {
  77. this.removeCssCode();
  78. const styleId = "css-custom";
  79. var style = window.document.createElement("style");
  80. style.type = "text/css";
  81. style.id = styleId;
  82. if (style.styleSheet) {
  83. // This is required for IE8 and below.
  84. style.styleSheet.cssText = cssCode;
  85. } else {
  86. style.appendChild(document.createTextNode(cssCode));
  87. }
  88. document.getElementsByTagName("head")[0].appendChild(style);
  89. // console.log("head:", document.getElementsByTagName("head")[0]);
  90. // console.log("head:", document.getElementById(styleId));
  91. // console.log("style:", style);
  92. },
  93. // 删除之前动态创建的<style>标签
  94. removeCssCode() {
  95. const styleId = "css-custom";
  96. var oldCss = document.getElementById(styleId);
  97. // console.log("oldCss:", oldCss);
  98. if (oldCss != null) {
  99. document.getElementsByTagName("head")[0].removeChild(oldCss);
  100. console.log("oldCss 已移除");
  101. }
  102. },
  103. // uni-data-select 组件,根据选中的值获取对应的文本
  104. getSelectedText(obj, value) {
  105. const selectedOption = obj.find(option => option.value === value);
  106. return selectedOption ? selectedOption.text : '';
  107. },
  108. objectToQueryString(obj) {
  109. return Object.keys(obj).map(k => k + '=' + obj[k]).join('&');
  110. },
  111. // 秒数转换成 XX天XX小时
  112. convertSecondsToDHM(seconds) {
  113. var days = Math.floor(seconds / (3600 * 24));
  114. var hours = Math.floor((seconds % (3600 * 24)) / 3600);
  115. var minutes = Math.floor((seconds % (3600 * 24)) % 3600 / 60);
  116. if (days > 0)
  117. // return `${days.toString().padStart(2, '0')}天${hours.toString().padStart(2, '0')}小时`;
  118. return `${days}天${hours.toString().padStart(2, '0')}小时`;
  119. else
  120. return `${hours.toString().padStart(2, '0')}小时${minutes.toString().padStart(2, '0')}分钟`;
  121. },
  122. // 秒数转换成时分秒
  123. // style: 0 [01:02:03] 1 [1h:02'3"]
  124. convertSecondsToHMS(seconds, style = 0) {
  125. var hours = Math.floor(seconds / 3600);
  126. var minutes = Math.floor((seconds % 3600) / 60);
  127. var remainingSeconds = Math.floor(seconds % 60);
  128. // return hours + ":" + minutes + ":" + remainingSeconds;
  129. if (style == 0)
  130. return `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:${remainingSeconds.toString().padStart(2, '0')}`;
  131. else if (style == 1) {
  132. if (hours > 0)
  133. return `${hours}h${minutes}′${remainingSeconds}″`;
  134. else
  135. return `${minutes}′${remainingSeconds}″`;
  136. }
  137. else if (style == 2) {
  138. if (hours > 0)
  139. return `${hours*60+minutes}′${remainingSeconds}″`;
  140. else
  141. return `${minutes}′${remainingSeconds}″`;
  142. }
  143. },
  144. // 计算(中英文混合)字符串长度
  145. calStrLen(str) {
  146. var length = 0;
  147. for (var i = 0; i < str.length; i++) {
  148. // 将字符转换为 Unicode 编码
  149. var charCode = str.charCodeAt(i);
  150. if (charCode >= 0 && charCode <= 128) {
  151. length++;
  152. } else {
  153. length += 2;
  154. }
  155. }
  156. return length;
  157. },
  158. // 集合对象去重
  159. unique(arr, field) {
  160. var map = {};
  161. var res = [];
  162. for (var i = 0; i < arr.length; i++) {
  163. if (!map[arr[i][field]]) {
  164. map[arr[i][field]] = 1;
  165. res.push(arr[i]);
  166. }
  167. }
  168. return res;
  169. },
  170. // 正则取出html标签
  171. repalceHtml(str) {
  172. var dd = str.replace(/<\/?.+?>/g, "");
  173. var dds = dd.replace(/ /g, ""); //dds为得到后的内容
  174. return dds;
  175. },
  176. // 判断身份证号
  177. isSfz(idcard) {
  178. var id =
  179. /^[1-9][0-9]{5}(19|20)[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|31)|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}([0-9]|x|X)$/
  180. if (idcard === '') {
  181. uni.showToast({
  182. title: '请输入身份证号',
  183. icon: 'none'
  184. })
  185. } else if (!id.test(idcard)) {
  186. uni.showToast({
  187. title: '身份证号格式不正确!',
  188. icon: 'none'
  189. })
  190. return false
  191. } else {
  192. return false
  193. }
  194. },
  195. // 判断是否是手机号
  196. isPhone(val) {
  197. var patrn = /^(((1[3456789][0-9]{1})|(15[0-9]{1}))+\d{8})$/
  198. if (!patrn.test(val) || val === '') {
  199. uni.showToast({
  200. title: '手机号格式不正确',
  201. icon: 'none'
  202. })
  203. return false
  204. } else {
  205. return true
  206. }
  207. },
  208. // 判断邮箱
  209. isEmail(email) {
  210. if (email.search(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/) != -1)
  211. return true;
  212. else
  213. return false;
  214. },
  215. //获取随机数
  216. getSuiji() {
  217. var Range = Max - Min;
  218. var Rand = Math.random();
  219. return (Min + Math.round(Rand * Range));
  220. },
  221. //计算多长时间前
  222. getDateDiff(dateTimeStamp) {
  223. var minute = 1000 * 60;
  224. var hour = minute * 60;
  225. var day = hour * 24;
  226. var halfamonth = day * 15;
  227. var month = day * 30;
  228. var year = day * 365;
  229. var now = new Date().getTime();
  230. var diffValue = now - dateTimeStamp;
  231. if (diffValue < 0) {
  232. return;
  233. }
  234. var yearC = diffValue / year;
  235. var monthC = diffValue / month;
  236. var weekC = diffValue / (7 * day);
  237. var dayC = diffValue / day;
  238. var hourC = diffValue / hour;
  239. var minC = diffValue / minute;
  240. if (yearC >= 1) {
  241. result = "" + parseInt(yearC) + "年前";
  242. }
  243. if (monthC >= 1) {
  244. result = "" + parseInt(monthC) + "月前";
  245. } else if (weekC >= 1) {
  246. result = "" + parseInt(weekC) + "周前";
  247. } else if (dayC >= 1) {
  248. result = "" + parseInt(dayC) + "天前";
  249. } else if (hourC >= 1) {
  250. result = "" + parseInt(hourC) + "小时前";
  251. } else if (minC >= 1) {
  252. result = "" + parseInt(minC) + "分钟前";
  253. } else
  254. result = "刚刚";
  255. return result;
  256. },
  257. // 时间戳转时间
  258. timestampToTime(timestamp, i) {
  259. var date = new Date(timestamp); //时间戳为10位需*1000,时间戳为13位的话不需乘1000
  260. // console.log(date, timestamp)
  261. var Y = date.getFullYear();
  262. var M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1);
  263. var D = (date.getDate() < 10 ? '0' + date.getDate() : date.getDate());
  264. var h = (date.getHours() < 10 ? '0' + date.getHours() : date.getHours());
  265. var m = (date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes());
  266. var s = (date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds());
  267. if (i == 1) {
  268. return Y + '-' + M + '-' + D;
  269. } else if (i == 2) {
  270. return Y + '年' + M + '月' + D + '日';
  271. }
  272. return Y + '-' + M + '-' + D + ' ' + h + ':' + m + ':' + s;
  273. },
  274. // 是否是汉字
  275. isHanzi(str) {
  276. let reg = /\p{Unified_Ideograph}/ug;
  277. return reg.test(str);
  278. },
  279. // 是否是字母数字
  280. isStringAndNumber(str) {
  281. let regNumber = new RegExp(/^[0-9A-Za-z]+$/);
  282. return regNumber.test(str)
  283. },
  284. // var arr3 = [30,10,111,35,1899,50,45];
  285. // 集合排序 元素数字
  286. listSort(list) {
  287. arr3.sort(function(a, b) {
  288. return a - b;
  289. })
  290. },
  291. // var arr5 = [{id:10},{id:5},{id:6},{id:9},{id:2},{id:3}];
  292. // 元素 对象
  293. listObjectSort(arr) {
  294. arr.sort(function(a, b) {
  295. return a.id - b.id
  296. })
  297. return arr;
  298. },
  299. /*
  300. * 忽略大小写判断字符串是否相同
  301. * @param str1
  302. * @param str2
  303. * @returns {Boolean}
  304. */
  305. isEqualsIgnorecase: function(str1, str2) {
  306. if (str1.toUpperCase() == str2.toUpperCase()) {
  307. return true;
  308. } else {
  309. return false;
  310. }
  311. },
  312. /**
  313. * 判断是否是数字
  314. * @param value
  315. * @returns {Boolean}
  316. */
  317. isNum: function(value) {
  318. if (value != null && value.length > 0 && isNaN(value) == false) {
  319. return true;
  320. } else {
  321. return false;
  322. }
  323. },
  324. /**
  325. * 判断是否是中文
  326. * @param str
  327. * @returns {Boolean}
  328. */
  329. isChine: function(str) {
  330. var reg = /^([u4E00-u9FA5]|[uFE30-uFFA0])*$/;
  331. if (reg.test(str)) {
  332. return false;
  333. }
  334. return true;
  335. },
  336. /*验证是否为图片*/
  337. tmCheckImage: function(fileName) {
  338. return /(gif|jpg|jpeg|png|GIF|JPG|PNG)$/ig.test(fileName);
  339. },
  340. /*验证是否为视频*/
  341. tmCheckVideo: function(fileName) {
  342. return /(mp4|mp3|flv|wav)$/ig.test(fileName);
  343. },
  344. /**
  345. * 去除字符串两边的空格
  346. * @param str
  347. * @returns {number|Number}
  348. * 调用方法:var str = utils.trim("abcd")
  349. */
  350. trim: function(str) {
  351. String.prototype.trim = function() {
  352. return str.replace(/(^\s*)|(\s*$)/g, "");
  353. }
  354. },
  355. // 判断密码是否符合 至少6位,包括大小写字母、数字、特殊字符
  356. isPassword(val) {
  357. var reg = /^(?![0-9]+$)(?![a-z]+$)(?![A-Z]+$)(?!([^(0-9a-zA-Z)])+$)^.{8,16}$/;
  358. if (val === '') {
  359. uni.showToast({
  360. title: '请输入密码',
  361. icon: 'none'
  362. })
  363. } else if (!reg.test(val)) {
  364. uni.showToast({
  365. title: '至少6位,包括大小写字母、数字、特殊字符',
  366. icon: 'none'
  367. })
  368. return false
  369. } else {
  370. return true
  371. }
  372. },
  373. // 电话匿名
  374. noPassByMobile(str) {
  375. if (null != str && str != undefined) {
  376. var pat = /(\d{3})\d*(\d{4})/;
  377. return str.replace(pat, '$1****$2');
  378. } else {
  379. return "";
  380. }
  381. },
  382. // 获取两点间的距离
  383. //进行经纬度转换为距离的计算
  384. Rad(d) {
  385. return d * Math.PI / 180.0; //经纬度转换成三角函数中度分表形式。
  386. },
  387. /*
  388. 计算距离,参数分别为第一点的纬度,经度;第二点的纬度,经度
  389. 默认单位km
  390. */
  391. getMapDistance(lat1, lat2, lng1, lng2) {
  392. lat1 = lat1 || 0;
  393. lng1 = lng1 || 0;
  394. lat2 = lat2 || 0;
  395. lng2 = lng2 || 0;
  396. var rad1 = lat1 * Math.PI / 180.0;
  397. var rad2 = lat2 * Math.PI / 180.0;
  398. var a = rad1 - rad2;
  399. var b = lng1 * Math.PI / 180.0 - lng2 * Math.PI / 180.0;
  400. var r = 6378137;
  401. var distance = r * 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(rad1) * Math.cos(rad2) *
  402. Math.pow(Math.sin(b / 2), 2)));
  403. // console.log(lat1, lng1, lat2, lng2);
  404. // console.log(distance);
  405. return Math.round(distance) / 1000;
  406. },
  407. // 预览图片
  408. yulanImg(item) {
  409. let arr = [item]
  410. uni.previewImage({
  411. urls: arr,
  412. });
  413. },
  414. }
  415. export default tools;