common.ts 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. // -防抖
  2. export function debounce(fn: Function, wait: number) {
  3. let delay = wait || 500
  4. let timer: any = null;
  5. return function () {
  6. let args = arguments;
  7. if (timer) {
  8. clearTimeout(timer)
  9. console.log('debounce')
  10. }
  11. let callNow = !timer
  12. timer = setTimeout(() => {
  13. console.log('debounce send')
  14. timer = null
  15. }, delay)
  16. if (callNow) fn.apply(null, args)
  17. }
  18. }
  19. // -节流
  20. export function throttle(fn: Function, wait: number) {
  21. let delay = wait || 500
  22. let timer: any = null;
  23. return function () {
  24. if (timer) {
  25. console.log('throttle');
  26. return
  27. }
  28. timer = setTimeout(() => {
  29. console.log('throttle send');
  30. fn.apply(null, arguments)
  31. timer = null
  32. }, delay)
  33. }
  34. }
  35. //计算坐标距离
  36. export function calcMapDistance(lat1: number, lng1: number, lat2: number, lng2: number) {
  37. let radLat1 = (lat1 * Math.PI) / 180.0;
  38. let radLat2 = (lat2 * Math.PI) / 180.0;
  39. let a = radLat1 - radLat2;
  40. let b = (lng1 * Math.PI) / 180.0 - (lng2 * Math.PI) / 180.0;
  41. let s =
  42. 2 *
  43. Math.asin(
  44. Math.sqrt(
  45. Math.pow(Math.sin(a / 2), 2) +
  46. Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)
  47. )
  48. );
  49. s = s * 6378.137; // EARTH_RADIUS;
  50. s = Math.round(s * 10000) / 10000;
  51. return s.toFixed(2);
  52. }
  53. export function groupByKey(elements: Array<any>, key: string) {
  54. return elements.reduce((groups, item) => {
  55. const groupKey = item[key];
  56. if (!groups[groupKey]) {
  57. groups[groupKey] = [];
  58. }
  59. groups[groupKey].push(item);
  60. return groups;
  61. }, {});
  62. }
  63. export function fmtDictName(code: string, value: string) {
  64. let dictStorage: any = uni.getStorageSync('dict');
  65. if (!dictStorage) {
  66. return value;
  67. }
  68. let elements = dictStorage[code];
  69. if (elements) {
  70. let ele = elements.find((k: any) => k.value == value);
  71. if (ele) {
  72. return ele.name;
  73. }
  74. }
  75. return value;
  76. }
  77. export function getServicePhone() {
  78. let dictStorage: any = uni.getStorageSync('dict');
  79. if (!dictStorage) {
  80. return "";
  81. }
  82. let elements = dictStorage["Service.phone"];
  83. if (elements) {
  84. return elements[0].value;
  85. }
  86. return "";
  87. }
  88. export function fmtDateTime(date: any) {
  89. if (!date) {
  90. return "";
  91. }
  92. date = new Date(date);
  93. const year = date.getFullYear();
  94. const month = date.getMonth() + 1;
  95. const day = date.getDate();
  96. const hour = date.getHours();
  97. const minute = date.getMinutes();
  98. const second = date.getSeconds();
  99. return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':')
  100. };
  101. const formatNumber = n => {
  102. n = n.toString();
  103. return n[1] ? n : '0' + n
  104. }
  105. export function fmtDuration(ms: number) {
  106. let seconds = Math.floor(ms / 1000);
  107. let minutes = Math.floor(seconds / 60);
  108. let hours = Math.floor(minutes / 60);
  109. let days = Math.floor(hours / 24);
  110. hours %= 24;
  111. minutes %= 60;
  112. seconds %= 60;
  113. // 构建时长字符串
  114. let durationStr = '';
  115. if (days > 0) {
  116. durationStr += `${days}天`;
  117. }
  118. if (hours > 0) {
  119. durationStr += `${hours}时`;
  120. }
  121. if (minutes > 0) {
  122. durationStr += `${minutes}分`;
  123. }
  124. if (seconds > 0 || !durationStr) { // 如果没有小时和分钟,至少显示秒
  125. durationStr += `${seconds}秒`;
  126. }
  127. return durationStr.trim(); // 去除可能的前后空格
  128. }
  129. export function fmtMoney(money: number) {
  130. if (!money) {
  131. return "0.00";
  132. }
  133. return (money / 100).toFixed(2);
  134. }