tools.js 9.8 KB

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